OSDN Git Service

SdkManager: double selection on tree viewer.
authorRaphael <raphael@google.com>
Tue, 13 Sep 2011 21:04:15 +0000 (14:04 -0700)
committerRaphael <raphael@google.com>
Tue, 13 Sep 2011 21:06:19 +0000 (14:06 -0700)
Change-Id: I74718caa48a59f132b6d37988625376c312bba27

sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java

index 9770bbb..4d539c0 100755 (executable)
@@ -188,7 +188,7 @@ public class AddonPackage extends Package
      * @param props The properties parsed from the addon manifest (not the source.properties).\r
      * @param error The error indicating why this addon failed to be loaded.\r
      */\r
-    static Package create(String archiveOsPath, Map<String, String> props, String error) {\r
+    static Package createBroken(String archiveOsPath, Map<String, String> props, String error) {\r
         String name     = props.get(SdkManager.ADDON_NAME);\r
         String vendor   = props.get(SdkManager.ADDON_VENDOR);\r
         String api      = props.get(SdkManager.ADDON_API);\r
index 0e47a2f..0e7cb3a 100755 (executable)
@@ -310,7 +310,7 @@ public class LocalSdkParser {
                 Map<String, String> props = infos.getFirst();\r
                 String error = infos.getSecond();\r
                 try {\r
-                    Package pkg = AddonPackage.create(dir.getAbsolutePath(), props, error);\r
+                    Package pkg = AddonPackage.createBroken(dir.getAbsolutePath(), props, error);\r
                     packages.add(pkg);\r
                     visited.add(dir);\r
                 } catch (Exception e) {\r
index 477239a..5cf33a1 100755 (executable)
@@ -36,9 +36,13 @@ import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
+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.ITableFontProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreeSelection;
 import org.eclipse.jface.viewers.TreeColumnViewerLabelProvider;
 import org.eclipse.jface.viewers.TreeViewerColumn;
 import org.eclipse.jface.viewers.Viewer;
@@ -193,6 +197,12 @@ public class PackagesPage extends UpdaterPage
             }
         });
 
+        mTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
+            public void doubleClick(DoubleClickEvent event) {
+                onTreeDoubleClick(event); //$hide$
+            }
+        });
+
         mTree = mTreeViewer.getTree();
         mTree.setLinesVisible(true);
         mTree.setHeaderVisible(true);
@@ -703,6 +713,42 @@ public class PackagesPage extends UpdaterPage
         updateButtonsState();
     }
 
+    private void onTreeDoubleClick(DoubleClickEvent event) {
+        assert event.getSource() == mTreeViewer;
+        ISelection sel = event.getSelection();
+        if (sel.isEmpty() || !(sel instanceof ITreeSelection)) {
+            return;
+        }
+        ITreeSelection tsel = (ITreeSelection) sel;
+        Object elem = tsel.getFirstElement();
+        if (elem == null) {
+            return;
+        }
+
+        ITreeContentProvider provider = (ITreeContentProvider) mTreeViewer.getContentProvider();
+        Object[] children = provider.getElements(elem);
+        if (children == null) {
+            return;
+        }
+
+        if (children.length > 0) {
+            // If the element has children, expand/collapse it.
+            if (mTreeViewer.getExpandedState(elem)) {
+                mTreeViewer.collapseToLevel(elem, 1);
+            } else {
+                mTreeViewer.expandToLevel(elem, 1);
+            }
+        } else {
+            // If the element is a terminal one, select/deselect it.
+            checkAndExpandItem(
+                    elem,
+                    !mTreeViewer.getChecked(elem),
+                    false /*fixChildren*/,
+                    true /*fixParent*/);
+            updateButtonsState();
+        }
+    }
+
     private void checkAndExpandItem(
             Object elem,
             boolean checked,