Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Chen2012-05-18 05:26:50 +0000
committerWilliam Chen2012-05-18 05:26:50 +0000
commit56a357d2050b4c5c006078fc869ce5218b01577a (patch)
tree3c22239cb4791f35dbf89c55f87a2674cea82e5c /target_explorer
parent4018600b22f55acf76d24578ba0e6b7ad8190f70 (diff)
downloadorg.eclipse.tcf-56a357d2050b4c5c006078fc869ce5218b01577a.tar.gz
org.eclipse.tcf-56a357d2050b4c5c006078fc869ce5218b01577a.tar.xz
org.eclipse.tcf-56a357d2050b4c5c006078fc869ce5218b01577a.zip
Target Explorer: Bug fix for #379782: Provide a filter to match entries
users are interested in in Target Explorer view.
Diffstat (limited to 'target_explorer')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties4
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml14
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.properties4
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml14
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.properties4
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.xml70
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterHanlder.java46
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterResetHanlder.java47
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterHanlder.java40
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterResetHanlder.java41
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/plugin.xml49
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilter.java169
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilterPopup.java33
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterHanlder.java41
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterResetHanlder.java25
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java1
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties1
17 files changed, 469 insertions, 134 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties
index 0adaa8597..32855ae86 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.properties
@@ -112,4 +112,6 @@ command.refreshViewer.name = Refresh Viewer
propertyTab.general.label = General
propertyTab.advanced.label = Advanced
propertyTab.permission.label = Permissions
-command.refresh.tooltip = Refresh the selected nodes \ No newline at end of file
+command.refresh.tooltip = Refresh the selected nodes
+command.filter.label = Filter
+command.reset.label = Reset \ No newline at end of file
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml
index a1d70f357..41e4247f2 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.ui/plugin.xml
@@ -528,6 +528,20 @@
</with>
</visibleWhen>
</command>
+ <separator
+ name="group.filter"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.tcf.te.ui.command.quickfilter"
+ label="%command.filter.label"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.tcf.te.ui.command.resetfilter"
+ label="%command.reset.label"
+ style="push">
+ </command>
<separator name="group.properties" visible="true"/>
<command
commandId="org.eclipse.ui.file.properties"
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.properties
index e4131e496..40560d378 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.properties
@@ -71,4 +71,6 @@ page.context.name = Context
page.basic.name = Basic
command.terminate.label = Terminate
command.terminate.tooltip = Terminate the selected process
-command.terminate.name = Terminate \ No newline at end of file
+command.terminate.name = Terminate
+command.filter.label = Filter
+command.reset.label = Reset \ No newline at end of file
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml
index fb5ca48b5..bb1a4e6a0 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml
@@ -187,6 +187,20 @@
</visibleWhen>
</command>
<separator
+ name="group.filter"
+ visible="true">
+ </separator>
+ <command
+ commandId="org.eclipse.tcf.te.ui.command.quickfilter"
+ label="%command.filter.label"
+ style="push">
+ </command>
+ <command
+ commandId="org.eclipse.tcf.te.ui.command.resetfilter"
+ label="%command.reset.label"
+ style="push">
+ </command>
+ <separator
name="group.properties"
visible="true">
</separator>
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.properties b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.properties
index e4072e694..73fa3fb90 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.properties
@@ -62,4 +62,6 @@ command.content.name = Content
menu.categories.addto.label=Add To
menu.categories.removefrom.label=Remove From
-command.showin.name = Show In Group \ No newline at end of file
+command.showin.name = Show In Group
+command.filter.label = Filter
+command.reset.label = Reset \ No newline at end of file
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.xml
index 6bdfa580d..464aea7ee 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/plugin.xml
@@ -317,12 +317,12 @@
locationURI="popup:org.eclipse.tcf.te.ui.views.View#Popup?after=group.filter">
<command
commandId="org.eclipse.tcf.te.ui.command.quickfilter"
- label="Filter"
+ label="%command.filter.label"
style="push">
</command>
<command
commandId="org.eclipse.tcf.te.ui.command.resetfilter"
- label="Reset"
+ label="%command.reset.label"
style="push">
</command>
</menuContribution>
@@ -440,7 +440,71 @@
</with>
</activeWhen>
</handler>
- </extension>
+ <handler
+ class="org.eclipse.tcf.te.ui.views.handler.ViewQuickFilterHanlder"
+ commandId="org.eclipse.tcf.te.ui.command.quickfilter">
+ <activeWhen>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.tcf.te.ui.views.View">
+ </equals>
+ </with>
+ </activeWhen>
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="?">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler
+ class="org.eclipse.tcf.te.ui.views.handler.ViewQuickFilterResetHanlder"
+ commandId="org.eclipse.tcf.te.ui.command.resetfilter">
+ <activeWhen>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.tcf.te.ui.views.View">
+ </equals>
+ </with>
+ </activeWhen>
+ </handler>
+ <handler
+ class="org.eclipse.tcf.te.ui.views.handler.EditorQuickFilterHanlder"
+ commandId="org.eclipse.tcf.te.ui.command.quickfilter">
+ <activeWhen>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.tcf.te.ui.views.Editor">
+ </equals>
+ </with>
+ </activeWhen>
+ <enabledWhen>
+ <with
+ variable="selection">
+ <count
+ value="?">
+ </count>
+ </with>
+ </enabledWhen>
+ </handler>
+ <handler
+ class="org.eclipse.tcf.te.ui.views.handler.EditorQuickFilterResetHanlder"
+ commandId="org.eclipse.tcf.te.ui.command.resetfilter">
+ <activeWhen>
+ <with
+ variable="activePartId">
+ <equals
+ value="org.eclipse.tcf.te.ui.views.Editor">
+ </equals>
+ </with>
+ </activeWhen>
+ </handler>
+ </extension>
<!-- Eclipse core expressions property tester -->
<extension point="org.eclipse.core.expressions.propertyTesters">
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterHanlder.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterHanlder.java
new file mode 100644
index 000000000..69fb2b294
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterHanlder.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.te.ui.dialogs.QuickFilter;
+import org.eclipse.tcf.te.ui.views.editor.pages.TreeViewerExplorerEditorPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.IFormPage;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * The quick filter handler for the properties editor.
+ */
+public class EditorQuickFilterHanlder extends AbstractHandler {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IWorkbenchPart part = HandlerUtil.getActiveEditorChecked(event);
+ if(part instanceof FormEditor) {
+ FormEditor editor = (FormEditor)part;
+ IFormPage formPage = editor.getActivePageInstance();
+ if(formPage instanceof TreeViewerExplorerEditorPage) {
+ TreeViewerExplorerEditorPage page = (TreeViewerExplorerEditorPage) formPage;
+ TreeViewer viewer = (TreeViewer) page.getTreeControl().getViewer();
+ QuickFilter.doFilter(viewer);
+ }
+ }
+ return null;
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterResetHanlder.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterResetHanlder.java
new file mode 100644
index 000000000..d02615918
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/EditorQuickFilterResetHanlder.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.te.ui.dialogs.QuickFilter;
+import org.eclipse.tcf.te.ui.views.editor.pages.TreeViewerExplorerEditorPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.IFormPage;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * The handler to reset the tree viewer from the quick filter.
+ */
+public class EditorQuickFilterResetHanlder extends AbstractHandler {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IWorkbenchPart part = HandlerUtil.getActiveEditorChecked(event);
+ if(part instanceof FormEditor) {
+ FormEditor editor = (FormEditor)part;
+ IFormPage formPage = editor.getActivePageInstance();
+ if(formPage instanceof TreeViewerExplorerEditorPage) {
+ TreeViewerExplorerEditorPage page = (TreeViewerExplorerEditorPage) formPage;
+ TreeViewer viewer = (TreeViewer) page.getTreeControl().getViewer();
+ QuickFilter.doReset(viewer);
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterHanlder.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterHanlder.java
new file mode 100644
index 000000000..86339eb6a
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterHanlder.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.te.ui.dialogs.QuickFilter;
+import org.eclipse.tcf.te.ui.views.internal.View;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * The quick filter handler for Target Explorer view.
+ */
+public class ViewQuickFilterHanlder extends AbstractHandler {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IWorkbenchPart part = HandlerUtil.getActivePartChecked(event);
+ if (part instanceof View) {
+ View view = (View) part;
+ TreeViewer viewer = view.getCommonViewer();
+ QuickFilter.doFilter(viewer);
+ }
+ return null;
+ }
+} \ No newline at end of file
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterResetHanlder.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterResetHanlder.java
new file mode 100644
index 000000000..7ae77e325
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/handler/ViewQuickFilterResetHanlder.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.ui.views.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.te.ui.dialogs.QuickFilter;
+import org.eclipse.tcf.te.ui.views.internal.View;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * The handler to reset the tree viewer from the quick filter.
+ */
+public class ViewQuickFilterResetHanlder extends AbstractHandler {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IWorkbenchPart part = HandlerUtil.getActivePartChecked(event);
+ if(part instanceof View) {
+ View view = (View)part;
+ TreeViewer viewer = view.getCommonViewer();
+ QuickFilter.doReset(viewer);
+ }
+ return null;
+ }
+
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.ui/plugin.xml
index d66667777..9f190b649 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/plugin.xml
@@ -120,13 +120,13 @@
commandId="org.eclipse.tcf.te.ui.command.resetfilter"
contextId="org.eclipse.tcf.te.ui.views.View"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+R">
+ sequence="ESC">
</key>
<key
commandId="org.eclipse.tcf.te.ui.command.resetfilter"
contextId="org.eclipse.tcf.te.ui.views.Editor"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
- sequence="M1+R">
+ sequence="ESC">
</key>
</extension>
@@ -165,50 +165,5 @@
name="%preference.page.name">
</page>
</extension>
- <extension
- point="org.eclipse.ui.handlers">
- <handler
- class="org.eclipse.tcf.te.ui.internal.handlers.QuickFilterHanlder"
- commandId="org.eclipse.tcf.te.ui.command.quickfilter">
- <activeWhen>
- <with
- variable="activePartId">
- <or>
- <equals
- value="org.eclipse.tcf.te.ui.views.View">
- </equals>
- <equals
- value="org.eclipse.tcf.te.ui.views.Editor">
- </equals>
- </or>
- </with>
- </activeWhen>
- <enabledWhen>
- <with
- variable="selection">
- <count
- value="?">
- </count>
- </with>
- </enabledWhen>
- </handler>
- <handler
- class="org.eclipse.tcf.te.ui.internal.handlers.QuickFilterResetHanlder"
- commandId="org.eclipse.tcf.te.ui.command.resetfilter">
- <activeWhen>
- <with
- variable="activePartId">
- <or>
- <equals
- value="org.eclipse.tcf.te.ui.views.View">
- </equals>
- <equals
- value="org.eclipse.tcf.te.ui.views.Editor">
- </equals>
- </or>
- </with>
- </activeWhen>
- </handler>
- </extension>
</plugin>
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilter.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilter.java
index 2e1460d35..3c169f85b 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilter.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilter.java
@@ -10,23 +10,43 @@
package org.eclipse.tcf.te.ui.dialogs;
import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.TreeItem;
-
+/**
+ * A quick filter is a viewer filter that selects elements,
+ * which has the specified name pattern, under a certain tree path.
+ * Other elements outside of this tree path is ignored.
+ */
public class QuickFilter extends TablePatternFilter {
+ // The tree viewer to filter.
private TreeViewer viewer;
+ // The root path to select from.
private Object root;
+ /**
+ * Create a quick filter for the specified viewer.
+ */
private QuickFilter(TreeViewer viewer) {
super((ILabelProvider) viewer.getLabelProvider());
this.viewer = viewer;
}
- public static QuickFilter getQuickFilter(TreeViewer viewer) {
+ /**
+ * Get and attach a quick filter for a viewer.
+ *
+ * @param viewer The viewer to get quick filter from.
+ * @return A single quick filter for each viewer.
+ */
+ private static QuickFilter getQuickFilter(TreeViewer viewer) {
QuickFilter filter = (QuickFilter) viewer.getData("quick.filter"); //$NON-NLS-1$
if (filter == null) {
filter = new QuickFilter(viewer);
@@ -35,7 +55,109 @@ public class QuickFilter extends TablePatternFilter {
return filter;
}
- public void showFilter(Object root) {
+ /**
+ * Reset the viewer to the original view.
+ *
+ * @param viewer The viewer to be reset.
+ */
+ public static void doReset(TreeViewer viewer) {
+ if (QuickFilter.getQuickFilter(viewer).isFiltering()) {
+ QuickFilter.getQuickFilter(viewer).resetViewer();
+ }
+ }
+
+ /**
+ * Provide a pop up to enter filter to filter the tree viewer.
+ *
+ * @param viewer The tree viewer to be filtered.
+ */
+ public static void doFilter(TreeViewer viewer) {
+ TreePath rootPath = getSelectedPath(viewer);
+ Object root = getFilterRoot(viewer, rootPath);
+ if (root == viewer.getInput() || viewer.getExpandedState(root)) {
+ QuickFilter.getQuickFilter(viewer).showFilterPopup(root);
+ }
+ }
+
+ /**
+ * Get the filter root for the viewer based on the root path.
+ *
+ * @param viewer The tree viewer.
+ * @param rootPath The root path of the filter.
+ * @return An adjust filter.
+ */
+ private static Object getFilterRoot(TreeViewer viewer, TreePath rootPath) {
+ if (rootPath != null) {
+ if (!isEligibleRoot(rootPath, viewer)) {
+ rootPath = rootPath.getParentPath();
+ if (rootPath.getSegmentCount() == 0) {
+ viewer.setSelection(StructuredSelection.EMPTY);
+ }
+ else {
+ viewer.setSelection(new StructuredSelection(rootPath), true);
+ }
+ }
+ if (rootPath.getSegmentCount() == 0) {
+ viewer.setSelection(StructuredSelection.EMPTY);
+ return viewer.getInput();
+ }
+ return rootPath;
+ }
+ viewer.setSelection(StructuredSelection.EMPTY);
+ return viewer.getInput();
+ }
+
+ /**
+ * Test if the root for the tree viewer is eligible as a root path
+ * of a quick filter.
+ *
+ * @param root The root path to be tested.
+ * @param viewer The tree viewer to be filtered.
+ * @return true if it is eligible as a root path or else false.
+ */
+ private static boolean isEligibleRoot(TreePath root, TreeViewer viewer) {
+ if (viewer.getExpandedState(root)) {
+ ITreeContentProvider contentProvider = (ITreeContentProvider) viewer.getContentProvider();
+ Object rootElement = root.getLastSegment();
+ Object[] children = contentProvider.getChildren(rootElement);
+ if (children != null && children.length > 0) {
+ ViewerFilter[] filters = viewer.getFilters();
+ if (filters != null && filters.length > 0) {
+ for (ViewerFilter filter : filters) {
+ children = filter.filter(viewer, rootElement, children);
+ if (children == null || children.length == 0) break;
+ }
+ }
+ return children != null && children.length > 0;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get the selected path of the viewer.
+ *
+ * @param viewer The tree viewer to get the selected path from.
+ * @return the first selected path or null if no selected path.
+ */
+ private static TreePath getSelectedPath(TreeViewer viewer) {
+ ISelection selection = viewer.getSelection();
+ if (selection instanceof TreeSelection) {
+ TreeSelection treeSelection = (TreeSelection) selection;
+ TreePath[] paths = treeSelection.getPaths();
+ if (paths != null && paths.length > 0) {
+ return paths[0];
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Show the pop up dialog for the specified root path.
+ *
+ * @param root The root path to filter from.
+ */
+ private void showFilterPopup(Object root) {
this.root = root;
if (!isFiltering()) {
viewer.addFilter(this);
@@ -61,13 +183,21 @@ public class QuickFilter extends TablePatternFilter {
popup.getShell().setLocation(location);
}
- public void resetViewer() {
+ /**
+ * Reset the tree viewer to the ogriginal view by removing this filter.
+ */
+ void resetViewer() {
viewer.removeFilter(this);
root = null;
setPattern(null);
}
- public boolean isFiltering() {
+ /**
+ * If the current viewer is being filtered.
+ *
+ * @return true if it has this filter.
+ */
+ private boolean isFiltering() {
ViewerFilter[] filters = viewer.getFilters();
if (filters != null) {
for (ViewerFilter filter : filters) {
@@ -79,11 +209,34 @@ public class QuickFilter extends TablePatternFilter {
return false;
}
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.tcf.te.ui.dialogs.TablePatternFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
- if (root != null && root.equals(parentElement)) {
- return super.select(viewer, parentElement, element);
+ return skipMatching(parentElement) || super.select(viewer, parentElement, element);
+ }
+
+ /**
+ * If the specified parent element should be skipped when matching elements.
+ *
+ * @param parentElement The parent element.
+ * @return true if it should be skipped.
+ */
+ private boolean skipMatching(Object parentElement) {
+ if (root == null || parentElement == null) return true;
+ if (parentElement instanceof TreePath) {
+ if (root instanceof TreePath) {
+ return !root.equals(parentElement);
+ }
+ Object parent = ((TreePath) parentElement).getLastSegment();
+ return !root.equals(parent);
+ }
+ if (root instanceof TreePath) {
+ Object rootElement = ((TreePath) root).getLastSegment();
+ return !parentElement.equals(rootElement);
}
- return true;
+ return !root.equals(parentElement);
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilterPopup.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilterPopup.java
index 7e00d6737..4047ea8e8 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilterPopup.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/dialogs/QuickFilterPopup.java
@@ -32,10 +32,16 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.tcf.te.ui.nls.Messages;
+/**
+ * A pop up dialog to input the filter text for the quick filter.
+ * The filter will to listen to the change of the input and
+ * filter the tree viewer accordingly.
+ */
public class QuickFilterPopup extends PopupDialog {
- // The pattern filter used filter the content of the list.
- TablePatternFilter patternFilter;
+ // The quick filter used filter the content of the tree viewer.
+ QuickFilter quickFilter;
// The text field used to enter filters.
Text filterText;
// The initial filter displayed in the filter text field.
@@ -43,13 +49,23 @@ public class QuickFilterPopup extends PopupDialog {
// The tree viewer that it works on.
TreeViewer treeViewer;
- public QuickFilterPopup(TreeViewer viewer, QuickFilter quickFilter) {
+ /**
+ * Create a pop up for the specified tree viewer using the quick filter.
+ *
+ * @param viewer The tree viewer to be filtered.
+ * @param qFilter The quick filter used to filter the tree viewer.
+ */
+ public QuickFilterPopup(TreeViewer viewer, QuickFilter qFilter) {
super(viewer.getTree().getShell(), SWT.TOOL, true, true, false, false, false, null, null);
- patternFilter = quickFilter;
+ quickFilter = qFilter;
treeViewer = viewer;
- filter = "enter name of elements"; //$NON-NLS-1$
+ filter = Messages.QuickFilterPopup_PromptMessage;
}
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.PopupDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
@@ -155,6 +171,9 @@ public class QuickFilterPopup extends PopupDialog {
* @param e The traverse event.
*/
protected void filterTextKeyTraversed(TraverseEvent e) {
+ if (e.detail == SWT.TRAVERSE_ESCAPE) {
+ quickFilter.resetViewer();
+ }
if (e.detail == SWT.TRAVERSE_RETURN) {
e.doit = false;
if (treeViewer.getTree().getItemCount() == 0) {
@@ -167,7 +186,7 @@ public class QuickFilterPopup extends PopupDialog {
if (hasFocus && textChanged && filterText.getText().trim().length() > 0) {
TreeItem[] items = treeViewer.getTree().getItems();
for (TreeItem item : items) {
- if (patternFilter.match(item.getText())) {
+ if (quickFilter.match(item.getText())) {
treeViewer.getTree().setSelection(new TreeItem[] { item });
ISelection sel = treeViewer.getSelection();
treeViewer.setSelection(sel, true);
@@ -185,7 +204,7 @@ public class QuickFilterPopup extends PopupDialog {
* @param e The modification event.
*/
protected void filterTextModifyText(ModifyEvent e) {
- patternFilter.setPattern(filterText.getText());
+ quickFilter.setPattern(filterText.getText());
treeViewer.refresh();
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterHanlder.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterHanlder.java
deleted file mode 100644
index 9f5cea6d4..000000000
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterHanlder.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.eclipse.tcf.te.ui.internal.handlers;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.tcf.te.ui.dialogs.QuickFilter;
-import org.eclipse.ui.IWorkbenchSite;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-public class QuickFilterHanlder extends AbstractHandler {
-
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- IWorkbenchSite site = HandlerUtil.getActiveSiteChecked(event);
- ISelectionProvider provider = site.getSelectionProvider();
- if (provider instanceof TreeViewer) {
- TreeViewer viewer = (TreeViewer) provider;
- Object root = getFilterRoot(event);
- if (root == null) root = viewer.getInput();
- QuickFilter.getQuickFilter(viewer).showFilter(root);
- }
- return null;
- }
-
- private TreePath getFilterRoot(ExecutionEvent event) {
- ISelection selection = HandlerUtil.getCurrentSelection(event);
- if (selection instanceof TreeSelection) {
- TreeSelection treeSelection = (TreeSelection) selection;
- TreePath[] paths = treeSelection.getPaths();
- if (paths != null && paths.length > 0) {
- return paths[0];
- }
- }
- return null;
- }
-}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterResetHanlder.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterResetHanlder.java
deleted file mode 100644
index c2d5eaaca..000000000
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/internal/handlers/QuickFilterResetHanlder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.tcf.te.ui.internal.handlers;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.tcf.te.ui.dialogs.QuickFilter;
-import org.eclipse.ui.IWorkbenchSite;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-public class QuickFilterResetHanlder extends AbstractHandler {
-
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- IWorkbenchSite site = HandlerUtil.getActiveSiteChecked(event);
- ISelectionProvider provider = site.getSelectionProvider();
- if (provider instanceof TreeViewer) {
- TreeViewer viewer = (TreeViewer) provider;
- QuickFilter.getQuickFilter(viewer).resetViewer();
- }
- return null;
- }
-
-}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java
index b08a62f8a..de37fa6d2 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.java
@@ -68,5 +68,6 @@ public class Messages extends NLS {
public static String NameValuePairDialog_usedOrIllegalName_error;
public static String PreferencePage_label;
+ public static String QuickFilterPopup_PromptMessage;
public static String ViewerStateManager_MkdirFailed;
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties
index f18598412..7015dd9d2 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/nls/Messages.properties
@@ -60,4 +60,5 @@ NameValuePairDialog_usedOrIllegalName_error=The name ''{0}'' is reserved or alre
# ***** Preference Pages *****
PreferencePage_label=General settings for Target Explorer:
+QuickFilterPopup_PromptMessage=<RETURN> to confirm, <ESC> to reset
ViewerStateManager_MkdirFailed=Making the directory for viewerstate.xml failed\!

Back to the top