diff options
author | Michael Keppler | 2018-07-30 13:20:13 +0000 |
---|---|---|
committer | Thomas Wolf | 2018-08-13 08:11:07 +0000 |
commit | e0e135c4f19945495c8fd5393d17bca1cb7b5726 (patch) | |
tree | 4308494fd40683d796c308010355b98a0ec87fcf | |
parent | 92f786a926795740222dc20388726a9459584bb2 (diff) | |
download | egit-e0e135c4f19945495c8fd5393d17bca1cb7b5726.tar.gz egit-e0e135c4f19945495c8fd5393d17bca1cb7b5726.tar.xz egit-e0e135c4f19945495c8fd5393d17bca1cb7b5726.zip |
Fix filter in reflog view
The pattern filter uses the label provider of the viewer to match.
However, tree viewers do not use a label provider at all (but column
label providers). Therefore delegate the matching to the column label
providers.
Bug: 537492
Change-Id: I6865e4a29edec415a61499165003d6d753f22dfb
Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de>
3 files changed, 52 insertions, 21 deletions
diff --git a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/dialogs/FilteredBranchesWidget.java b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/dialogs/FilteredBranchesWidget.java index 9be208942a..ad729fe4dc 100644 --- a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/dialogs/FilteredBranchesWidget.java +++ b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/dialogs/FilteredBranchesWidget.java @@ -15,6 +15,7 @@ import java.util.List; import org.eclipse.egit.gitflow.GitFlowRepository; import org.eclipse.egit.gitflow.ui.internal.UIText; import org.eclipse.egit.ui.internal.PreferenceBasedDateFormatter; +import org.eclipse.egit.ui.internal.TreeColumnPatternFilter; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.TreeColumnLayout; import org.eclipse.jface.viewers.ColumnLabelProvider; @@ -37,7 +38,6 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.dialogs.FilteredTree; -import org.eclipse.ui.dialogs.PatternFilter; /** * Widget for viewing a filtered list of Gitflow branches. @@ -66,25 +66,9 @@ public class FilteredBranchesWidget { GridDataFactory.fillDefaults().grab(true, true).span(2, 1).applyTo(area); area.setLayout(new GridLayout(1, false)); - PatternFilter filter = new PatternFilter() { - @Override - protected boolean isLeafMatch(Viewer viewer, Object element) { - TreeViewer treeViewer = (TreeViewer) viewer; - int numberOfColumns = treeViewer.getTree().getColumnCount(); - boolean isMatch = false; - for (int columnIndex = 0; columnIndex < numberOfColumns; columnIndex++) { - ColumnLabelProvider labelProvider = (ColumnLabelProvider) treeViewer - .getLabelProvider(columnIndex); - String labelText = labelProvider.getText(element); - isMatch |= wordMatches(labelText); - } - return isMatch; - } - }; - filter.setIncludeLeadingWildcard(true); - final FilteredTree tree = new FilteredTree(area, SWT.MULTI | SWT.H_SCROLL - | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION, filter, + | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION, + new TreeColumnPatternFilter(), true); tree.setQuickSelectionMode(true); branchesViewer = tree.getViewer(); diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/TreeColumnPatternFilter.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/TreeColumnPatternFilter.java new file mode 100644 index 0000000000..8794ecdc46 --- /dev/null +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/TreeColumnPatternFilter.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (C) 2018 Michael Keppler <michael.keppler@gmx.de> + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.egit.ui.internal; + +import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.ui.dialogs.PatternFilter; + +/** + * Pattern filter based on the column label providers of a {@link TreeViewer}. + */ +public class TreeColumnPatternFilter extends PatternFilter { + + /** + * Creates a new tree column based pattern filter with a leading wildcard + * character included in the search string. + */ + public TreeColumnPatternFilter() { + setIncludeLeadingWildcard(true); + } + + @Override + protected boolean isLeafMatch(Viewer viewer, Object element) { + TreeViewer treeViewer = (TreeViewer) viewer; + int numberOfColumns = treeViewer.getTree().getColumnCount(); + for (int columnIndex = 0; columnIndex < numberOfColumns; columnIndex++) { + ColumnLabelProvider labelProvider = (ColumnLabelProvider) treeViewer + .getLabelProvider(columnIndex); + String labelText = labelProvider.getText(element); + if (wordMatches(labelText)) { + return true; + } + } + return false; + } + +} diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogView.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogView.java index 5b92489564..8ae1d118b5 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogView.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/reflog/ReflogView.java @@ -26,6 +26,7 @@ import org.eclipse.egit.ui.UIPreferences; import org.eclipse.egit.ui.UIUtils; import org.eclipse.egit.ui.internal.CommonUtils; import org.eclipse.egit.ui.internal.PreferenceBasedDateFormatter; +import org.eclipse.egit.ui.internal.TreeColumnPatternFilter; import org.eclipse.egit.ui.internal.UIIcons; import org.eclipse.egit.ui.internal.UIText; import org.eclipse.egit.ui.internal.actions.ResetMenu; @@ -91,7 +92,6 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; import org.eclipse.ui.contexts.IContextService; import org.eclipse.ui.dialogs.FilteredTree; -import org.eclipse.ui.dialogs.PatternFilter; import org.eclipse.ui.forms.IFormColors; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; @@ -169,7 +169,8 @@ public class ReflogView extends ViewPart implements RefsChangedListener, IShowIn final TreeColumnLayout layout = new TreeColumnLayout(); FilteredTree filteredTree = new FilteredTree(tableComposite, SWT.NONE - | SWT.BORDER | SWT.FULL_SELECTION, new PatternFilter(), true) { + | SWT.BORDER | SWT.FULL_SELECTION, + new TreeColumnPatternFilter(), true) { @Override protected void createControl(Composite composite, int treeStyle) { super.createControl(composite, treeStyle); |