Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java1668
1 files changed, 0 insertions, 1668 deletions
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
deleted file mode 100644
index aafcaa44d..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
+++ /dev/null
@@ -1,1668 +0,0 @@
-/*******************************************************************************
- * 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
- * Ken Sueda - improvements
- * Eugene Kuleshov - improvements
- * Frank Becker - improvements
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.views;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IStatusLineManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.layout.TreeColumnLayout;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.LocalSelectionTransfer;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.ColumnPixelData;
-import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.IOpenListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeViewerListener;
-import org.eclipse.jface.viewers.OpenEvent;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.jface.viewers.TreeExpansionEvent;
-import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.mylyn.commons.core.StatusHandler;
-import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
-import org.eclipse.mylyn.internal.provisional.commons.ui.CommonThemes;
-import org.eclipse.mylyn.internal.provisional.commons.ui.DelayedRefreshJob;
-import org.eclipse.mylyn.internal.provisional.commons.ui.SubstringPatternFilter;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer;
-import org.eclipse.mylyn.internal.tasks.core.ITaskListChangeListener;
-import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
-import org.eclipse.mylyn.internal.tasks.core.TaskContainerDelta;
-import org.eclipse.mylyn.internal.tasks.ui.AbstractTaskListFilter;
-import org.eclipse.mylyn.internal.tasks.ui.CategorizedPresentation;
-import org.eclipse.mylyn.internal.tasks.ui.ITasksUiPreferenceConstants;
-import org.eclipse.mylyn.internal.tasks.ui.ScheduledPresentation;
-import org.eclipse.mylyn.internal.tasks.ui.TaskArchiveFilter;
-import org.eclipse.mylyn.internal.tasks.ui.TaskCompletionFilter;
-import org.eclipse.mylyn.internal.tasks.ui.TaskPriorityFilter;
-import org.eclipse.mylyn.internal.tasks.ui.TaskWorkingSetFilter;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.actions.CollapseAllAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.ExpandAllAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.FilterCompletedTasksAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.GoUpAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.GroupSubTasksAction;
-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.SynchronizeAutomaticallyAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.TaskListSortAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.TaskListViewActionGroup;
-import org.eclipse.mylyn.internal.tasks.ui.commands.CollapseAllHandler;
-import org.eclipse.mylyn.internal.tasks.ui.editors.TaskListChangeAdapter;
-import org.eclipse.mylyn.internal.tasks.ui.util.PlatformUtil;
-import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion;
-import org.eclipse.mylyn.internal.tasks.ui.util.TaskDragSourceListener;
-import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
-import org.eclipse.mylyn.internal.tasks.ui.util.TreeWalker;
-import org.eclipse.mylyn.internal.tasks.ui.util.SortCriterion.SortKey;
-import org.eclipse.mylyn.internal.tasks.ui.util.TreeWalker.TreeVisitor;
-import org.eclipse.mylyn.tasks.core.IRepositoryElement;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.core.ITaskActivationListener;
-import org.eclipse.mylyn.tasks.core.ITaskActivityListener;
-import org.eclipse.mylyn.tasks.core.ITaskContainer;
-import org.eclipse.mylyn.tasks.core.TaskActivationAdapter;
-import org.eclipse.mylyn.tasks.core.TaskActivityAdapter;
-import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
-import org.eclipse.mylyn.tasks.ui.ITasksUiConstants;
-import org.eclipse.mylyn.tasks.ui.TaskElementLabelProvider;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.mylyn.tasks.ui.TasksUiImages;
-import org.eclipse.mylyn.tasks.ui.editors.TaskEditorInput;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.SWTError;
-import org.eclipse.swt.SWTException;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.FileTransfer;
-import org.eclipse.swt.dnd.RTFTransfer;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.graphics.Region;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Scrollable;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeColumn;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IPageListener;
-import org.eclipse.ui.IPartListener;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkingSetManager;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionFactory;
-import org.eclipse.ui.contexts.IContextService;
-import org.eclipse.ui.handlers.IHandlerService;
-import org.eclipse.ui.part.DrillDownAdapter;
-import org.eclipse.ui.part.IShowInTarget;
-import org.eclipse.ui.part.ShowInContext;
-import org.eclipse.ui.part.ViewPart;
-import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
-import org.eclipse.ui.themes.IThemeManager;
-
-/**
- * @author Mik Kersten
- * @author Ken Sueda
- * @author Eugene Kuleshov
- */
-public class TaskListView extends ViewPart implements IPropertyChangeListener, IShowInTarget {
-
- private final class TaskListRefreshJob extends DelayedRefreshJob {
-
- private TaskListRefreshJob(TreeViewer treeViewer, String name) {
- super(treeViewer, name);
- }
-
- @Override
- protected void doRefresh(Object[] items) {
- TreePath selection = preserveSelection();
-
- if (items == null) {
- viewer.refresh(true);
- } else if (items.length > 0) {
- try {
- if (TaskListView.this.isFocusedMode()) {
- Set<Object> children = new HashSet<Object>(Arrays.asList(items));
- Set<AbstractTaskContainer> parents = new HashSet<AbstractTaskContainer>();
- for (Object item : items) {
- if (item instanceof AbstractTask) {
- parents.addAll(((AbstractTask) item).getParentContainers());
- }
- }
- // 1. refresh parents
- children.removeAll(parents);
- for (AbstractTaskContainer parent : parents) {
- viewer.refresh(parent, false);
- // only refresh label of parent
- viewer.update(parent, null);
- }
- // 2. refresh children
- for (Object item : children) {
- viewer.refresh(item, true);
- }
- // 3. update states of all changed items
- for (Object item : items) {
- updateExpansionState(item);
- }
- } else {
- Set<AbstractTaskContainer> parents = new HashSet<AbstractTaskContainer>();
- for (Object item : items) {
- if (item instanceof AbstractTask) {
- parents.addAll(((AbstractTask) item).getParentContainers());
- }
- viewer.refresh(item, true);
- updateExpansionState(item);
- }
- // refresh labels of parents for task activation or incoming indicators
- for (AbstractTaskContainer parent : parents) {
- // only refresh label
- viewer.update(parent, null);
- }
- }
- } catch (SWTException e) {
- StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Failed to refresh viewer: " //$NON-NLS-1$
- + viewer, e));
- }
- }
-
- updateToolTip(false);
- restoreSelection(selection);
- }
-
- private TreePath preserveSelection() {
- if (viewer instanceof TreeViewer) {
- TreeViewer treeViewer = (TreeViewer) viewer;
- // in case the refresh removes the currently selected item,
- // remember the next item in the tree to restore the selection
- // TODO: consider making this optional
- TreeItem[] selection = treeViewer.getTree().getSelection();
- if (selection.length > 0) {
- TreeWalker treeWalker = new TreeWalker(treeViewer);
- return treeWalker.walk(new TreeVisitor() {
- @Override
- public boolean visit(Object object) {
- return true;
- }
- }, selection[selection.length - 1]);
- }
- }
- return null;
- }
-
- private void restoreSelection(TreePath treePath) {
- if (treePath != null) {
- ISelection newSelection = viewer.getSelection();
- if (newSelection == null || newSelection.isEmpty()) {
- viewer.setSelection(new TreeSelection(treePath), true);
- }
- }
- }
-
- protected void updateExpansionState(Object item) {
- if (TaskListView.this.isFocusedMode() && isAutoExpandMode()) {
- TaskListView.this.getViewer().expandToLevel(item, 3);
- }
- }
- }
-
- // TODO e3.4 replace with SWT.NO_SCROLL constant
- public static final int SWT_NO_SCROLL = 1 << 4;
-
- private static final String ID_SEPARATOR_FILTERS = "filters"; //$NON-NLS-1$
-
- private static final String ID_SEPARATOR_TASKS = "tasks"; //$NON-NLS-1$
-
- private static final String ID_SEPARATOR_CONTEXT = "context"; //$NON-NLS-1$
-
- /**
- * @deprecated Use {@link ITasksUiConstants#ID_VIEW_TASKS} instead
- */
- @Deprecated
- public static final String ID = ITasksUiConstants.ID_VIEW_TASKS;
-
- public static final String LABEL_VIEW = Messages.TaskListView_Task_List;
-
- @Deprecated
- private static final String MEMENTO_KEY_SORT_DIRECTION = "sortDirection"; //$NON-NLS-1$
-
- @Deprecated
- private static final String MEMENTO_KEY_SORTER = "sorter"; //$NON-NLS-1$
-
- @Deprecated
- private static final String MEMENTO_KEY_SORTER2 = "sorter2"; //$NON-NLS-1$
-
- @Deprecated
- private static final String MEMENTO_KEY_SORT_INDEX = "sortIndex"; //$NON-NLS-1$
-
- @Deprecated
- private static final String MEMENTO_SORT_INDEX = "org.eclipse.mylyn.tasklist.ui.views.tasklist.sortIndex"; //$NON-NLS-1$
-
- private static final String MEMENTO_SORTER = "sorter"; //$NON-NLS-1$
-
- private static final String MEMENTO_LINK_WITH_EDITOR = "linkWithEditor"; //$NON-NLS-1$
-
- private static final String MEMENTO_PRESENTATION = "presentation"; //$NON-NLS-1$
-
- private static final String LABEL_NO_TASKS = "no task active"; //$NON-NLS-1$
-
- private final static int SIZE_MAX_SELECTION_HISTORY = 10;
-
- static final String[] PRIORITY_LEVELS = { PriorityLevel.P1.toString(), PriorityLevel.P2.toString(),
- PriorityLevel.P3.toString(), PriorityLevel.P4.toString(), PriorityLevel.P5.toString() };
-
- public static final String[] PRIORITY_LEVEL_DESCRIPTIONS = { PriorityLevel.P1.getDescription(),
- PriorityLevel.P2.getDescription(), PriorityLevel.P3.getDescription(), PriorityLevel.P4.getDescription(),
- PriorityLevel.P5.getDescription() };
-
- private static List<AbstractTaskListPresentation> presentationsPrimary = new ArrayList<AbstractTaskListPresentation>();
-
- private static List<AbstractTaskListPresentation> presentationsSecondary = new ArrayList<AbstractTaskListPresentation>();
-
- private boolean focusedMode;
-
- private boolean linkWithEditor;
-
- private final TaskListCellModifier taskListCellModifier = new TaskListCellModifier(this);
-
- private IThemeManager themeManager;
-
- private TaskListFilteredTree filteredTree;
-
- private DrillDownAdapter drillDownAdapter;
-
- private AbstractTaskContainer drilledIntoCategory;
-
- private CollapseAllAction collapseAll;
-
- private ExpandAllAction expandAll;
-
- private FilterCompletedTasksAction filterCompleteTask;
-
- private GroupSubTasksAction filterSubTasksAction;
-
- private SynchronizeAutomaticallyAction synchronizeAutomatically;
-
- private OpenTasksUiPreferencesAction openPreferencesAction;
-
- private PriorityDropDownAction filterOnPriorityAction;
-
- private TaskListSortAction sortDialogAction;
-
- private NewTaskAction newTaskAction;
-
- private LinkWithEditorAction linkWithEditorAction;
-
- private final PresentationDropDownSelectionAction presentationDropDownSelectionAction = new PresentationDropDownSelectionAction(
- this);
-
- private final TaskPriorityFilter filterPriority = new TaskPriorityFilter();
-
- private final TaskCompletionFilter filterComplete = new TaskCompletionFilter();
-
- private final TaskArchiveFilter filterArchive = new TaskArchiveFilter();
-
- private TaskWorkingSetFilter filterWorkingSet;
-
- private final Set<AbstractTaskListFilter> filters = new HashSet<AbstractTaskListFilter>();
-
- protected String[] columnNames = new String[] { Messages.TaskListView_Summary };
-
- protected int[] columnWidths = new int[] { 200 };
-
- private TreeColumn[] columns;
-
- private IMemento taskListMemento;
-
- private AbstractTaskListPresentation currentPresentation;
-
- private TaskTableLabelProvider taskListTableLabelProvider;
-
- private TaskListSorter tableSorter;
-
- private Color categoryGradientStart;
-
- private Color categoryGradientEnd;
-
- private CustomTaskListDecorationDrawer customDrawer;
-
- private TaskListViewActionGroup actionGroup;
-
- private final IPageListener PAGE_LISTENER = new IPageListener() {
- public void pageActivated(IWorkbenchPage page) {
- filteredTree.indicateActiveTaskWorkingSet();
- }
-
- public void pageClosed(IWorkbenchPage page) {
- // ignore
-
- }
-
- public void pageOpened(IWorkbenchPage page) {
- // ignore
- }
- };
-
- private final LinkedHashMap<String, IStructuredSelection> lastSelectionByTaskHandle = new LinkedHashMap<String, IStructuredSelection>(
- SIZE_MAX_SELECTION_HISTORY);
-
- /**
- * True if the view should indicate that interaction monitoring is paused
- */
- protected boolean isPaused = false;
-
- boolean synchronizationOverlaid = false;
-
- private final Listener CATEGORY_GRADIENT_DRAWER = new Listener() {
- public void handleEvent(Event event) {
- if (event.item.getData() instanceof ITaskContainer && !(event.item.getData() instanceof ITask)) {
- Scrollable scrollable = (Scrollable) event.widget;
- GC gc = event.gc;
-
- Rectangle area = scrollable.getClientArea();
- Rectangle rect = event.getBounds();
-
- /* Paint the selection beyond the end of last column */
- expandRegion(event, scrollable, gc, area);
-
- /* Draw Gradient Rectangle */
- Color oldForeground = gc.getForeground();
- Color oldBackground = gc.getBackground();
-
- gc.setForeground(categoryGradientEnd);
- gc.drawLine(0, rect.y, area.width, rect.y);
-
- gc.setForeground(categoryGradientStart);
- gc.setBackground(categoryGradientEnd);
-
- // gc.setForeground(categoryGradientStart);
- // gc.setBackground(categoryGradientEnd);
- // gc.setForeground(new Clr(Display.getCurrent(), 255, 0, 0));
-
- gc.fillGradientRectangle(0, rect.y + 1, area.width, rect.height, true);
-
- /* Bottom Line */
- // gc.setForeground();
- gc.setForeground(categoryGradientEnd);
- gc.drawLine(0, rect.y + rect.height - 1, area.width, rect.y + rect.height - 1);
-
- gc.setForeground(oldForeground);
- gc.setBackground(oldBackground);
- /* Mark as Background being handled */
- event.detail &= ~SWT.BACKGROUND;
- }
- }
-
- private void expandRegion(Event event, Scrollable scrollable, GC gc, Rectangle area) {
- int columnCount;
- if (scrollable instanceof Table) {
- columnCount = ((Table) scrollable).getColumnCount();
- } else {
- columnCount = ((Tree) scrollable).getColumnCount();
- }
-
- if (event.index == columnCount - 1 || columnCount == 0) {
- int width = area.x + area.width - event.x;
- if (width > 0) {
- Region region = new Region();
- gc.getClipping(region);
- region.add(event.x, event.y, width, event.height);
- gc.setClipping(region);
- region.dispose();
- }
- }
- }
- };
-
- private boolean gradientListenerAdded = false;
-
- private final ITaskActivityListener TASK_ACTIVITY_LISTENER = new TaskActivityAdapter() {
- @Override
- public void activityReset() {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- refreshJob.refresh();
- }
- });
- }
- };
-
- private final ITaskActivationListener TASK_ACTIVATION_LISTENER = new TaskActivationAdapter() {
-
- @Override
- public void taskActivated(final ITask task) {
- if (task != null) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- updateDescription();
- refresh(task);
- selectedAndFocusTask(task);
- filteredTree.indicateActiveTask(task);
- }
- });
- }
- }
-
- @Override
- public void taskDeactivated(final ITask task) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- refresh(task);
- updateDescription();
- filteredTree.indicateNoActiveTask();
- }
- });
- }
-
- private void refresh(final ITask task) {
- if (TaskListView.this.isScheduledPresentation()) {
- refreshJob.refresh();
- } else {
- refreshJob.refreshElement(task);
- }
- }
-
- };
-
- private final ITaskListChangeListener TASKLIST_CHANGE_LISTENER = new TaskListChangeAdapter() {
-
- @Override
- public void containersChanged(final Set<TaskContainerDelta> deltas) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- for (TaskContainerDelta taskContainerDelta : deltas) {
- if (isScheduledPresentation()) {
- // TODO: implement refresh policy for scheduled presentation
- refreshJob.refresh();
- } else {
- switch (taskContainerDelta.getKind()) {
- case ROOT:
- refreshJob.refresh();
- break;
- case ADDED:
- case REMOVED:
- if (taskContainerDelta.getElement() != null) {
- refreshJob.refreshElement(taskContainerDelta.getElement());
- }
- if (taskContainerDelta.getParent() != null) {
- refreshJob.refreshElement(taskContainerDelta.getParent());
- } else {
- // element was added/removed from the root
- refreshJob.refresh();
- }
- break;
- case CONTENT:
- refreshJob.refreshElement(taskContainerDelta.getElement());
- }
-
- }
- }
- }
- });
- }
- };
-
- private final IPropertyChangeListener THEME_CHANGE_LISTENER = new IPropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent event) {
- if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME)
- || CommonThemes.isCommonTheme(event.getProperty())) {
- configureGradientColors();
- taskListTableLabelProvider.setCategoryBackgroundColor(themeManager.getCurrentTheme()
- .getColorRegistry()
- .get(CommonThemes.COLOR_CATEGORY));
- getViewer().refresh();
- }
- }
- };
-
- private TaskListToolTip taskListToolTip;
-
- private void configureGradientColors() {
- categoryGradientStart = themeManager.getCurrentTheme().getColorRegistry().get(
- CommonThemes.COLOR_CATEGORY_GRADIENT_START);
- categoryGradientEnd = themeManager.getCurrentTheme().getColorRegistry().get(
- CommonThemes.COLOR_CATEGORY_GRADIENT_END);
-
- boolean customized = true;
- if (categoryGradientStart != null && categoryGradientStart.getRed() == 240
- && categoryGradientStart.getGreen() == 240 && categoryGradientStart.getBlue() == 240
- && categoryGradientEnd != null && categoryGradientEnd.getRed() == 220
- && categoryGradientEnd.getGreen() == 220 && categoryGradientEnd.getBlue() == 220) {
- customized = false;
- }
-
- if (gradientListenerAdded == false && categoryGradientStart != null
- && !categoryGradientStart.equals(categoryGradientEnd)) {
- getViewer().getTree().addListener(SWT.EraseItem, CATEGORY_GRADIENT_DRAWER);
- gradientListenerAdded = true;
- if (!customized) {
- // Set parent-based colors
- Color parentBackground = getViewer().getTree().getParent().getBackground();
- double GRADIENT_TOP = 1.05;// 1.02;
- double GRADIENT_BOTTOM = .995;// 1.035;
-
- int red = Math.min(255, (int) (parentBackground.getRed() * GRADIENT_TOP));
- int green = Math.min(255, (int) (parentBackground.getGreen() * GRADIENT_TOP));
- int blue = Math.min(255, (int) (parentBackground.getBlue() * GRADIENT_TOP));
-
- try {
- categoryGradientStart = new Color(Display.getDefault(), red, green, blue);
- } catch (Exception e) {
- categoryGradientStart = getViewer().getTree().getParent().getBackground();
- StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not set color: " + red //$NON-NLS-1$
- + ", " + green + ", " + blue, e)); //$NON-NLS-1$ //$NON-NLS-2$
- }
- red = Math.max(0, (int) (parentBackground.getRed() / GRADIENT_BOTTOM));
- green = Math.max(0, (int) (parentBackground.getGreen() / GRADIENT_BOTTOM));
- blue = Math.max(0, (int) (parentBackground.getBlue() / GRADIENT_BOTTOM));
- if (red > 255) {
- red = 255;
- }
- try {
- categoryGradientEnd = new Color(Display.getDefault(), red, green, blue);
- } catch (Exception e) {
- categoryGradientStart = getViewer().getTree().getParent().getBackground();
- StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not set color: " + red //$NON-NLS-1$
- + ", " + green + ", " + blue, e)); //$NON-NLS-1$ //$NON-NLS-2$
- }
- }
- } else if (categoryGradientStart != null && categoryGradientStart.equals(categoryGradientEnd)) {
- getViewer().getTree().removeListener(SWT.EraseItem, CATEGORY_GRADIENT_DRAWER);
- gradientListenerAdded = false;
- }
- }
-
- public static TaskListView getFromActivePerspective() {
- if (PlatformUI.isWorkbenchRunning()) {
- IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (activeWorkbenchWindow != null) {
- IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
- if (activePage != null) {
- IViewPart view = activePage.findView(ITasksUiConstants.ID_VIEW_TASKS);
- if (view instanceof TaskListView) {
- return (TaskListView) view;
- }
- }
- }
- }
- return null;
- }
-
- private static boolean initializedSynchronization;
-
- public TaskListView() {
- if (!initializedSynchronization) {
- initializedSynchronization = true;
- // trigger additional initialization when task list is first made visible.
- TasksUiPlugin.getDefault().initializeNotificationsAndSynchronization();
- }
- }
-
- @Override
- public void dispose() {
- super.dispose();
- TasksUiInternal.getTaskList().removeChangeListener(TASKLIST_CHANGE_LISTENER);
- TasksUiPlugin.getTaskActivityManager().removeActivityListener(TASK_ACTIVITY_LISTENER);
- TasksUiPlugin.getTaskActivityManager().removeActivationListener(TASK_ACTIVATION_LISTENER);
-
- PlatformUI.getWorkbench().getWorkingSetManager().removePropertyChangeListener(this);
- if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) {
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().removePageListener(PAGE_LISTENER);
- }
-
- final IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
- if (themeManager != null) {
- themeManager.removePropertyChangeListener(THEME_CHANGE_LISTENER);
- }
-
- if (editorListener != null) {
- getSite().getPage().removePartListener(editorListener);
- }
-
- customDrawer.dispose();
- categoryGradientStart.dispose();
- categoryGradientEnd.dispose();
- }
-
- private void updateDescription() {
- ITask task = TasksUi.getTaskActivityManager().getActiveTask();
- if (getSite() == null || getSite().getPage() == null) {
- return;
- }
-
- IViewReference reference = getSite().getPage().findViewReference(ITasksUiConstants.ID_VIEW_TASKS);
- boolean shouldSetDescription = false;
- if (reference != null && reference.isFastView() && !getSite().getPage().isPartVisible(this)) {
- shouldSetDescription = true;
- }
-
- if (task != null) {
- setTitleToolTip(LABEL_VIEW + " (" + task.getSummary() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
- if (shouldSetDescription) {
- setContentDescription(task.getSummary());
- } else {
- setContentDescription(""); //$NON-NLS-1$
- }
- } else {
- setTitleToolTip(LABEL_VIEW);
- if (shouldSetDescription) {
- setContentDescription(LABEL_NO_TASKS);
- } else {
- setContentDescription(""); //$NON-NLS-1$
- }
- }
- }
-
- @Override
- public void init(IViewSite site, IMemento memento) throws PartInitException {
- init(site);
- this.taskListMemento = memento;
- }
-
- @Override
- public void saveState(IMemento memento) {
- if (tableSorter != null) {
- IMemento child = memento.createChild(MEMENTO_SORTER);
- tableSorter.saveState(child);
- }
-
- memento.putString(MEMENTO_LINK_WITH_EDITOR, Boolean.toString(linkWithEditor));
- memento.putString(MEMENTO_PRESENTATION, currentPresentation.getId());
- }
-
- private void restoreState() {
- if (taskListMemento != null) {
- if (tableSorter != null) {
- IMemento sorterMemento = taskListMemento.getChild(MEMENTO_SORTER);
- if (sorterMemento != null) {
- tableSorter.restoreState(sorterMemento);
- } else {
- sorterMemento = taskListMemento.getChild(MEMENTO_SORT_INDEX);
- if (sorterMemento != null) {
- migrateSorterState(tableSorter, sorterMemento);
- }
- }
- }
- applyPresentation(taskListMemento.getString(MEMENTO_PRESENTATION));
- }
-
- filterWorkingSet = new TaskWorkingSetFilter();
- filterWorkingSet.updateWorkingSet(getSite().getPage().getAggregateWorkingSet());
- filteredTree.setWorkingSetFilter(filterWorkingSet);
- addFilter(filterWorkingSet);
- addFilter(filterPriority);
- if (TasksUiPlugin.getDefault().getPreferenceStore().contains(ITasksUiPreferenceConstants.FILTER_COMPLETE_MODE)) {
- addFilter(filterComplete);
- }
-
- //if (TasksUiPlugin.getDefault().getPreferenceStore().contains(TasksUiPreferenceConstants.FILTER_ARCHIVE_MODE)) {
- addFilter(filterArchive);
- //}
-
- // Restore "link with editor" value; by default true
- boolean linkValue = true;
- if (taskListMemento != null && taskListMemento.getString(MEMENTO_LINK_WITH_EDITOR) != null) {
- linkValue = Boolean.parseBoolean(taskListMemento.getString(MEMENTO_LINK_WITH_EDITOR));
- }
- setLinkWithEditor(linkValue);
-
- getViewer().refresh();
- }
-
- /**
- * Public for testing only.
- */
- public void migrateSorterState(TaskListSorter tableSorter, IMemento sorterMemento) {
- int restoredSortIndex = 0;
- if (sorterMemento != null) {
- int sortDirection = -1;
- IMemento m = sorterMemento.getChild(MEMENTO_KEY_SORTER);
- if (m != null) {
- Integer sortIndexInt = m.getInteger(MEMENTO_KEY_SORT_INDEX);
- if (sortIndexInt != null) {
- restoredSortIndex = sortIndexInt.intValue();
- }
- Integer sortDirInt = m.getInteger(MEMENTO_KEY_SORT_DIRECTION);
- if (sortDirInt != null) {
- sortDirection = sortDirInt.intValue();
- tableSorter.getComparator().getSortCriterion(0).setDirection(sortDirection);
- switch (restoredSortIndex) {
- case 1:
- tableSorter.getComparator().getSortCriterion(0).setKey(SortKey.SUMMARY);
- break;
- case 2:
- tableSorter.getComparator().getSortCriterion(0).setKey(SortKey.DATE_CREATED);
- break;
- case 3:
- tableSorter.getComparator().getSortCriterion(0).setKey(SortKey.TASK_ID);
- break;
- default:
- tableSorter.getComparator().getSortCriterion(0).setKey(SortKey.PRIORITY);
- }
- }
- }
-
- IMemento m2 = sorterMemento.getChild(MEMENTO_KEY_SORTER2);
- if (m2 != null) {
- Integer sortIndexInt = m2.getInteger(MEMENTO_KEY_SORT_INDEX);
- if (sortIndexInt != null) {
- restoredSortIndex = sortIndexInt.intValue();
- }
- Integer sortDirInt = m2.getInteger(MEMENTO_KEY_SORT_DIRECTION);
- if (sortDirInt != null) {
- sortDirection = sortDirInt.intValue();
- tableSorter.getComparator().getSortCriterion(1).setDirection(sortDirection);
- switch (restoredSortIndex) {
- case 1:
- tableSorter.getComparator().getSortCriterion(1).setKey(SortKey.SUMMARY);
- break;
- case 2:
- tableSorter.getComparator().getSortCriterion(1).setKey(SortKey.DATE_CREATED);
- break;
- case 3:
- tableSorter.getComparator().getSortCriterion(1).setKey(SortKey.TASK_ID);
- break;
- default:
- tableSorter.getComparator().getSortCriterion(1).setKey(SortKey.PRIORITY);
- }
- }
- }
- }
- }
-
- @Override
- public void createPartControl(Composite parent) {
- IWorkbenchSiteProgressService progress = (IWorkbenchSiteProgressService) getSite().getAdapter(
- IWorkbenchSiteProgressService.class);
- if (progress != null) {
- // show indicator for all running query synchronizations
- progress.showBusyForFamily(ITasksCoreConstants.JOB_FAMILY_SYNCHRONIZATION);
- }
-
- themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
- themeManager.addPropertyChangeListener(THEME_CHANGE_LISTENER);
-
- filteredTree = new TaskListFilteredTree(parent, SWT.MULTI | SWT.VERTICAL | /* SWT.H_SCROLL | */SWT.V_SCROLL
- | SWT_NO_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION, new SubstringPatternFilter(),
- getViewSite().getWorkbenchWindow());
- // Set to empty string to disable native tooltips (windows only?)
- // bug#160897
- // http://dev.eclipse.org/newslists/news.eclipse.platform.swt/msg29614.html
- getViewer().getTree().setToolTipText(""); //$NON-NLS-1$
- getSite().registerContextMenu(TasksUiInternal.ID_MENU_ACTIVE_TASK, filteredTree.getActiveTaskMenuManager(),
- filteredTree.getActiveTaskSelectionProvider());
-
- filteredTree.getFilterControl().addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- updateFilterEnablement();
- }
- });
-
- getViewer().getTree().setHeaderVisible(false);
- getViewer().setUseHashlookup(true);
- refreshJob = new TaskListRefreshJob(getViewer(), "Task List Refresh"); //$NON-NLS-1$
-
- configureColumns(columnNames, columnWidths);
-
- final IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
- Color categoryBackground = themeManager.getCurrentTheme().getColorRegistry().get(CommonThemes.COLOR_CATEGORY);
- taskListTableLabelProvider = new TaskTableLabelProvider(new TaskElementLabelProvider(true),
- PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(), categoryBackground);
- getViewer().setLabelProvider(taskListTableLabelProvider);
-
- CellEditor[] editors = new CellEditor[columnNames.length];
- TextCellEditor textEditor = new TextCellEditor(getViewer().getTree());
- ((Text) textEditor.getControl()).setOrientation(SWT.LEFT_TO_RIGHT);
- editors[0] = textEditor;
- // editors[1] = new ComboBoxCellEditor(getViewer().getTree(),
- // editors[2] = new CheckboxCellEditor();
-
- getViewer().setCellEditors(editors);
- getViewer().setCellModifier(taskListCellModifier);
-
- tableSorter = new TaskListSorter();
- getViewer().setSorter(tableSorter);
-
- applyPresentation(CategorizedPresentation.ID);
-
- drillDownAdapter = new DrillDownAdapter(getViewer());
- getViewer().setInput(getViewSite());
-
- final int activationImageOffset = PlatformUtil.getTreeImageOffset();
- customDrawer = new CustomTaskListDecorationDrawer(this, activationImageOffset);
- getViewer().getTree().addListener(SWT.EraseItem, customDrawer);
- getViewer().getTree().addListener(SWT.PaintItem, customDrawer);
-
- getViewer().getTree().addMouseListener(new MouseListener() {
-
- public void mouseDown(MouseEvent e) {
- // NOTE: need e.x offset for Linux/GTK, which does not see
- // left-aligned items in tree
- Object selectedNode = ((Tree) e.widget).getItem(new Point(e.x + 70, e.y));
- if (selectedNode instanceof TreeItem) {
- Object selectedObject = ((TreeItem) selectedNode).getData();
- if (selectedObject instanceof ITask) {
- if (e.x > activationImageOffset && e.x < activationImageOffset + 13) {
- taskListCellModifier.toggleTaskActivation((TreeItem) selectedNode);
- }
- }
- }
- }
-
- public void mouseDoubleClick(MouseEvent e) {
- // ignore
- }
-
- public void mouseUp(MouseEvent e) {
- // ignore
- }
-
- });
-
- // TODO make these proper commands and move code into TaskListViewCommands
- getViewer().getTree().addKeyListener(new KeyListener() {
-
- public void keyPressed(KeyEvent e) {
- if (e.keyCode == SWT.F2 && e.stateMask == 0) {
- if (actionGroup.getRenameAction().isEnabled()) {
- actionGroup.getRenameAction().run();
- }
- } else if ((e.keyCode & SWT.KEYCODE_BIT) != 0) {
- // Do nothing here since it is key code
- } else if (e.keyCode == SWT.ESC) {
- taskListToolTip.hide();
- } else if (e.keyCode == 'f' && e.stateMask == SWT.MOD1) {
- filteredTree.getFilterControl().setFocus();
- } else if (e.stateMask == 0) {
- if (Character.isLetter((char) e.keyCode) || Character.isDigit((char) e.keyCode)) {
- String string = new Character((char) e.keyCode).toString();
- filteredTree.getFilterControl().setText(string);
- filteredTree.getFilterControl().setSelection(1, 1);
- filteredTree.getFilterControl().setFocus();
- }
- }
- }
-
- public void keyReleased(KeyEvent e) {
- }
-
- });
-
- getViewer().addTreeListener(new ITreeViewerListener() {
-
- public void treeCollapsed(final TreeExpansionEvent event) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- getViewer().refresh(event.getElement());
- }
- });
- }
-
- public void treeExpanded(final TreeExpansionEvent event) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- getViewer().refresh(event.getElement());
- }
- });
- }
- });
-
- taskListToolTip = new TaskListToolTip(getViewer().getControl());
-
- // update tooltip contents
- getViewer().addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- updateToolTip(true);
- }
- });
-
- getViewer().getTree().addFocusListener(new FocusAdapter() {
- @Override
- public void focusLost(FocusEvent e) {
- taskListToolTip.hide();
- }
- });
-
- makeActions();
- hookGlobalActions();
- hookContextMenu();
- hookOpenAction();
- contributeToActionBars();
- initHandlers();
-
- configureGradientColors();
-
- initDragAndDrop(parent);
- expandToActiveTasks();
- restoreState();
-
- updateDescription();
-
- IContextService contextSupport = (IContextService) getSite().getService(IContextService.class);
- if (contextSupport != null) {
- contextSupport.activateContext(ITasksUiConstants.ID_VIEW_TASKS);
- }
-
- getSite().setSelectionProvider(getViewer());
- getSite().getPage().addPartListener(editorListener);
-
- // we need to update the icon here as the action was not created when the presentation was applied
- updatePresentationSelectorImage();
-
- PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(this);
- TasksUiPlugin.getTaskActivityManager().addActivityListener(TASK_ACTIVITY_LISTENER);
- TasksUiPlugin.getTaskActivityManager().addActivationListener(TASK_ACTIVATION_LISTENER);
- TasksUiInternal.getTaskList().addChangeListener(TASKLIST_CHANGE_LISTENER);
-
- // Need to do this because the page, which holds the active working set is not around on creation, see bug 203179
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().addPageListener(PAGE_LISTENER);
- }
-
- private void initHandlers() {
- IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
- handlerService.activateHandler(CollapseAllHandler.ID_COMMAND, new CollapseAllHandler(getViewer()));
- }
-
- private void hookGlobalActions() {
- IActionBars bars = getViewSite().getActionBars();
- bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), actionGroup.getDeleteAction());
- bars.setGlobalActionHandler(ActionFactory.COPY.getId(), actionGroup.getCopyDetailsAction());
- }
-
- private void applyPresentation(String id) {
- if (id != null) {
- for (AbstractTaskListPresentation presentation : presentationsPrimary) {
- if (id.equals(presentation.getId())) {
- applyPresentation(presentation);
- return;
- }
- }
- for (AbstractTaskListPresentation presentation : presentationsSecondary) {
- if (id.equals(presentation.getId())) {
- applyPresentation(presentation);
- return;
- }
- }
- }
- }
-
- public void applyPresentation(AbstractTaskListPresentation presentation) {
- try {
- getViewer().getControl().setRedraw(false);
- if (!filteredTree.getFilterString().equals("")) { //$NON-NLS-1$
- filteredTree.getFilterControl().setText(""); //$NON-NLS-1$
- }
- AbstractTaskListContentProvider contentProvider = presentation.getContentProvider(this);
- getViewer().setContentProvider(contentProvider);
- refresh(true);
-
- currentPresentation = presentation;
- updatePresentationSelectorImage();
- } finally {
- getViewer().getControl().setRedraw(true);
- }
- }
-
- private void updatePresentationSelectorImage() {
- if (presentationDropDownSelectionAction != null && currentPresentation != null) {
- presentationDropDownSelectionAction.setImageDescriptor(currentPresentation.getImageDescriptor());
- }
- }
-
- public AbstractTaskListPresentation getCurrentPresentation() {
- return currentPresentation;
- }
-
- private void configureColumns(final String[] columnNames, final int[] columnWidths) {
- TreeColumnLayout layout = (TreeColumnLayout) getViewer().getTree().getParent().getLayout();
- getViewer().setColumnProperties(columnNames);
- columns = new TreeColumn[columnNames.length];
- for (int i = 0; i < columnNames.length; i++) {
- columns[i] = new TreeColumn(getViewer().getTree(), 0);
- columns[i].setText(columnNames[i]);
-
- if (i == 0) {
- layout.setColumnData(columns[i], new ColumnWeightData(100));
- } else {
- layout.setColumnData(columns[i], new ColumnPixelData(columnWidths[i]));
- }
-
- columns[i].addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- SortCriterion criterion = tableSorter.getComparator().getSortCriterion(0);
- criterion.setDirection(criterion.getDirection() * -1);
- getViewer().refresh(false);
- }
- });
- columns[i].addControlListener(new ControlListener() {
- public void controlResized(ControlEvent e) {
- for (int j = 0; j < columnWidths.length; j++) {
- if (columns[j].equals(e.getSource())) {
- columnWidths[j] = columns[j].getWidth();
- }
- }
- }
-
- public void controlMoved(ControlEvent e) {
- // don't care if the control is moved
- }
- });
- }
- }
-
- /**
- * Tracks editor activation and jump to corresponding task, if applicable
- */
- private final IPartListener editorListener = new IPartListener() {
-
- private void jumpToEditor(IWorkbenchPart part) {
- if (!linkWithEditor || !(part instanceof IEditorPart)) {
- return;
- }
- jumpToEditorTask((IEditorPart) part);
- }
-
- public void partActivated(IWorkbenchPart part) {
- if (part == TaskListView.this) {
- updateDescription();
- } else {
- jumpToEditor(part);
- }
- }
-
- public void partBroughtToTop(IWorkbenchPart part) {
- }
-
- public void partClosed(IWorkbenchPart part) {
- }
-
- public void partDeactivated(IWorkbenchPart part) {
- if (part == TaskListView.this) {
- IViewReference reference = getSite().getPage().findViewReference(ITasksUiConstants.ID_VIEW_TASKS);
- if (reference != null && reference.isFastView()) {
- updateDescription();
- }
- taskListToolTip.hide();
- }
- }
-
- public void partOpened(IWorkbenchPart part) {
- }
- };
-
- private void initDragAndDrop(Composite parent) {
- Transfer[] dragTypes = new Transfer[] { LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
- Transfer[] dropTypes = new Transfer[] { LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance(),
- TextTransfer.getInstance(), RTFTransfer.getInstance(), PlatformUtil.getUrlTransfer() };
-
- getViewer().addDragSupport(DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, dragTypes,
- new TaskDragSourceListener(getViewer()));
- getViewer().addDropSupport(DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_DEFAULT, dropTypes,
- new TaskListDropAdapter(getViewer()));
- }
-
- void expandToActiveTasks() {
- final IWorkbench workbench = PlatformUI.getWorkbench();
- workbench.getDisplay().asyncExec(new Runnable() {
- public void run() {
- ITask task = TasksUi.getTaskActivityManager().getActiveTask();
- if (task != null) {
- getViewer().expandToLevel(task, 0);
- }
- }
- });
- }
-
- private void hookContextMenu() {
- MenuManager menuManager = new MenuManager("#PopupMenu"); //$NON-NLS-1$
- menuManager.setRemoveAllWhenShown(true);
- menuManager.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(IMenuManager manager) {
- actionGroup.fillContextMenu(manager);
- }
- });
- Menu menu = menuManager.createContextMenu(getViewer().getControl());
- getViewer().getControl().setMenu(menu);
- getSite().registerContextMenu(menuManager, getViewer());
- }
-
- private void contributeToActionBars() {
- IActionBars bars = getViewSite().getActionBars();
- fillLocalPullDown(bars.getMenuManager());
- fillLocalToolBar(bars.getToolBarManager());
- }
-
- private void fillLocalPullDown(IMenuManager manager) {
- updateDrillDownActions();
- manager.add(actionGroup.getGoUpAction());
- manager.add(collapseAll);
- manager.add(expandAll);
- manager.add(new Separator(ID_SEPARATOR_FILTERS));
- manager.add(sortDialogAction);
- manager.add(filterOnPriorityAction);
- manager.add(filterCompleteTask);
- manager.add(filterSubTasksAction);
-
- manager.add(new Separator(ID_SEPARATOR_TASKS));
- manager.add(synchronizeAutomatically);
-
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
-
- manager.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(IMenuManager manager) {
- filterOnPriorityAction.updateCheckedState();
- }
- });
-
- manager.add(linkWithEditorAction);
- manager.add(new Separator());
- manager.add(openPreferencesAction);
- }
-
- private void fillLocalToolBar(IToolBarManager manager) {
- manager.add(newTaskAction);
- manager.add(presentationDropDownSelectionAction);
- manager.add(new Separator());
- manager.add(filterCompleteTask);
- manager.add(collapseAll);
- manager.add(new GroupMarker(ID_SEPARATOR_CONTEXT));
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- }
-
- public List<IRepositoryElement> getSelectedTaskContainers() {
- List<IRepositoryElement> selectedElements = new ArrayList<IRepositoryElement>();
- for (Iterator<?> i = ((IStructuredSelection) getViewer().getSelection()).iterator(); i.hasNext();) {
- Object object = i.next();
- if (object instanceof ITaskContainer) {
- selectedElements.add((IRepositoryElement) object);
- }
- }
- return selectedElements;
- }
-
- private void makeActions() {
- actionGroup = new TaskListViewActionGroup(this, drillDownAdapter);
- actionGroup.getOpenAction().setViewer(getViewer());
-
- collapseAll = new CollapseAllAction(this);
- expandAll = new ExpandAllAction(this);
- filterCompleteTask = new FilterCompletedTasksAction(this);
- filterSubTasksAction = new GroupSubTasksAction(this);
- synchronizeAutomatically = new SynchronizeAutomaticallyAction();
- openPreferencesAction = new OpenTasksUiPreferencesAction();
- //filterArchiveCategory = new FilterArchiveContainerAction(this);
- sortDialogAction = new TaskListSortAction(getSite(), this);
- filterOnPriorityAction = new PriorityDropDownAction(this);
- linkWithEditorAction = new LinkWithEditorAction(this);
- newTaskAction = new NewTaskAction();
- filteredTree.getViewer().addSelectionChangedListener(newTaskAction);
- }
-
- private void hookOpenAction() {
- getViewer().addOpenListener(new IOpenListener() {
- public void open(OpenEvent event) {
- actionGroup.getOpenAction().run();
- }
- });
-
- getViewer().addDoubleClickListener(new IDoubleClickListener() {
- public void doubleClick(DoubleClickEvent event) {
- if (TasksUiPlugin.getDefault().getPreferenceStore().getBoolean(
- ITasksUiPreferenceConstants.ACTIVATE_WHEN_OPENED)) {
- AbstractTask selectedTask = TaskListView.getFromActivePerspective().getSelectedTask();
- if (selectedTask != null) {
- actionGroup.getActivateAction().run(selectedTask);
- }
- }
- }
- });
- }
-
- /**
- * Passing the focus request to the viewer's control.
- */
- @Override
- public void setFocus() {
- filteredTree.getViewer().getControl().setFocus();
- }
-
- public void refresh(boolean expandIfFocused) {
- if (expandIfFocused && isFocusedMode() && isAutoExpandMode()) {
- try {
- getViewer().getControl().setRedraw(false);
- refreshJob.refreshNow();
- getViewer().expandAll();
- } finally {
- getViewer().getControl().setRedraw(true);
- }
- } else {
- refreshJob.refreshNow();
- }
- }
-
- public void refresh() {
- refreshJob.refreshNow();
- }
-
- public TaskListToolTip getToolTip() {
- return taskListToolTip;
- }
-
- public TreeViewer getViewer() {
- return filteredTree.getViewer();
- }
-
- public TaskCompletionFilter getCompleteFilter() {
- return filterComplete;
- }
-
- public TaskPriorityFilter getPriorityFilter() {
- return filterPriority;
- }
-
- public void addFilter(AbstractTaskListFilter filter) {
- if (!filters.contains(filter)) {
- filters.add(filter);
- }
- }
-
- public void clearFilters() {
- filters.clear();
- filters.add(filterArchive);
- filters.add(filterWorkingSet);
- }
-
- public void removeFilter(AbstractTaskListFilter filter) {
- filters.remove(filter);
- }
-
- public void updateDrillDownActions() {
- actionGroup.updateDrillDownActions();
- }
-
- boolean isInRenameAction = false;
-
- private DelayedRefreshJob refreshJob;
-
- private boolean itemNotFoundExceptionLogged;
-
- public void setInRenameAction(boolean b) {
- isInRenameAction = b;
- }
-
- public void goIntoCategory() {
- ISelection selection = getViewer().getSelection();
- if (selection instanceof StructuredSelection) {
- StructuredSelection structuredSelection = (StructuredSelection) selection;
- Object element = structuredSelection.getFirstElement();
- if (element instanceof ITaskContainer) {
- drilledIntoCategory = (AbstractTaskContainer) element;
- drillDownAdapter.goInto();
- IActionBars bars = getViewSite().getActionBars();
- bars.getToolBarManager().remove(actionGroup.getGoUpAction().getId());
- bars.getToolBarManager().add(actionGroup.getGoUpAction());
- bars.updateActionBars();
- updateDrillDownActions();
- }
- }
- }
-
- public void goUpToRoot() {
- drilledIntoCategory = null;
- drillDownAdapter.goBack();
- IActionBars bars = getViewSite().getActionBars();
- bars.getToolBarManager().remove(GoUpAction.ID);
- bars.updateActionBars();
- updateDrillDownActions();
- }
-
- public AbstractTask getSelectedTask() {
- ISelection selection = getViewer().getSelection();
- if (selection.isEmpty()) {
- return null;
- }
- if (selection instanceof StructuredSelection) {
- StructuredSelection structuredSelection = (StructuredSelection) selection;
- Object element = structuredSelection.getFirstElement();
- if (element instanceof ITask) {
- return (AbstractTask) structuredSelection.getFirstElement();
- }
- }
- return null;
- }
-
- public static AbstractTask getSelectedTask(ISelection selection) {
- if (selection instanceof StructuredSelection) {
- StructuredSelection structuredSelection = (StructuredSelection) selection;
- if (structuredSelection.size() != 1) {
- return null;
- }
- Object element = structuredSelection.getFirstElement();
- if (element instanceof ITask) {
- return (AbstractTask) structuredSelection.getFirstElement();
- }
- }
- return null;
- }
-
- public void indicatePaused(boolean paused) {
- isPaused = paused;
- IStatusLineManager statusLineManager = getViewSite().getActionBars().getStatusLineManager();
- if (isPaused) {
- statusLineManager.setMessage(CommonImages.getImage(TasksUiImages.TASKS_VIEW),
- Messages.TaskListView_Mylyn_context_capture_paused);
- setPartName(Messages.TaskListView__paused_ + LABEL_VIEW);
- } else {
- statusLineManager.setMessage(""); //$NON-NLS-1$
- setPartName(LABEL_VIEW);
- }
- }
-
- public AbstractTaskContainer getDrilledIntoCategory() {
- return drilledIntoCategory;
- }
-
- public TaskListFilteredTree getFilteredTree() {
- return filteredTree;
- }
-
- public void selectedAndFocusTask(ITask task) {
- if (task == null || getViewer().getControl().isDisposed()) {
- return;
- }
- saveSelection();
-
- IStructuredSelection selection = restoreSelection(task);
- try {
- getViewer().setSelection(selection, true);
- } catch (SWTError e) {
- if (!itemNotFoundExceptionLogged) {
- itemNotFoundExceptionLogged = true;
- // It's probably not worth displaying this to the user since the item
- // is not there in this case, so consider removing.
- StatusHandler.log(new Status(IStatus.WARNING, TasksUiPlugin.ID_PLUGIN,
- "Could not link Task List with editor", //$NON-NLS-1$
- e));
- }
- }
- }
-
- private void saveSelection() {
- IStructuredSelection selection = (IStructuredSelection) getViewer().getSelection();
- if (!selection.isEmpty()) {
- if (selection.getFirstElement() instanceof ITaskContainer) {
- // make sure the new selection is inserted at the end of the
- // list
- String handle = ((IRepositoryElement) selection.getFirstElement()).getHandleIdentifier();
- lastSelectionByTaskHandle.remove(handle);
- lastSelectionByTaskHandle.put(handle, selection);
-
- if (lastSelectionByTaskHandle.size() > SIZE_MAX_SELECTION_HISTORY) {
- Iterator<String> it = lastSelectionByTaskHandle.keySet().iterator();
- it.next();
- it.remove();
- }
- }
- }
- }
-
- private IStructuredSelection restoreSelection(IRepositoryElement task) {
- IStructuredSelection selection = lastSelectionByTaskHandle.get(task.getHandleIdentifier());
- if (selection != null) {
- return selection;
- } else {
- return new StructuredSelection(task);
- }
- }
-
- public Image[] getPirorityImages() {
- Image[] images = new Image[PriorityLevel.values().length];
- for (int i = 0; i < PriorityLevel.values().length; i++) {
- images[i] = TasksUiImages.getImageForPriority(PriorityLevel.values()[i]);
- }
- return images;
- }
-
- public Set<AbstractTaskListFilter> getFilters() {
- return filters;
- }
-
- public static String getCurrentPriorityLevel() {
- if (TasksUiPlugin.getDefault().getPreferenceStore().contains(ITasksUiPreferenceConstants.FILTER_PRIORITY)) {
- return TasksUiPlugin.getDefault().getPreferenceStore().getString(
- ITasksUiPreferenceConstants.FILTER_PRIORITY);
- } else {
- return PriorityLevel.P5.toString();
- }
- }
-
- public TaskArchiveFilter getArchiveFilter() {
- return filterArchive;
- }
-
- private void updateFilterEnablement() {
- boolean enabled = !isFocusedMode();
- if (enabled) {
- String filterText = filteredTree.getFilterString();
- if (filterText != null && filterText.length() > 0) {
- enabled = false;
- }
- }
- sortDialogAction.setEnabled(enabled);
- filterOnPriorityAction.setEnabled(enabled);
- filterCompleteTask.setEnabled(enabled);
- //filterArchiveCategory.setEnabled(enabled);
- }
-
- public boolean isScheduledPresentation() {
- return currentPresentation != null && ScheduledPresentation.ID.equals(currentPresentation.getId());
- }
-
- public boolean isFocusedMode() {
- return focusedMode;
- }
-
- private boolean isAutoExpandMode() {
- return TasksUiPlugin.getDefault().getPreferenceStore().getBoolean(
- ITasksUiPreferenceConstants.AUTO_EXPAND_TASK_LIST);
- }
-
- public void setFocusedMode(boolean focusedMode) {
- if (this.focusedMode == focusedMode) {
- return;
- }
- this.focusedMode = focusedMode;
- IToolBarManager manager = getViewSite().getActionBars().getToolBarManager();
-
- if (focusedMode && isAutoExpandMode()) {
- manager.remove(FilterCompletedTasksAction.ID);
- manager.remove(CollapseAllAction.ID);
- } else if (manager.find(CollapseAllAction.ID) == null) {
- manager.prependToGroup(ID_SEPARATOR_CONTEXT, collapseAll);
- manager.prependToGroup(ID_SEPARATOR_CONTEXT, filterCompleteTask);
- }
- manager.update(false);
- updateFilterEnablement();
- }
-
- public void setSynchronizationOverlaid(boolean synchronizationOverlaid) {
- this.synchronizationOverlaid = synchronizationOverlaid;
- getViewer().refresh();
- }
-
- public void displayPrioritiesAbove(String priority) {
- filterPriority.displayPrioritiesAbove(priority);
- getViewer().refresh();
- }
-
- public void propertyChange(PropertyChangeEvent event) {
- String property = event.getProperty();
- if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)
- || IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property)) {
- if (getSite() != null && getSite().getPage() != null) {
- if (filterWorkingSet.updateWorkingSet(getSite().getPage().getAggregateWorkingSet())) {
- try {
- getViewer().getControl().setRedraw(false);
-
- if (drilledIntoCategory != null) {
- goUpToRoot();
- }
-
- getViewer().refresh();
- if (isFocusedMode() && isAutoExpandMode()) {
- getViewer().expandAll();
- }
- } finally {
- getViewer().getControl().setRedraw(true);
- }
- }
- }
-
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- filteredTree.indicateActiveTaskWorkingSet();
- }
- });
- }
- }
-
- public void setLinkWithEditor(boolean linkWithEditor) {
- this.linkWithEditor = linkWithEditor;
- linkWithEditorAction.setChecked(linkWithEditor);
- if (linkWithEditor) {
- IEditorPart activeEditor = getSite().getPage().getActiveEditor();
- if (activeEditor != null) {
- jumpToEditorTask(activeEditor);
- }
- }
- }
-
- private void jumpToEditorTask(IEditorPart editor) {
- IEditorInput input = editor.getEditorInput();
- if (input instanceof TaskEditorInput) {
- ITask task = ((TaskEditorInput) input).getTask();
- ITask selected = getSelectedTask();
- if (selected == null || !selected.equals(task)) {
- selectedAndFocusTask(task);
- }
- }
- }
-
- private void updateToolTip(boolean force) {
- if (taskListToolTip != null && taskListToolTip.isVisible()) {
- if (!force && taskListToolTip.isTriggeredByMouse()) {
- return;
- }
-
- TreeItem[] selection = getViewer().getTree().getSelection();
- if (selection != null && selection.length > 0) {
- Rectangle bounds = selection[0].getBounds();
- taskListToolTip.show(new Point(bounds.x + 1, bounds.y + 1));
- }
- }
- }
-
- /**
- * This can be used for experimentally adding additional presentations, but note that this convention is extremely
- * likely to change in the Mylyn 3.0 cycle.
- */
- public static List<AbstractTaskListPresentation> getPresentations() {
- List<AbstractTaskListPresentation> presentations = new ArrayList<AbstractTaskListPresentation>();
- presentations.addAll(presentationsPrimary);
- presentations.addAll(presentationsSecondary);
- return presentations;
- }
-
- public static void addPresentation(AbstractTaskListPresentation presentation) {
- if (presentation.isPrimary()) {
- presentationsPrimary.add(presentation);
- } else {
- presentationsSecondary.add(presentation);
- }
- }
-
- public TaskListSorter getSorter() {
- return tableSorter;
- }
-
- public boolean show(ShowInContext context) {
- ISelection selection = context.getSelection();
- if (selection instanceof IStructuredSelection) {
- getViewer().setSelection(selection, true);
- return true;
- }
- return false;
- }
-
-}

Back to the top