Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2011-03-04 06:04:21 +0000
committerspingel2011-03-04 06:04:21 +0000
commit13dd0e7d1b317196eff0c49f09820e94043b4405 (patch)
tree4e80966d350b438777788a63b6412f33a7905ba8 /org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views
parent292318e092c256417a9203b841fd39f6ca70b386 (diff)
downloadorg.eclipse.mylyn.tasks-13dd0e7d1b317196eff0c49f09820e94043b4405.tar.gz
org.eclipse.mylyn.tasks-13dd0e7d1b317196eff0c49f09820e94043b4405.tar.xz
org.eclipse.mylyn.tasks-13dd0e7d1b317196eff0c49f09820e94043b4405.zip
NEW - bug 334962: filter subtasks of tasks not matched by queries
https://bugs.eclipse.org/bugs/show_bug.cgi?id=334962
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractTaskListContentProvider.java4
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/PresentationFilter.java21
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java64
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListInterestFilter.java5
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java2
5 files changed, 80 insertions, 16 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractTaskListContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractTaskListContentProvider.java
index 39c7bb3f3..113683bfb 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractTaskListContentProvider.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractTaskListContentProvider.java
@@ -13,16 +13,18 @@
package org.eclipse.mylyn.internal.tasks.ui.views;
import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.ITreePathContentProvider;
/**
* @author Eugene Kuleshov
* @author Mik Kersten
*/
-public abstract class AbstractTaskListContentProvider implements ITreeContentProvider {
+public abstract class AbstractTaskListContentProvider implements ITreeContentProvider, ITreePathContentProvider {
protected TaskListView taskListView;
public AbstractTaskListContentProvider(TaskListView view) {
this.taskListView = view;
}
+
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/PresentationFilter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/PresentationFilter.java
index 8dcee12f1..2a205ddfd 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/PresentationFilter.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/PresentationFilter.java
@@ -15,6 +15,7 @@ import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
+import org.eclipse.mylyn.internal.tasks.core.TaskTask;
import org.eclipse.mylyn.internal.tasks.ui.AbstractTaskListFilter;
import org.eclipse.mylyn.tasks.core.IAttributeContainer;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
@@ -28,19 +29,19 @@ public class PresentationFilter extends AbstractTaskListFilter {
private boolean filterHiddenQueries;
- private boolean filterSubtasks;
+ private boolean filterNonMatching;
private PresentationFilter() {
setFilterHiddenQueries(true);
- setFilterSubtasks(true);
+ setFilterNonMatching(true);
}
public static PresentationFilter getInstance() {
return instance;
}
- public boolean isFilterSubtasks() {
- return filterSubtasks;
+ public boolean isFilterNonMatching() {
+ return filterNonMatching;
}
public boolean isFilterHiddenQueries() {
@@ -51,8 +52,8 @@ public class PresentationFilter extends AbstractTaskListFilter {
this.filterHiddenQueries = enabled;
}
- public void setFilterSubtasks(boolean filterSubtasks) {
- this.filterSubtasks = filterSubtasks;
+ public void setFilterNonMatching(boolean filterSubtasks) {
+ this.filterNonMatching = filterSubtasks;
}
@Override
@@ -64,13 +65,13 @@ public class PresentationFilter extends AbstractTaskListFilter {
}
return isQueryVisible(element);
}
- // filter sub-tasks not connected to queries or categories
- if (element instanceof AbstractTask) {
- if (!filterSubtasks) {
+ // filter repository sub-tasks not connected to queries or categories
+ if (element instanceof TaskTask) {
+ if (!filterNonMatching) {
return true;
}
for (AbstractTaskContainer container : ((AbstractTask) element).getParentContainers()) {
- // categories are always visible
+ // categories and local subtasks are always visible
if (container instanceof AbstractTaskCategory) {
return true;
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java
index f4c085888..d91128d80 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListContentProvider.java
@@ -19,14 +19,18 @@ import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer;
+import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
import org.eclipse.mylyn.internal.tasks.core.TaskCategory;
+import org.eclipse.mylyn.internal.tasks.core.UnmatchedTaskContainer;
import org.eclipse.mylyn.internal.tasks.ui.AbstractTaskListFilter;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.core.IRepositoryElement;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskContainer;
@@ -39,6 +43,8 @@ import org.eclipse.mylyn.tasks.core.ITaskContainer;
*/
public class TaskListContentProvider extends AbstractTaskListContentProvider {
+ protected static Object[] EMPTY_ARRRY = new Object[0];
+
public TaskListContentProvider(TaskListView taskListView) {
super(taskListView);
}
@@ -189,19 +195,69 @@ public class TaskListContentProvider extends AbstractTaskListContentProvider {
protected boolean filter(Object parent, Object object) {
boolean emptyFilterText = containsNoFilterText(this.taskListView.getFilteredTree().getFilterString());
for (AbstractTaskListFilter filter : this.taskListView.getFilters()) {
- if (emptyFilterText) {
+ if (emptyFilterText || filter.applyToFilteredText()) {
if (!filter.select(parent, object)) {
return true;
}
- } else {
- if (filter.applyToFilteredText()) {
- if (!filter.select(parent, object)) {
+ }
+ }
+ return false;
+ }
+
+ protected boolean filter(TreePath path, Object parent, Object object) {
+ boolean emptyFilterText = containsNoFilterText(this.taskListView.getFilteredTree().getFilterString());
+ for (AbstractTaskListFilter filter : this.taskListView.getFilters()) {
+ if (emptyFilterText || filter.applyToFilteredText()) {
+ if (filter instanceof TaskListInterestFilter) {
+ if (!((TaskListInterestFilter) filter).select(path, object)) {
return true;
}
+ } else if (!filter.select(parent, object)) {
+ return true;
}
}
}
return false;
}
+ public boolean isSearching() {
+ return !containsNoFilterText(this.taskListView.getFilteredTree().getFilterString());
+ }
+
+ public Object[] getChildren(TreePath parentPath) {
+ Object parent = parentPath.getLastSegment();
+ if (PresentationFilter.getInstance().isFilterNonMatching()) {
+ ITaskContainer container = (ITaskContainer) parentPath.getFirstSegment();
+ if (container instanceof IRepositoryQuery || container instanceof UnmatchedTaskContainer) {
+ if (parent instanceof ITask) {
+ if (container instanceof RepositoryQuery && !TasksUiPlugin.getDefault().groupSubtasks(container)) {
+ return EMPTY_ARRRY;
+ }
+ }
+ List<IRepositoryElement> children = getFilteredChildrenFor(parent);
+ if (!isSearching()) {
+ if (parent instanceof ITask) {
+ // scope subtasks by query results
+ for (Iterator<IRepositoryElement> it = children.iterator(); it.hasNext();) {
+ IRepositoryElement element = it.next();
+ if (!container.getChildren().contains(element)) {
+ it.remove();
+ }
+ }
+ }
+ }
+ return children.toArray();
+ }
+ }
+ return getFilteredChildrenFor(parent).toArray();
+ }
+
+ public boolean hasChildren(TreePath path) {
+ return getChildren(path).length > 0;
+ }
+
+ public TreePath[] getParents(Object element) {
+ return new TreePath[0];
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListInterestFilter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListInterestFilter.java
index e33d43f71..c18eb27a7 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListInterestFilter.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListInterestFilter.java
@@ -15,6 +15,7 @@ import java.util.Collection;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.TreePath;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
@@ -39,6 +40,10 @@ import org.eclipse.mylyn.tasks.core.ITaskContainer;
*/
public class TaskListInterestFilter extends AbstractTaskListFilter {
+ public boolean select(TreePath path, Object child) {
+ return select(path.getLastSegment(), child);
+ }
+
@Override
public boolean select(Object parent, Object child) {
try {
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
index 46b820db2..804d190b6 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
@@ -702,7 +702,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
filterPresentation.setFilterHiddenQueries(TasksUiPlugin.getDefault()
.getPreferenceStore()
.contains(ITasksUiPreferenceConstants.FILTER_HIDDEN));
- filterPresentation.setFilterSubtasks(TasksUiPlugin.getDefault()
+ filterPresentation.setFilterNonMatching(TasksUiPlugin.getDefault()
.getPreferenceStore()
.contains(ITasksUiPreferenceConstants.FILTER_NON_MATCHING));
}

Back to the top