Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'dsf-gdb')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/ProcessPrompterDialog.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/ProcessPrompterDialog.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/ProcessPrompterDialog.java
index 517ac691efe..fa146c51393 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/ProcessPrompterDialog.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/ProcessPrompterDialog.java
@@ -27,7 +27,9 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.FilteredList;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
+import org.eclipse.ui.dialogs.SearchPattern;
import org.eclipse.ui.dialogs.TwoPaneElementSelector;
/**
@@ -41,12 +43,57 @@ public class ProcessPrompterDialog extends TwoPaneElementSelector {
private static final String DIALOG_SETTINGS_SECTION_ID = "processPrompterDialog"; //$NON-NLS-1$
+ private static final String DIALOG_SETTINGS_FILTER_KEY = "filter"; //$NON-NLS-1$
+
+ private final ILabelProvider elementRenderer;
+
public ProcessPrompterDialog(Shell parent, ILabelProvider elementRenderer,
ILabelProvider qualifierRenderer) {
super(parent, elementRenderer, qualifierRenderer);
+ this.elementRenderer = elementRenderer;
setDialogBoundsSettings(getDialogBoundsSettings(), Dialog.DIALOG_PERSISTSIZE);
+ setFilter(getFilterFromDialogSetting());
}
+ @Override
+ protected FilteredList createFilteredList(Composite parent) {
+ FilteredList list = super.createFilteredList(parent);
+
+ list.setFilterMatcher(new FilteredList.FilterMatcher() {
+ private SearchPattern matcher;
+
+ @Override
+ public void setFilter(String pattern, boolean ignoreCase, boolean ignoreWildCards) {
+
+ if (pattern == null) {
+ pattern = ""; //$NON-NLS-1$
+ }
+
+ if (! pattern.startsWith("*")) { //$NON-NLS-1$
+ pattern = "*" + pattern; //$NON-NLS-1$
+ }
+
+ int rules = SearchPattern.RULE_BLANK_MATCH | SearchPattern.RULE_PREFIX_MATCH;
+ if (! ignoreCase) {
+ rules |= SearchPattern.RULE_CASE_SENSITIVE;
+ }
+
+ if (! ignoreWildCards) {
+ rules |= SearchPattern.RULE_PATTERN_MATCH;
+ }
+ matcher = new SearchPattern(rules);
+ matcher.setPattern(pattern);
+ }
+
+ @Override
+ public boolean match(Object element) {
+ return matcher.matches(elementRenderer.getText(element));
+ }
+ });
+
+ return list;
+ }
+
/*
* The result should be every selected element.
*/
@@ -127,6 +174,10 @@ public class ProcessPrompterDialog extends TwoPaneElementSelector {
@Override
protected IDialogSettings getDialogBoundsSettings() {
+ return getDialogSettings();
+ }
+
+ protected IDialogSettings getDialogSettings() {
IDialogSettings settings = GdbUIPlugin.getDefault().getDialogSettings();
IDialogSettings section = settings.getSection(DIALOG_SETTINGS_SECTION_ID);
if (section == null) {
@@ -134,4 +185,19 @@ public class ProcessPrompterDialog extends TwoPaneElementSelector {
}
return section;
}
+
+ private String getFilterFromDialogSetting() {
+ String filter = getDialogSettings().get(DIALOG_SETTINGS_FILTER_KEY);
+ return filter == null ? "" : filter; //$NON-NLS-1$
+ }
+
+ private void storeDialogSetting() {
+ getDialogSettings().put(DIALOG_SETTINGS_FILTER_KEY, getFilter());
+ }
+
+ @Override
+ public boolean close() {
+ storeDialogSetting();
+ return super.close();
+ }
}

Back to the top