OSDN Git Service

SDK Updater: Update buttons state in local/remote page
authorRaphael <raphael@google.com>
Thu, 25 Jun 2009 22:13:36 +0000 (15:13 -0700)
committerRaphael <raphael@google.com>
Thu, 25 Jun 2009 22:21:09 +0000 (15:21 -0700)
based on selection.

tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/LocalPackagesPage.java
tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java

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