diff options
| author | Stefan Xenos | 2016-07-22 20:51:05 +0000 |
|---|---|---|
| committer | Stefan Xenos | 2016-07-22 21:30:42 +0000 |
| commit | a3473afca079bd58582491f2e17a888829c11d42 (patch) | |
| tree | 82d24551c18d5fa79cc2ff0904d4d943e74430a7 | |
| parent | 2a561923273f250ce2c9e231bfea33537107abb4 (diff) | |
| download | eclipse.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.java | 57 |
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 |
