From 606d26952d74e0c39f3c766bab828cf96f507453 Mon Sep 17 00:00:00 2001 From: Raphael Date: Tue, 13 Sep 2011 14:04:15 -0700 Subject: [PATCH] SdkManager: double selection on tree viewer. Change-Id: I74718caa48a59f132b6d37988625376c312bba27 --- .../sdklib/internal/repository/AddonPackage.java | 2 +- .../sdklib/internal/repository/LocalSdkParser.java | 2 +- .../internal/repository/sdkman2/PackagesPage.java | 46 ++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java index 9770bbb7e..4d539c0ed 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java @@ -188,7 +188,7 @@ public class AddonPackage extends Package * @param props The properties parsed from the addon manifest (not the source.properties). * @param error The error indicating why this addon failed to be loaded. */ - static Package create(String archiveOsPath, Map props, String error) { + static Package createBroken(String archiveOsPath, Map props, String error) { String name = props.get(SdkManager.ADDON_NAME); String vendor = props.get(SdkManager.ADDON_VENDOR); String api = props.get(SdkManager.ADDON_API); diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java index 0e47a2fb4..0e7cb3abd 100755 --- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java +++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java @@ -310,7 +310,7 @@ public class LocalSdkParser { Map props = infos.getFirst(); String error = infos.getSecond(); try { - Package pkg = AddonPackage.create(dir.getAbsolutePath(), props, error); + Package pkg = AddonPackage.createBroken(dir.getAbsolutePath(), props, error); packages.add(pkg); visited.add(dir); } catch (Exception e) { diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java index 477239a33..5cf33a10d 100755 --- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java +++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java @@ -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, -- 2.11.0