SDK Updater: Update buttons state in local/remote page

based on selection.
This commit is contained in:
Raphael
2009-06-25 15:13:36 -07:00
parent 53f1c71a03
commit 7b2bb7452f
2 changed files with 58 additions and 22 deletions

View File

@@ -200,6 +200,7 @@ public class LocalPackagesPage extends Composite implements ISdkListener {
private void postCreate() { private void postCreate() {
mUpdaterData.addListeners(this); mUpdaterData.addListeners(this);
adjustColumnsWidth(); adjustColumnsWidth();
updateButtonsState();
} }
/** /**
@@ -221,6 +222,18 @@ public class LocalPackagesPage extends Composite implements ISdkListener {
resizer.controlResized(null); resizer.controlResized(null);
} }
/**
* Enable or disable buttons depending on list content and selection
*/
private void updateButtonsState() {
ISelection sel = mTableViewerPackages.getSelection();
boolean hasSelection = sel != null && !sel.isEmpty();
mUpdateButton.setEnabled(mTablePackages.getItemCount() > 0);
mDeleteButton.setEnabled(hasSelection);
mRefreshButton.setEnabled(true);
}
/** /**
* Called when an item in the package table viewer is selected. * Called when an item in the package table viewer is selected.
* If the items is an {@link IDescription} (as it should), this will display its long * If the items is an {@link IDescription} (as it should), this will display its long
@@ -228,6 +241,8 @@ public class LocalPackagesPage extends Composite implements ISdkListener {
* type or there is no selection, it empties the description area. * type or there is no selection, it empties the description area.
*/ */
private void onTreeSelected() { private void onTreeSelected() {
updateButtonsState();
ISelection sel = mTableViewerPackages.getSelection(); ISelection sel = mTableViewerPackages.getSelection();
if (sel instanceof IStructuredSelection) { if (sel instanceof IStructuredSelection) {
Object elem = ((IStructuredSelection) sel).getFirstElement(); Object elem = ((IStructuredSelection) sel).getFirstElement();
@@ -288,6 +303,7 @@ public class LocalPackagesPage extends Composite implements ISdkListener {
private void onRefreshSelected() { private void onRefreshSelected() {
mUpdaterData.reloadSdk(); mUpdaterData.reloadSdk();
updateButtonsState();
} }
public void onSdkChange() { public void onSdkChange() {

View File

@@ -25,9 +25,7 @@ import com.android.sdkuilib.internal.repository.UpdaterData.ISdkListener;
import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.ITreeSelection;
@@ -50,15 +48,8 @@ import java.util.ArrayList;
/* /*
* TODO list * TODO list
* - check source => toggle packages: all, none
* - check package => set source check to tri-state
* - check callback => install enable if has selection
* - select tree item: delete site enable if add-on source
* - select tree item: refresh enable if source
* - load add-on sites from pref * - load add-on sites from pref
* - delete site callback, update pref * - delete site callback, update pref
* - refresh callback
* - install selected callback
*/ */
public class RemotePackagesPage extends Composite implements ISdkListener { public class RemotePackagesPage extends Composite implements ISdkListener {
@@ -70,7 +61,7 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
private TreeColumn mColumnSource; private TreeColumn mColumnSource;
private Group mDescriptionContainer; private Group mDescriptionContainer;
private Button mAddSiteButton; private Button mAddSiteButton;
private Button mRemoveSiteButton; private Button mDeleteSiteButton;
private Label mPlaceholder3; private Label mPlaceholder3;
private Button mRefreshButton; private Button mRefreshButton;
private Button mInstallSelectedButton; private Button mInstallSelectedButton;
@@ -95,11 +86,6 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
parent.setLayout(new GridLayout(5, false)); parent.setLayout(new GridLayout(5, false));
mTreeViewerSources = new CheckboxTreeViewer(parent, SWT.BORDER); mTreeViewerSources = new CheckboxTreeViewer(parent, SWT.BORDER);
mTreeViewerSources.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
onTreeDoubleClick(event); //$hide$
}
});
mTreeViewerSources.addCheckStateListener(new ICheckStateListener() { mTreeViewerSources.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) { public void checkStateChanged(CheckStateChangedEvent event) {
onTreeCheckStateChanged(event); //$hide$ onTreeCheckStateChanged(event); //$hide$
@@ -137,14 +123,14 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
}); });
mAddSiteButton.setText("Add Site..."); mAddSiteButton.setText("Add Site...");
mRemoveSiteButton = new Button(parent, SWT.NONE); mDeleteSiteButton = new Button(parent, SWT.NONE);
mRemoveSiteButton.addSelectionListener(new SelectionAdapter() { mDeleteSiteButton.addSelectionListener(new SelectionAdapter() {
@Override @Override
public void widgetSelected(SelectionEvent e) { public void widgetSelected(SelectionEvent e) {
onRemoveSiteSelected(); //$hide$ onRemoveSiteSelected(); //$hide$
} }
}); });
mRemoveSiteButton.setText("Delete Site..."); mDeleteSiteButton.setText("Delete Site...");
mPlaceholder3 = new Label(parent, SWT.NONE); mPlaceholder3 = new Label(parent, SWT.NONE);
mPlaceholder3.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1)); mPlaceholder3.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));
@@ -189,6 +175,7 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
private void postCreate() { private void postCreate() {
mUpdaterData.addListeners(this); mUpdaterData.addListeners(this);
adjustColumnsWidth(); adjustColumnsWidth();
updateButtonsState();
} }
/** /**
@@ -218,6 +205,8 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
* type or there is no selection, it empties the description area. * type or there is no selection, it empties the description area.
*/ */
private void onTreeSelected() { private void onTreeSelected() {
updateButtonsState();
ISelection sel = mTreeViewerSources.getSelection(); ISelection sel = mTreeViewerSources.getSelection();
if (sel instanceof ITreeSelection) { if (sel instanceof ITreeSelection) {
Object elem = ((ITreeSelection) sel).getFirstElement(); Object elem = ((ITreeSelection) sel).getFirstElement();
@@ -238,6 +227,8 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
* When checking a package, only its compatible archives are checked. * When checking a package, only its compatible archives are checked.
*/ */
private void onTreeCheckStateChanged(CheckStateChangedEvent event) { private void onTreeCheckStateChanged(CheckStateChangedEvent event) {
updateButtonsState();
boolean b = event.getChecked(); boolean b = event.getChecked();
Object elem = event.getElement(); // Will be Archive or Package or RepoSource Object elem = event.getElement(); // Will be Archive or Package or RepoSource
@@ -278,10 +269,6 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
} }
} }
private void onTreeDoubleClick(DoubleClickEvent event) {
// TODO use or remove
}
private void onInstallSelectedArchives() { private void onInstallSelectedArchives() {
ArrayList<Archive> archives = new ArrayList<Archive>(); ArrayList<Archive> archives = new ArrayList<Archive>();
@@ -308,6 +295,7 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
if (mUpdaterData != null) { if (mUpdaterData != null) {
mUpdaterData.refreshSources(false /*forceFetching*/); mUpdaterData.refreshSources(false /*forceFetching*/);
} }
updateButtonsState();
} }
public void onSdkChange() { public void onSdkChange() {
@@ -318,6 +306,38 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
onTreeSelected(); onTreeSelected();
} }
private void updateButtonsState() {
// We install archives, so there should be at least one checked archive.
// Having sites or packages checked does not count.
boolean hasCheckedArchive = false;
Object[] checked = mTreeViewerSources.getCheckedElements();
if (checked != null) {
for (Object c : checked) {
if (c instanceof Archive) {
hasCheckedArchive = true;
break;
}
}
}
// Is there a selected site Source?
boolean hasSelectedSource = false;
ISelection sel = mTreeViewerSources.getSelection();
if (sel instanceof ITreeSelection) {
for (Object c : ((ITreeSelection) sel).toList()) {
if (c instanceof RepoSource) {
hasSelectedSource = true;
break;
}
}
}
mAddSiteButton.setEnabled(true);
mDeleteSiteButton.setEnabled(hasSelectedSource);
mRefreshButton.setEnabled(true);
mInstallSelectedButton.setEnabled(hasCheckedArchive);
}
// End of hiding from SWT Designer // End of hiding from SWT Designer
//$hide<<$ //$hide<<$
} }