Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java351
1 files changed, 296 insertions, 55 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java
index 65dfa12e4..9cf1a37d6 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/views/TaskListView.java
@@ -12,6 +12,7 @@ package org.eclipse.mylar.tasks.ui.views;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
@@ -23,6 +24,8 @@ import javax.security.auth.login.LoginException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
@@ -45,6 +48,7 @@ import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.window.Window;
import org.eclipse.mylar.bugzilla.core.BugReport;
@@ -59,6 +63,7 @@ import org.eclipse.mylar.tasks.MylarTasksPlugin;
import org.eclipse.mylar.tasks.Task;
import org.eclipse.mylar.tasks.bugzilla.BugzillaStructureBridge;
import org.eclipse.mylar.tasks.ui.BugzillaTaskEditorInput;
+import org.eclipse.mylar.tasks.ui.TaskEditorInput;
import org.eclipse.mylar.ui.MylarImages;
import org.eclipse.mylar.ui.MylarUiPlugin;
import org.eclipse.mylar.ui.actions.ToggleGlobalInterestFilteringAction;
@@ -76,6 +81,7 @@ import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.TreeColumn;
@@ -120,9 +126,10 @@ public class TaskListView extends ViewPart {
private Action completeTask;
private Action incompleteTask;
-
private Action filterCompleteTask;
private Action filterInCompleteTask;
+ private PriorityDropDownAction filterOnPriority;
+ private PriorityFilter priorityFilter = new PriorityFilter();
protected String[] columnNames = new String[] { "", ".", "!", "Description", "handle" };
protected int[] columnWidths = new int[] { 70, 20, 20, 120, 70 };
@@ -132,7 +139,6 @@ public class TaskListView extends ViewPart {
public static final String tableSortIdentifier = "org.eclipse.mylar.tasks.ui.views.tasklist.sortIndex";
private int sortIndex = 2;
-
private String[] PRIORITY_LEVELS = { "P1", "P2", "P3", "P4", "P5" };
private final class CreateTaskAction extends Action {
@@ -160,12 +166,225 @@ public class TaskListView extends ViewPart {
MylarUiPlugin.getDefault().setHighlighterMapping(
newTask.getHandle(),
MylarUiPlugin.getDefault().getDefaultHighlighter().getName());
- TaskListView.this.viewer.refresh();
-
viewer.refresh();
}
}
+ private final class PriorityDropDownAction extends Action implements IMenuCreator {
+ private Menu dropDownMenu = null;
+
+ public PriorityDropDownAction() {
+ setText("Display Priorities");
+ setToolTipText("Show Tasks with Priority Levels");
+ setImageDescriptor(MylarImages.FILTER_DECLARATIONS);
+ setMenuCreator(this);
+ }
+
+ public void dispose() {
+ if (dropDownMenu != null) {
+ dropDownMenu.dispose();
+ dropDownMenu = null;
+ }
+ }
+
+ public Menu getMenu(Control parent) {
+ if (dropDownMenu != null) {
+ dropDownMenu.dispose();
+ }
+ dropDownMenu = new Menu(parent);
+ addActionsToMenu();
+ return dropDownMenu;
+ }
+
+ public Menu getMenu(Menu parent) {
+ if (dropDownMenu != null) {
+ dropDownMenu.dispose();
+ }
+ dropDownMenu = new Menu(parent);
+ addActionsToMenu();
+ return dropDownMenu;
+ }
+
+ public void addActionsToMenu() {
+ Action P1 = new Action(PRIORITY_LEVELS[0], AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ MylarUiPlugin.getDefault().setP1FilterMode(!isChecked());
+ if (isChecked()) {
+ priorityFilter.displayPriority(PRIORITY_LEVELS[0]);
+ } else {
+ priorityFilter.hidePriority(PRIORITY_LEVELS[0]);
+ }
+ viewer.refresh();
+ }
+ };
+ P1.setEnabled(true);
+ P1.setChecked(!MylarUiPlugin.getDefault().isP1FilterMode());
+ P1.setToolTipText(PRIORITY_LEVELS[0]);
+ ActionContributionItem item= new ActionContributionItem(P1);
+ item.fill(dropDownMenu, -1);
+
+ Action P2 = new Action(PRIORITY_LEVELS[1], AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ MylarUiPlugin.getDefault().setP2FilterMode(!isChecked());
+ if (isChecked()) {
+ priorityFilter.displayPriority(PRIORITY_LEVELS[1]);
+ } else {
+ priorityFilter.hidePriority(PRIORITY_LEVELS[1]);
+ }
+ viewer.refresh();
+ }
+ };
+ P2.setEnabled(true);
+ P2.setChecked(!MylarUiPlugin.getDefault().isP2FilterMode());
+ P2.setToolTipText(PRIORITY_LEVELS[1]);
+ item= new ActionContributionItem(P2);
+ item.fill(dropDownMenu, -1);
+
+ Action P3 = new Action(PRIORITY_LEVELS[2], AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ MylarUiPlugin.getDefault().setP3FilterMode(!isChecked());
+ if (isChecked()) {
+ priorityFilter.displayPriority(PRIORITY_LEVELS[2]);
+ } else {
+ priorityFilter.hidePriority(PRIORITY_LEVELS[2]);
+ }
+ viewer.refresh();
+ }
+ };
+ P3.setEnabled(true);
+ P3.setChecked(!MylarUiPlugin.getDefault().isP3FilterMode());
+ P3.setToolTipText(PRIORITY_LEVELS[2]);
+ item= new ActionContributionItem(P3);
+ item.fill(dropDownMenu, -1);
+
+ Action P4 = new Action(PRIORITY_LEVELS[3], AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ MylarUiPlugin.getDefault().setP4FilterMode(!isChecked());
+ if (isChecked()) {
+ priorityFilter.displayPriority(PRIORITY_LEVELS[3]);
+ } else {
+ priorityFilter.hidePriority(PRIORITY_LEVELS[3]);
+ }
+ viewer.refresh();
+ }
+ };
+ P4.setEnabled(true);
+ P4.setChecked(!MylarUiPlugin.getDefault().isP4FilterMode());
+ P4.setToolTipText(PRIORITY_LEVELS[3]);
+ item= new ActionContributionItem(P4);
+ item.fill(dropDownMenu, -1);
+
+ Action P5 = new Action(PRIORITY_LEVELS[4], AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ MylarUiPlugin.getDefault().setP5FilterMode(!isChecked());
+ if (isChecked()) {
+ priorityFilter.displayPriority(PRIORITY_LEVELS[4]);
+ } else {
+ priorityFilter.hidePriority(PRIORITY_LEVELS[4]);
+ }
+ viewer.refresh();
+ }
+ };
+ P5.setEnabled(true);
+ P5.setChecked(!MylarUiPlugin.getDefault().isP5FilterMode());
+ P5.setToolTipText(PRIORITY_LEVELS[4]);
+ item= new ActionContributionItem(P5);
+ item.fill(dropDownMenu, -1);
+ }
+ public void run() {
+ }
+ }
+
+ private ViewerFilter completeFilter = new ViewerFilter(){
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof ITask) {
+ if (((ITask)element).hasCompletedSubTasks(false)) {
+ return true;
+ } else {
+ return !((ITask)element).isCompleted();
+ }
+ } else {
+ return false;
+ }
+ }
+ };
+
+ private ViewerFilter inCompleteFilter = new ViewerFilter(){
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof ITask) {
+ if (((ITask)element).hasCompletedSubTasks(true)) {
+ return true;
+ } else {
+ return ((ITask)element).isCompleted();
+ }
+ } else {
+ return false;
+ }
+ }
+ };
+
+ public class PriorityFilter extends ViewerFilter {
+ // list of priorities that will be shown in the tasklistview
+ private List<String> priorities = new ArrayList<String>();
+
+ public PriorityFilter() {
+ // if filter is off, then add to list
+ if (!MylarUiPlugin.getDefault().isP1FilterMode()) {
+ displayPriority("P1");
+ }
+ if (!MylarUiPlugin.getDefault().isP2FilterMode()) {
+ displayPriority("P2");
+ }
+ if (!MylarUiPlugin.getDefault().isP3FilterMode()) {
+ displayPriority("P3");
+ }
+ if (!MylarUiPlugin.getDefault().isP4FilterMode()) {
+ displayPriority("P4");
+ }
+ if (!MylarUiPlugin.getDefault().isP5FilterMode()) {
+ displayPriority("P5");
+ }
+ }
+
+ public void displayPriority(String p) {
+ if (!priorities.contains(p)) {
+ priorities.add(p);
+ }
+ }
+
+ public void hidePriority(String p) {
+ priorities.remove(p);
+ }
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof ITask) {
+ ITask task = (ITask) element;
+ if (priorities.size() == PRIORITY_LEVELS.length) {
+ return true;
+ } else if (task.isCategory()) {
+ return true;
+ } else {
+ for (String filter : priorities) {
+ if (task.getPriority().equals(filter) ||
+ task.hasSubTaskWithPriority(filter)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+ return false;
+ }
+
+ };
+
class TaskListContentProvider implements IStructuredContentProvider, ITreeContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
// don't care if the input changes
@@ -175,20 +394,7 @@ public class TaskListView extends ViewPart {
}
public Object[] getElements(Object parent) {
if (parent.equals(getViewSite())) {
- if (MylarUiPlugin.getDefault().isFilterCompleteMode()) {
- // don't show completed tasks
- if (!MylarUiPlugin.getDefault().isFilterInCompleteMode()) {
- return MylarTasksPlugin.getTaskListManager().getTaskList().getTasksInProgress().toArray();
- }
- } else {
- if (MylarUiPlugin.getDefault().isFilterInCompleteMode()) {
- // show only completed tasks
- return MylarTasksPlugin.getTaskListManager().getTaskList().getCompletedTasks().toArray();
- } else {
- // show all tasks
- return MylarTasksPlugin.getTaskListManager().getTaskList().getRootTasks().toArray();
- }
- }
+ return MylarTasksPlugin.getTaskListManager().getTaskList().getRootTasks().toArray();
}
return getChildren(parent);
}
@@ -199,22 +405,10 @@ public class TaskListView extends ViewPart {
return null;
}
public Object [] getChildren(Object parent) {
- if (parent instanceof ITask) {
- if (MylarUiPlugin.getDefault().isFilterCompleteMode()) {
- if (!MylarUiPlugin.getDefault().isFilterInCompleteMode()) {
- return ((ITask)parent).getSubTasksInProgress().toArray();
- }
- } else {
- if (MylarUiPlugin.getDefault().isFilterInCompleteMode()) {
- // show only completed tasks
- return ((ITask)parent).getCompletedSubTasks().toArray();
- } else {
- // show all tasks
- return ((ITask)parent).getChildren().toArray();
- }
- }
- }
- return new Object[0];
+ if (parent instanceof ITask) {
+ return ((ITask)parent).getChildren().toArray();
+ }
+ return new Object[0];
}
public boolean hasChildren(Object parent) {
if (parent instanceof ITask) {
@@ -295,12 +489,13 @@ public class TaskListView extends ViewPart {
break;
case 3:
task.setLabel(((String) value).trim());
+ MylarTasksPlugin.getTaskListManager().taskPropertyChanged(task, columnNames[3]);
viewer.setSelection(null);
break;
case 4:
break;
}
- viewer.refresh();
+ viewer.refresh(task);
} catch (Exception e) {
MylarPlugin.log(e, e.getMessage());
}
@@ -391,6 +586,7 @@ public class TaskListView extends ViewPart {
sortIndex = 2; // default priority
}
viewer.setSorter(new TaskListTableSorter(columnNames[sortIndex]));
+ viewer.addFilter(priorityFilter);
viewer.refresh();
}
@@ -615,13 +811,18 @@ public class TaskListView extends ViewPart {
manager.add(new Separator());
manager.add(filterCompleteTask);
manager.add(filterInCompleteTask);
+ manager.add(filterOnPriority);
drillDownAdapter.addNavigationActions(manager);
}
+ /**
+ * @see org.eclipse.pde.internal.ui.view.HistoryDropDownAction
+ *
+ */
private void makeActions() {
refresh = new Action() {
-
- @Override
+
+ @Override
public void run() {
// TODO background?
// perform the update in an operation so that we get a progress monitor
@@ -744,7 +945,6 @@ public class TaskListView extends ViewPart {
} else {
MylarTasksPlugin.getTaskListManager().getTaskList().addRootTask(newTask);
}
-// viewer.expandAll();
viewer.refresh();
}
};
@@ -773,7 +973,7 @@ public class TaskListView extends ViewPart {
if (page == null)
return;
try{
- closeBugTaskEditors((ITask)selectedObject, page);
+ closeTaskEditors((ITask)selectedObject, page);
}catch(Exception e){
MylarPlugin.log(e, " deletion failed");
}
@@ -793,7 +993,7 @@ public class TaskListView extends ViewPart {
Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement();
if (selectedObject instanceof Task){
((Task)selectedObject).setCompleted(true);
- viewer.refresh();
+ viewer.refresh(selectedObject);
}
}
};
@@ -808,7 +1008,7 @@ public class TaskListView extends ViewPart {
Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement();
if (selectedObject instanceof Task){
((Task)selectedObject).setCompleted(false);
- viewer.refresh();
+ viewer.refresh(selectedObject);
}
}
};
@@ -830,7 +1030,7 @@ public class TaskListView extends ViewPart {
} else if (selectedObject instanceof Category) {
((Category)selectedObject).setName(newName);
}
- viewer.refresh();
+ viewer.refresh(selectedObject);
}
};
rename.setText("Rename");
@@ -859,7 +1059,7 @@ public class TaskListView extends ViewPart {
if (obj instanceof ITask) {
((ITask)obj).openTaskInEditor();
}
- viewer.refresh();
+ viewer.refresh(obj);
}
};
@@ -867,6 +1067,13 @@ public class TaskListView extends ViewPart {
@Override
public void run() {
MylarUiPlugin.getDefault().setFilterCompleteMode(isChecked());
+ if (isChecked()) {
+ viewer.addFilter(completeFilter);
+ filterInCompleteTask.setChecked(false);
+ viewer.removeFilter(inCompleteFilter);
+ } else {
+ viewer.removeFilter(completeFilter);
+ }
viewer.refresh();
}
};
@@ -879,6 +1086,13 @@ public class TaskListView extends ViewPart {
@Override
public void run() {
MylarUiPlugin.getDefault().setFilterInCompleteMode(isChecked());
+ if (isChecked()) {
+ viewer.addFilter(inCompleteFilter);
+ filterCompleteTask.setChecked(false);
+ viewer.removeFilter(completeFilter);
+ } else {
+ viewer.removeFilter(inCompleteFilter);
+ }
viewer.refresh();
}
};
@@ -886,6 +1100,9 @@ public class TaskListView extends ViewPart {
filterInCompleteTask.setToolTipText("Filter Incomplete tasks");
filterInCompleteTask.setImageDescriptor(MylarImages.TASK_INACTIVE);
filterInCompleteTask.setChecked(MylarUiPlugin.getDefault().isFilterInCompleteMode());
+
+
+ filterOnPriority = new PriorityDropDownAction();
}
/**
@@ -918,19 +1135,25 @@ public class TaskListView extends ViewPart {
return false;
}
- protected void closeBugTaskEditors(ITask task, IWorkbenchPage page) throws LoginException, IOException{
+ protected void closeTaskEditors(ITask task, IWorkbenchPage page) throws LoginException, IOException{
+ IEditorInput input = null;
if (task instanceof BugzillaTask) {
- IEditorInput input = new BugzillaTaskEditorInput((BugzillaTask)task);
- IEditorPart bugEditor = page.findEditor(input);
-
- if (bugEditor != null) {
- page.closeEditor(bugEditor, false);
- }
+ input = new BugzillaTaskEditorInput((BugzillaTask)task);
+ } else if (task instanceof Task) {
+ input = new TaskEditorInput((Task) task);
}
+ IEditorPart editor = page.findEditor(input);
+
+ if (editor != null) {
+ page.closeEditor(editor, false);
+ }
+
List<ITask> children = task.getChildren();
- if (children == null) return;
- for (ITask child : children) closeBugTaskEditors(child, page);
+ if (children == null)
+ return;
+ for (ITask child : children)
+ closeTaskEditors(child, page);
}
protected void refreshChildren(List<ITask> children) {
@@ -998,13 +1221,31 @@ public class TaskListView extends ViewPart {
}
}
- public void notifyTaskDataChanged() {
- if (viewer.getTree() != null && !viewer.getTree().isDisposed()) viewer.refresh();
+ public void notifyTaskDataChanged(ITask task) {
+ if (viewer.getTree() != null && !viewer.getTree().isDisposed()) {
+ viewer.refresh(task);
+ }
}
public static TaskListView getDefault() {
return INSTANCE;
- }
+ }
+
+ public TreeViewer getViewer() {
+ return viewer;
+ }
+
+ public ViewerFilter getCompleteFilter() {
+ return completeFilter;
+ }
+
+ public ViewerFilter getInCompleteFilter() {
+ return inCompleteFilter;
+ }
+
+ public PriorityFilter getPriorityFilter() {
+ return priorityFilter;
+ }
}
//TextTransfer textTransfer = TextTransfer.getInstance();

Back to the top