Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2011-03-04 01:52:05 +0000
committerspingel2011-03-04 01:52:05 +0000
commit506903f9a34ac54f97b60bdae327d2f22503f4f0 (patch)
treed1248899e04f78b6dceea239a94832de632691a2 /org.eclipse.mylyn.tasks.ui
parentc6199eb84a3f25a9acb7985a4d4f8d497c15b37d (diff)
downloadorg.eclipse.mylyn.tasks-506903f9a34ac54f97b60bdae327d2f22503f4f0.tar.gz
org.eclipse.mylyn.tasks-506903f9a34ac54f97b60bdae327d2f22503f4f0.tar.xz
org.eclipse.mylyn.tasks-506903f9a34ac54f97b60bdae327d2f22503f4f0.zip
NEW - bug 338499: support hiding of queries
https://bugs.eclipse.org/bugs/show_bug.cgi?id=338499
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java7
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java4
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GroupSubTasksAction.java21
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/HideQueryAction.java72
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java3
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowAllQueriesAction.java36
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowNonMatchingSubtasksAction.java38
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListViewActionGroup.java5
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/PresentationFilter.java95
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListInterestFilter.java34
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java36
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskScheduleContentProvider.java1
12 files changed, 309 insertions, 43 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java
index 76f1d10e0..c1fa08612 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/AbstractTaskListFilter.java
@@ -15,6 +15,7 @@ import java.util.Collection;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
+import org.eclipse.mylyn.internal.tasks.ui.views.PresentationFilter;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskContainer;
@@ -52,8 +53,12 @@ public abstract class AbstractTaskListFilter {
return false;
}
+ if (!PresentationFilter.getInstance().select(null, container)) {
+ return false;
+ }
+
for (ITask task : children) {
- if (task != null) {
+ if (task != null && PresentationFilter.getInstance().select(container, task)) {
ITask containedRepositoryTask = task;
if (TasksUiInternal.shouldShowIncoming(containedRepositoryTask)) {
return true;
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java
index cbab31ffe..fe080f0e4 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ITasksUiPreferenceConstants.java
@@ -44,6 +44,10 @@ public interface ITasksUiPreferenceConstants {
public static final String FILTER_COMPLETE_MODE = "org.eclipse.mylyn.tasks.ui.filters.complete"; //$NON-NLS-1$
+ public static final String FILTER_HIDDEN = "org.eclipse.mylyn.tasks.ui.filters.hidden"; //$NON-NLS-1$
+
+ public static final String FILTER_NON_MATCHING = "org.eclipse.mylyn.tasks.ui.filters.nonmatching"; //$NON-NLS-1$
+
public static final String FILTER_PRIORITY = "org.eclipse.mylyn.tasks.ui.filters.priority"; //$NON-NLS-1$
public static final String GROUP_SUBTASKS = "org.eclipse.mylyn.tasks.ui.group.subtasks"; //$NON-NLS-1$
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GroupSubTasksAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GroupSubTasksAction.java
index 061db4e14..706cf2cc1 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GroupSubTasksAction.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/GroupSubTasksAction.java
@@ -14,7 +14,6 @@ package org.eclipse.mylyn.internal.tasks.ui.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
/**
* @author Rob Elves
@@ -24,14 +23,10 @@ public class GroupSubTasksAction extends Action {
public static final String ID = "org.eclipse.mylyn.tasklist.actions.filter.subtasks"; //$NON-NLS-1$
- private final TaskListView view;
-
- public GroupSubTasksAction(TaskListView view) {
- this.view = view;
+ public GroupSubTasksAction() {
setText(Messages.GroupSubTasksAction_Group_Subtasks);
setToolTipText(Messages.GroupSubTasksAction_Group_Subtasks);
setId(ID);
- // setImageDescriptor(TasksUiImages.FILTER_COMPLETE);
setChecked(TasksUiPlugin.getDefault()
.getPreferenceStore()
.getBoolean(ITasksUiPreferenceConstants.GROUP_SUBTASKS));
@@ -42,18 +37,6 @@ public class GroupSubTasksAction extends Action {
TasksUiPlugin.getDefault()
.getPreferenceStore()
.setValue(ITasksUiPreferenceConstants.GROUP_SUBTASKS, isChecked());
- // TODO: refresh not getting rid of subtasks
-
- view.refresh(true);
-// try {
-// view.getViewer().getControl().setRedraw(false);
-// view.getViewer().collapseAll();
-// if (view.isFocusedMode()) {
-// view.getViewer().expandAll();
-// }
-// view.getViewer().refresh();
-// } finally {
-// view.getViewer().getControl().setRedraw(true);
-// }
}
+
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/HideQueryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/HideQueryAction.java
new file mode 100644
index 000000000..7f194db3a
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/HideQueryAction.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2009 Tasktop Technologies 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:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.actions;
+
+import java.util.Collections;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.internal.tasks.core.ITaskListRunnable;
+import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
+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.ui.actions.BaseSelectionListenerAction;
+
+/**
+ * @author Steffen Pingel
+ */
+public class HideQueryAction extends BaseSelectionListenerAction {
+
+ public HideQueryAction() {
+ super("Hidden");
+ setChecked(false);
+ setEnabled(false);
+ }
+
+ @Override
+ protected boolean updateSelection(IStructuredSelection selection) {
+ if (selection.size() == 1) {
+ Object element = selection.getFirstElement();
+ if (element instanceof IRepositoryQuery) {
+ setChecked(Boolean.parseBoolean((((IRepositoryQuery) element).getAttribute(ITasksCoreConstants.ATTRIBUTE_HIDDEN))));
+ return true;
+ }
+ }
+ setChecked(false);
+ return false;
+ }
+
+ @Override
+ public void run() {
+ final Object element = getStructuredSelection().getFirstElement();
+ if (element instanceof IRepositoryQuery) {
+ try {
+ final IRepositoryQuery query = ((IRepositoryQuery) element);
+ TasksUiPlugin.getTaskList().run(new ITaskListRunnable() {
+ public void execute(IProgressMonitor monitor) throws CoreException {
+ query.setAttribute(ITasksCoreConstants.ATTRIBUTE_HIDDEN, Boolean.toString(isChecked()));
+ }
+ });
+ TasksUiPlugin.getTaskList().notifyElementsChanged(Collections.singleton((IRepositoryElement) query));
+ } catch (CoreException e) {
+ StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
+ "Failed to set hidden status for query", e)); //$NON-NLS-1$
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java
index 6c9dd2975..b07080b6d 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java
@@ -100,6 +100,8 @@ public class RepositoryElementActionGroup {
private final AutoUpdateQueryAction autoUpdateAction;
+ protected final HideQueryAction hideQueryAction;
+
private final NewSubTaskAction newSubTaskAction;
private final CloneTaskAction cloneTaskAction;
@@ -131,6 +133,7 @@ public class RepositoryElementActionGroup {
showInTaskListAction = add(new ShowInTaskListAction());
autoUpdateAction = add(new AutoUpdateQueryAction());
+ hideQueryAction = add(new HideQueryAction());
}
private <T extends ISelectionChangedListener> T add(T action) {
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowAllQueriesAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowAllQueriesAction.java
new file mode 100644
index 000000000..abd1c18ed
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowAllQueriesAction.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Tasktop Technologies 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:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+
+/**
+ * @author Steffen Pingel
+ */
+public class ShowAllQueriesAction extends Action {
+
+ public ShowAllQueriesAction() {
+ setText("Show All Queries");
+ setToolTipText("Show All Queries Including Hidden Queries");
+ setChecked(!TasksUiPlugin.getDefault().getPreferenceStore().contains(ITasksUiPreferenceConstants.FILTER_HIDDEN));
+ }
+
+ @Override
+ public void run() {
+ TasksUiPlugin.getDefault()
+ .getPreferenceStore()
+ .setValue(ITasksUiPreferenceConstants.FILTER_HIDDEN, !isChecked());
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowNonMatchingSubtasksAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowNonMatchingSubtasksAction.java
new file mode 100644
index 000000000..3018dfea5
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ShowNonMatchingSubtasksAction.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Tasktop Technologies 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:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+
+/**
+ * @author Steffen Pingel
+ */
+public class ShowNonMatchingSubtasksAction extends Action {
+
+ public ShowNonMatchingSubtasksAction() {
+ setText("Show Non Matching Subtasks");
+ setToolTipText("Show Non Matching Subtasks");
+ setChecked(!TasksUiPlugin.getDefault()
+ .getPreferenceStore()
+ .contains(ITasksUiPreferenceConstants.FILTER_NON_MATCHING));
+ }
+
+ @Override
+ public void run() {
+ TasksUiPlugin.getDefault()
+ .getPreferenceStore()
+ .setValue(ITasksUiPreferenceConstants.FILTER_NON_MATCHING, !isChecked());
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListViewActionGroup.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListViewActionGroup.java
index 84bdddc9f..c978add7f 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListViewActionGroup.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskListViewActionGroup.java
@@ -13,6 +13,7 @@ package org.eclipse.mylyn.internal.tasks.ui.actions;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.mylyn.internal.tasks.ui.views.PresentationFilter;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskContainer;
@@ -62,6 +63,10 @@ public class TaskListViewActionGroup extends RepositoryElementActionGroup {
public void fillContextMenu(final IMenuManager manager) {
super.fillContextMenu(manager);
+ if (hideQueryAction.isEnabled() && !PresentationFilter.getInstance().isFilterHiddenQueries()) {
+ manager.appendToGroup(ID_SEPARATOR_NAVIGATE, hideQueryAction);
+ }
+
updateDrillDownActions();
Object element = ((IStructuredSelection) view.getViewer().getSelection()).getFirstElement();
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
new file mode 100644
index 000000000..b79295c99
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/PresentationFilter.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Tasktop Technologies 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:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.views;
+
+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.ui.AbstractTaskListFilter;
+import org.eclipse.mylyn.tasks.core.IAttributeContainer;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
+import org.eclipse.mylyn.tasks.core.ITask;
+
+/**
+ * @author Steffen Pingel
+ */
+public class PresentationFilter extends AbstractTaskListFilter {
+
+ private static PresentationFilter instance = new PresentationFilter();
+
+ private boolean filterHiddenQueries;
+
+ private boolean filterSubtasks;
+
+ private PresentationFilter() {
+ setFilterHiddenQueries(true);
+ setFilterSubtasks(true);
+ }
+
+ public static PresentationFilter getInstance() {
+ return instance;
+ }
+
+ public boolean isFilterSubtasks() {
+ return filterSubtasks;
+ }
+
+ public boolean isFilterHiddenQueries() {
+ return filterHiddenQueries;
+ }
+
+ public void setFilterHiddenQueries(boolean enabled) {
+ this.filterHiddenQueries = enabled;
+ }
+
+ public void setFilterSubtasks(boolean filterSubtasks) {
+ this.filterSubtasks = filterSubtasks;
+ }
+
+ @Override
+ public boolean select(Object parent, Object element) {
+ // filter hidden queries
+ if (element instanceof IRepositoryQuery) {
+ if (!filterHiddenQueries) {
+ return true;
+ }
+ return isQueryVisible(element);
+ }
+ // filter sub-tasks not connected to queries or categories
+ if (element instanceof AbstractTask) {
+ if (!filterSubtasks) {
+ return true;
+ }
+ if (((ITask) element).getTaskId().equals("20196")) {
+ System.err.println();
+ }
+ for (AbstractTaskContainer container : ((AbstractTask) element).getParentContainers()) {
+ // categories are always visible
+ if (container instanceof AbstractTaskCategory) {
+ return true;
+ }
+ // show task if is contained in a query
+ if (container instanceof IRepositoryQuery && isQueryVisible(container)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return true;
+ }
+
+ private boolean isQueryVisible(Object element) {
+ return !Boolean.parseBoolean(((IAttributeContainer) element).getAttribute(ITasksCoreConstants.ATTRIBUTE_HIDDEN));
+ }
+
+}
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 c757f9780..e33d43f71 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
@@ -47,18 +47,10 @@ public class TaskListInterestFilter extends AbstractTaskListFilter {
return isDateRangeInteresting(dateRangeTaskContainer);
}
if (child instanceof ITask) {
- AbstractTask task = null;
- if (child instanceof ITask) {
- task = (AbstractTask) child;
- }
- if (task != null) {
- if (isInteresting(parent, task)) {
- return true;
- } else {
- return false;
- }
- }
- } else if (child instanceof ITaskContainer) {
+ AbstractTask task = (AbstractTask) child;
+ return isInteresting(parent, task);
+ }
+ if (child instanceof ITaskContainer) {
Collection<ITask> children = ((ITaskContainer) child).getChildren();
// Always display empty containers
if (children.size() == 0) {
@@ -70,7 +62,6 @@ public class TaskListInterestFilter extends AbstractTaskListFilter {
return true;
}
}
-
}
} catch (Throwable t) {
StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Interest filter failed", t)); //$NON-NLS-1$
@@ -84,7 +75,7 @@ public class TaskListInterestFilter extends AbstractTaskListFilter {
}
if (scheduleContainer instanceof TaskScheduleContentProvider.Incoming
|| scheduleContainer instanceof TaskScheduleContentProvider.Outgoing) {
- return (scheduleContainer.getChildren().size() > 0);
+ return hasChildren(scheduleContainer, scheduleContainer.getChildren());
}
if (TaskActivityUtil.getCurrentWeek().isCurrentWeekDay(scheduleContainer.getDateRange())) {
if (scheduleContainer.isPresent() || scheduleContainer.isFuture()) {
@@ -96,13 +87,24 @@ public class TaskListInterestFilter extends AbstractTaskListFilter {
return false;
}
+ private boolean hasChildren(Object parent, Collection<ITask> children) {
+ for (ITask task : children) {
+ if (PresentationFilter.getInstance().select(parent, task)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
// TODO: make meta-context more explicit
protected boolean isInteresting(Object parent, AbstractTask task) {
return shouldAlwaysShow(parent, task, ITasksCoreConstants.MAX_SUBTASK_DEPTH);
}
public boolean shouldAlwaysShow(Object parent, AbstractTask task, int depth) {
-
+ if (!PresentationFilter.getInstance().select(parent, task)) {
+ return false;
+ }
return task.isActive() || TasksUiPlugin.getTaskActivityManager().isCompletedToday(task)
|| hasChanges(parent, task)
|| hasInterestingSubTasks(parent, task, depth)
@@ -182,7 +184,7 @@ public class TaskListInterestFilter extends AbstractTaskListFilter {
}
if (task instanceof ITaskContainer) {
for (ITask child : ((ITaskContainer) task).getChildren()) {
- if (hasChangesHelper(parent, child)) {
+ if (PresentationFilter.getInstance().select(task, child) && hasChangesHelper(parent, child)) {
return true;
}
}
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 427c85daa..a35e6fa3b 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
@@ -90,6 +90,8 @@ import org.eclipse.mylyn.internal.tasks.ui.actions.LinkWithEditorAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.NewTaskAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.OpenTasksUiPreferencesAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.PresentationDropDownSelectionAction;
+import org.eclipse.mylyn.internal.tasks.ui.actions.ShowAllQueriesAction;
+import org.eclipse.mylyn.internal.tasks.ui.actions.ShowNonMatchingSubtasksAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.SynchronizeAutomaticallyAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.TaskListSortAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.TaskListViewActionGroup;
@@ -357,7 +359,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
private FilterCompletedTasksAction filterCompleteTask;
- private GroupSubTasksAction filterSubTasksAction;
+ private GroupSubTasksAction groupSubTasksAction;
private SynchronizeAutomaticallyAction synchronizeAutomatically;
@@ -380,6 +382,8 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
private final TaskArchiveFilter filterArchive = new TaskArchiveFilter();
+ private final PresentationFilter filterPresentation = PresentationFilter.getInstance();
+
private TaskWorkingSetFilter filterWorkingSet;
private final Set<AbstractTaskListFilter> filters = new HashSet<AbstractTaskListFilter>();
@@ -536,6 +540,12 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
|| event.getProperty().equals(ITasksUiPreferenceConstants.OVERLAYS_INCOMING_TIGHT)) {
refreshJob.refresh();
}
+ if (event.getProperty().equals(ITasksUiPreferenceConstants.FILTER_HIDDEN)
+ || event.getProperty().equals(ITasksUiPreferenceConstants.FILTER_NON_MATCHING)
+ || event.getProperty().equals(ITasksUiPreferenceConstants.GROUP_SUBTASKS)) {
+ updatePresentationFilter();
+ refresh(true);
+ }
}
};
@@ -670,10 +680,9 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
if (TasksUiPlugin.getDefault().getPreferenceStore().contains(ITasksUiPreferenceConstants.FILTER_COMPLETE_MODE)) {
addFilter(filterComplete);
}
-
- //if (TasksUiPlugin.getDefault().getPreferenceStore().contains(TasksUiPreferenceConstants.FILTER_ARCHIVE_MODE)) {
+ updatePresentationFilter();
+ addFilter(filterPresentation);
addFilter(filterArchive);
- //}
// Restore "link with editor" value; by default true
boolean linkValue = true;
@@ -689,6 +698,15 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
getViewer().refresh();
}
+ public void updatePresentationFilter() {
+ filterPresentation.setFilterHiddenQueries(TasksUiPlugin.getDefault()
+ .getPreferenceStore()
+ .contains(ITasksUiPreferenceConstants.FILTER_HIDDEN));
+ filterPresentation.setFilterSubtasks(TasksUiPlugin.getDefault()
+ .getPreferenceStore()
+ .contains(ITasksUiPreferenceConstants.FILTER_NON_MATCHING));
+ }
+
/**
* Public for testing only.
*/
@@ -1198,7 +1216,12 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
manager.add(sortDialogAction);
manager.add(filterOnPriorityAction);
manager.add(filterCompleteTask);
- manager.add(filterSubTasksAction);
+ IMenuManager advancedMenu = new MenuManager("Advanced Filters");
+ advancedMenu.add(new ShowAllQueriesAction());
+ advancedMenu.add(new ShowNonMatchingSubtasksAction());
+ advancedMenu.add(new Separator());
+ advancedMenu.add(groupSubTasksAction);
+ manager.add(advancedMenu);
manager.add(new Separator(ID_SEPARATOR_SEARCH));
manager.add(new GroupMarker(ID_SEPARATOR_TASKS));
@@ -1262,7 +1285,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
collapseAll = new CollapseAllAction(this);
expandAll = new ExpandAllAction(this);
filterCompleteTask = new FilterCompletedTasksAction(this);
- filterSubTasksAction = new GroupSubTasksAction(this);
+ groupSubTasksAction = new GroupSubTasksAction();
synchronizeAutomatically = new SynchronizeAutomaticallyAction();
openPreferencesAction = new OpenTasksUiPreferencesAction();
//filterArchiveCategory = new FilterArchiveContainerAction(this);
@@ -1346,6 +1369,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener, I
filters.clear();
filters.add(filterArchive);
filters.add(filterWorkingSet);
+ filters.add(filterPresentation);
}
public void removeFilter(AbstractTaskListFilter filter) {
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskScheduleContentProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskScheduleContentProvider.java
index aff9f644e..ad80022fc 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskScheduleContentProvider.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskScheduleContentProvider.java
@@ -184,7 +184,6 @@ public class TaskScheduleContentProvider extends TaskListContentProvider impleme
result.add(child);
}
}
-
} else if (parent instanceof ITaskContainer) {
for (ITask child : ((ITaskContainer) parent).getChildren()) {
result.add(child);

Back to the top