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() {
mUpdaterData.addListeners(this);
adjustColumnsWidth();
updateButtonsState();
}
/**
@@ -221,6 +222,18 @@ public class LocalPackagesPage extends Composite implements ISdkListener {
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.
* 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.
*/
private void onTreeSelected() {
updateButtonsState();
ISelection sel = mTableViewerPackages.getSelection();
if (sel instanceof IStructuredSelection) {
Object elem = ((IStructuredSelection) sel).getFirstElement();
@@ -288,6 +303,7 @@ public class LocalPackagesPage extends Composite implements ISdkListener {
private void onRefreshSelected() {
mUpdaterData.reloadSdk();
updateButtonsState();
}
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.CheckboxTreeViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeSelection;
@@ -50,15 +48,8 @@ import java.util.ArrayList;
/*
* 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
* - delete site callback, update pref
* - refresh callback
* - install selected callback
*/
public class RemotePackagesPage extends Composite implements ISdkListener {
@@ -70,7 +61,7 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
private TreeColumn mColumnSource;
private Group mDescriptionContainer;
private Button mAddSiteButton;
private Button mRemoveSiteButton;
private Button mDeleteSiteButton;
private Label mPlaceholder3;
private Button mRefreshButton;
private Button mInstallSelectedButton;
@@ -95,11 +86,6 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
parent.setLayout(new GridLayout(5, false));
mTreeViewerSources = new CheckboxTreeViewer(parent, SWT.BORDER);
mTreeViewerSources.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
onTreeDoubleClick(event); //$hide$
}
});
mTreeViewerSources.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
onTreeCheckStateChanged(event); //$hide$
@@ -137,14 +123,14 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
});
mAddSiteButton.setText("Add Site...");
mRemoveSiteButton = new Button(parent, SWT.NONE);
mRemoveSiteButton.addSelectionListener(new SelectionAdapter() {
mDeleteSiteButton = new Button(parent, SWT.NONE);
mDeleteSiteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
onRemoveSiteSelected(); //$hide$
}
});
mRemoveSiteButton.setText("Delete Site...");
mDeleteSiteButton.setText("Delete Site...");
mPlaceholder3 = new Label(parent, SWT.NONE);
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() {
mUpdaterData.addListeners(this);
adjustColumnsWidth();
updateButtonsState();
}
/**
@@ -218,6 +205,8 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
* type or there is no selection, it empties the description area.
*/
private void onTreeSelected() {
updateButtonsState();
ISelection sel = mTreeViewerSources.getSelection();
if (sel instanceof ITreeSelection) {
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.
*/
private void onTreeCheckStateChanged(CheckStateChangedEvent event) {
updateButtonsState();
boolean b = event.getChecked();
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() {
ArrayList<Archive> archives = new ArrayList<Archive>();
@@ -308,6 +295,7 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
if (mUpdaterData != null) {
mUpdaterData.refreshSources(false /*forceFetching*/);
}
updateButtonsState();
}
public void onSdkChange() {
@@ -318,6 +306,38 @@ public class RemotePackagesPage extends Composite implements ISdkListener {
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
//$hide<<$
}