diff options
author | spingel | 2011-03-04 01:52:05 +0000 |
---|---|---|
committer | spingel | 2011-03-04 01:52:05 +0000 |
commit | 506903f9a34ac54f97b60bdae327d2f22503f4f0 (patch) | |
tree | d1248899e04f78b6dceea239a94832de632691a2 /org.eclipse.mylyn.tasks.ui | |
parent | c6199eb84a3f25a9acb7985a4d4f8d497c15b37d (diff) | |
download | org.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')
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); |