Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Xenos2016-07-22 20:51:05 +0000
committerStefan Xenos2016-07-22 21:30:42 +0000
commita3473afca079bd58582491f2e17a888829c11d42 (patch)
tree82d24551c18d5fa79cc2ff0904d4d943e74430a7
parent2a561923273f250ce2c9e231bfea33537107abb4 (diff)
downloadeclipse.platform.text-a3473afca079bd58582491f2e17a888829c11d42.tar.gz
eclipse.platform.text-a3473afca079bd58582491f2e17a888829c11d42.tar.xz
eclipse.platform.text-a3473afca079bd58582491f2e17a888829c11d42.zip
Bug 498319 - Search View: Expand All missing from Context MenuI20160726-0800
Add auto-expand to the search view. Change-Id: I9c743b5ea82f1570a9312a5c07f724a5877e86bf Signed-off-by: Stefan Xenos <sxenos@gmail.com>
-rw-r--r--org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java57
1 files changed, 57 insertions, 0 deletions
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java
index 056e1a24df0..2ca093eabb0 100644
--- a/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java
+++ b/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java
@@ -20,6 +20,7 @@ import java.util.Set;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.core.runtime.IAdaptable;
@@ -34,10 +35,13 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
@@ -174,6 +178,50 @@ public class FileSearchPage extends AbstractTextSearchViewPage implements IAdapt
viewer.setComparator(new DecoratorIgnoringViewerSorter(innerLabelProvider));
fContentProvider= (IFileSearchContentProvider) viewer.getContentProvider();
addDragAdapters(viewer);
+ viewer.addTreeListener(new ITreeViewerListener() {
+ @Override
+ public void treeCollapsed(TreeExpansionEvent event) {
+ }
+
+ @Override
+ public void treeExpanded(TreeExpansionEvent event) {
+ autoExpand(viewer, event.getElement());
+ }
+ });
+ }
+
+ /**
+ * Performs an auto-expansion starting at the given element in the viewer.
+ * As long as the object only has one unexpanded child, auto-expand will
+ * expand that child. It stops expanding children once there is actually a
+ * choice for the user to make.
+ *
+ * @param viewer
+ * the viewer to perform auto-expansion on
+ * @param toExpand
+ * the viewer entry at which expansion should start
+ */
+ private void autoExpand(TreeViewer viewer, Object toExpand) {
+ final ITreeContentProvider contentProvider = (ITreeContentProvider) viewer.getContentProvider();
+ Display.getCurrent().asyncExec(() -> {
+ if (viewer.getControl().isDisposed()) {
+ return;
+ }
+ Object current = toExpand;
+ while (current != null) {
+ Object childToExpand = null;
+ Object[] children = contentProvider.getChildren(current);
+ if (children != null && children.length == 1) {
+ childToExpand = children[0];
+ }
+ if (childToExpand != null) {
+ if (!viewer.getExpandedState(childToExpand)) {
+ viewer.setExpandedState(childToExpand, true);
+ }
+ }
+ current = childToExpand;
+ }
+ });
}
@Override
@@ -203,6 +251,15 @@ public class FileSearchPage extends AbstractTextSearchViewPage implements IAdapt
}
}
super.handleOpen(event);
+ Object firstElement = ((IStructuredSelection) event.getSelection()).getFirstElement();
+ Viewer viewer = event.getViewer();
+ if (viewer instanceof TreeViewer) {
+ TreeViewer treeViewer = (TreeViewer) viewer;
+
+ if (treeViewer.getExpandedState(firstElement)) {
+ autoExpand(treeViewer, firstElement);
+ }
+ }
}
@Override

Back to the top