diff options
author | sminto | 2005-07-21 18:51:14 +0000 |
---|---|---|
committer | sminto | 2005-07-21 18:51:14 +0000 |
commit | 7df845e2d3ea6ca7c7421c2680425910c9904944 (patch) | |
tree | 666a46b160991bee7849645435aebffd55ac3609 | |
parent | 5f5e4360bfbdea9d0ee80bca960819bab78eb1b5 (diff) | |
download | org.eclipse.mylyn.tasks-7df845e2d3ea6ca7c7421c2680425910c9904944.tar.gz org.eclipse.mylyn.tasks-7df845e2d3ea6ca7c7421c2680425910c9904944.tar.xz org.eclipse.mylyn.tasks-7df845e2d3ea6ca7c7421c2680425910c9904944.zip |
fixed Bug #103881: Context menu actions are enabled for all elements
3 files changed, 90 insertions, 65 deletions
diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/bugzilla/ui/tasks/BugzillaTaskHandler.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/bugzilla/ui/tasks/BugzillaTaskHandler.java index 09b29387a..a3240e185 100644 --- a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/bugzilla/ui/tasks/BugzillaTaskHandler.java +++ b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/bugzilla/ui/tasks/BugzillaTaskHandler.java @@ -14,6 +14,7 @@ package org.eclipse.mylar.bugzilla.ui.tasks; import java.util.ArrayList; import java.util.List; +import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.mylar.bugzilla.core.BugzillaPlugin; @@ -29,6 +30,7 @@ import org.eclipse.mylar.tasks.ITaskHandler; import org.eclipse.mylar.tasks.ITaskListElement; import org.eclipse.mylar.tasks.MylarTasksPlugin; import org.eclipse.mylar.tasks.internal.TaskCategory; +import org.eclipse.mylar.tasks.ui.actions.DeleteAction; import org.eclipse.mylar.tasks.ui.views.TaskListView; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; @@ -187,5 +189,21 @@ public class BugzillaTaskHandler implements ITaskHandler { refresh.run(); refresh.setShowProgress(true); } + } + + public boolean enableAction(Action action, ITaskListElement element) { + + if(element instanceof BugzillaHit){ + return false; + } else if(element instanceof BugzillaTask){ + if(action instanceof DeleteAction){ + return true; + } else { + return false; + } + } else if(element instanceof BugzillaQueryCategory){ + return false; + } + return false; } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ITaskHandler.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ITaskHandler.java index bf613e5e0..879f64c3a 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ITaskHandler.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ITaskHandler.java @@ -1,5 +1,6 @@ package org.eclipse.mylar.tasks; +import org.eclipse.jface.action.Action; import org.eclipse.mylar.tasks.internal.TaskCategory; import org.eclipse.mylar.tasks.ui.views.TaskListView; import org.eclipse.ui.IWorkbenchPage; @@ -22,4 +23,6 @@ public interface ITaskHandler { public abstract ITask taskAdded(ITask newTask); public abstract void restoreState(TaskListView taskListView); + + public abstract boolean enableAction(Action action, ITaskListElement element); }
\ No newline at end of file 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 c3c844966..dd790e9df 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 @@ -917,78 +917,82 @@ public class TaskListView extends ViewPart { } void fillContextMenu(IMenuManager manager) { - manager.add(completeTask); - manager.add(incompleteTask); - manager.add(delete); - manager.add(new Separator()); - manager.add(createTask); - manager.add(new Separator("mylar")); - + ITaskListElement element = null;; final Object selectedObject = ((IStructuredSelection)viewer.getSelection()).getFirstElement(); if (selectedObject instanceof ITaskListElement) { - - for (ITaskListDynamicSubMenuContributor contributor : MylarTasksPlugin.getDefault().getDynamicMenuContributers()) { - manager.add(new Separator()); - MenuManager subMenuManager = contributor.getSubMenuManager(this, (ITaskListElement)selectedObject); - if (subMenuManager != null) manager.add(subMenuManager); - } + element = (ITaskListElement) selectedObject; } + + addAction(completeTask, manager, element); + addAction(incompleteTask, manager, element); + addAction(delete, manager, element); + manager.add(new Separator()); + addAction(createTask, manager, element); + manager.add(new Separator("mylar")); + + for (ITaskListDynamicSubMenuContributor contributor : MylarTasksPlugin.getDefault().getDynamicMenuContributers()) { + manager.add(new Separator()); + MenuManager subMenuManager = contributor.getSubMenuManager(this, (ITaskListElement)selectedObject); + if (subMenuManager != null) addMenuManager(subMenuManager, manager, element); + } + manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - updateActionEnablement(selectedObject); } - private void updateActionEnablement(Object sel) { -// XXX use enables for part of contribution -// if(sel != null && sel instanceof ITaskListElement){ -// if(sel instanceof BugzillaHit){ -// BugzillaTask task = ((BugzillaHit)sel).getAssociatedTask(); -// if(task == null){ -// clearSelectedTaskscapeAction.setEnabled(false); -// } else { -// clearSelectedTaskscapeAction.setEnabled(true); -// } -// completeTask.setEnabled(false); -// incompleteTask.setEnabled(false); -// moveTaskToRoot.setEnabled(false); -// delete.setEnabled(false); -// refreshQuery.setEnabled(false); -// } else if(sel instanceof BugzillaTask){ -// clearSelectedTaskscapeAction.setEnabled(true); -// completeTask.setEnabled(false); -// incompleteTask.setEnabled(false); -// moveTaskToRoot.setEnabled(true); -// delete.setEnabled(true); -// refreshQuery.setEnabled(false); -// } else if(sel instanceof AbstractCategory){ -// clearSelectedTaskscapeAction.setEnabled(false); -// completeTask.setEnabled(false); -// incompleteTask.setEnabled(false); -// moveTaskToRoot.setEnabled(false); -// delete.setEnabled(true); -// if (sel instanceof BugzillaQueryCategory) { -// refreshQuery.setEnabled(true); -// } else { -// refreshQuery.setEnabled(false); -// } -// //delete.setEnabled(true); -// } else { -// clearSelectedTaskscapeAction.setEnabled(true); -// completeTask.setEnabled(true); -// incompleteTask.setEnabled(true); -// moveTaskToRoot.setEnabled(true); -// delete.setEnabled(true); -// refreshQuery.setEnabled(false); -// } -// } else { -// clearSelectedTaskscapeAction.setEnabled(false); -// completeTask.setEnabled(false); -// incompleteTask.setEnabled(false); -// moveTaskToRoot.setEnabled(false); -// delete.setEnabled(false); -// refreshQuery.setEnabled(false); -// } + private void addMenuManager(IMenuManager menuToAdd, IMenuManager manager, ITaskListElement element) { + if(element != null && element instanceof ITask){ + manager.add(menuToAdd); + } } - + + + private void addAction(Action action, IMenuManager manager, ITaskListElement element) { + manager.add(action); + if(element != null){ + ITaskHandler handler = MylarTasksPlugin.getDefault().getTaskHandlerForElement(element); + if(handler != null){ + action.setEnabled(handler.enableAction(action, element)); + } else { + updateActionEnablement(action, element); + } + } + } + + private void updateActionEnablement(Action action, ITaskListElement element){ + + if(element instanceof Task){ + if(action instanceof MarkTaskCompleteAction){ + if(element.isCompleted()){ + action.setEnabled(false); + } else { + action.setEnabled(true); + } + } else if(action instanceof MarkTaskIncompleteAction){ + if(element.isCompleted()){ + action.setEnabled(true); + } else { + action.setEnabled(false); + } + } else if(action instanceof DeleteAction){ + action.setEnabled(true); + } else if(action instanceof CreateTaskAction){ + action.setEnabled(false); + } + } else if(element instanceof TaskCategory) { + if(action instanceof MarkTaskCompleteAction){ + action.setEnabled(false); + } else if(action instanceof MarkTaskIncompleteAction){ + action.setEnabled(false); + } else if(action instanceof DeleteAction){ + action.setEnabled(true); + } else if(action instanceof CreateTaskAction){ + action.setEnabled(true); + } + } else { + action.setEnabled(true); + } + } + /** * @see org.eclipse.pde.internal.ui.view.HistoryDropDownAction * |