diff options
author | spingel | 2009-10-08 04:25:11 +0000 |
---|---|---|
committer | spingel | 2009-10-08 04:25:11 +0000 |
commit | b519c6a858285197e243af70284eab5e95c363c7 (patch) | |
tree | f024ceddfa9e4381aace5e2954f2cda58e10fea5 | |
parent | 6dd9d957b53668dcd8dd4828e97e49b52a2cd596 (diff) | |
download | org.eclipse.mylyn.tasks-b519c6a858285197e243af70284eab5e95c363c7.tar.gz org.eclipse.mylyn.tasks-b519c6a858285197e243af70284eab5e95c363c7.tar.xz org.eclipse.mylyn.tasks-b519c6a858285197e243af70284eab5e95c363c7.zip |
RESOLVED - bug 284511: make the schedule button reflect the schedule state
https://bugs.eclipse.org/bugs/show_bug.cgi?id=284511
3 files changed, 51 insertions, 14 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduleTaskMenuContributor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduleTaskMenuContributor.java index 7e02bd152..1c065b47f 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduleTaskMenuContributor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduleTaskMenuContributor.java @@ -27,7 +27,6 @@ import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.DateRange; import org.eclipse.mylyn.internal.tasks.core.TaskActivityUtil; import org.eclipse.mylyn.internal.tasks.core.WeekDateRange; -import org.eclipse.mylyn.internal.tasks.ui.actions.TaskEditorScheduleAction; import org.eclipse.mylyn.tasks.core.IRepositoryElement; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.ui.PlatformUI; @@ -40,8 +39,6 @@ public class ScheduleTaskMenuContributor implements IDynamicSubMenuContributor { private AbstractTask singleTaskSelection; - private TaskEditorScheduleAction scheduleAction; - private final List<IRepositoryElement> taskListElementsToSchedule = new ArrayList<IRepositoryElement>(); public MenuManager getSubMenuManager(final List<IRepositoryElement> selectedElements) { @@ -261,9 +258,6 @@ public class ScheduleTaskMenuContributor implements IDynamicSubMenuContributor { } else { TasksUiPlugin.getTaskActivityManager().setScheduledFor(task, null); } - if (scheduleAction != null && singleTaskSelection != null) { - scheduleAction.updateImageDescriptor(singleTaskSelection); - } } } } @@ -279,7 +273,4 @@ public class ScheduleTaskMenuContributor implements IDynamicSubMenuContributor { return TasksUiPlugin.getTaskActivityManager().isPastReminder(task); } - public void setScheduleAction(TaskEditorScheduleAction scheduleAction) { - this.scheduleAction = scheduleAction; - } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskEditorScheduleAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskEditorScheduleAction.java index 581433661..be5d29a66 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskEditorScheduleAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskEditorScheduleAction.java @@ -12,22 +12,32 @@ package org.eclipse.mylyn.internal.tasks.ui.actions; import java.util.Collections; +import java.util.Set; +import org.eclipse.core.runtime.Assert; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.action.MenuManager; import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; +import org.eclipse.mylyn.internal.tasks.core.ITaskListChangeListener; import org.eclipse.mylyn.internal.tasks.core.TaskActivityUtil; +import org.eclipse.mylyn.internal.tasks.core.TaskContainerDelta; import org.eclipse.mylyn.internal.tasks.ui.ScheduleTaskMenuContributor; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; +import org.eclipse.mylyn.internal.tasks.ui.editors.TaskListChangeAdapter; import org.eclipse.mylyn.tasks.core.IRepositoryElement; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.PlatformUI; /** + * <p> + * <b>Note:</b> this action must be disposed. + * * @author Mik Kersten + * @author Steffen Pingel */ public class TaskEditorScheduleAction extends Action implements IMenuCreator { @@ -37,12 +47,35 @@ public class TaskEditorScheduleAction extends Action implements IMenuCreator { private final ScheduleTaskMenuContributor scheduleMenuContributor = new ScheduleTaskMenuContributor(); + private final ITaskListChangeListener TASK_LIST_LISTENER = new TaskListChangeAdapter() { + + @Override + public void containersChanged(Set<TaskContainerDelta> containers) { + for (TaskContainerDelta taskContainerDelta : containers) { + if (taskContainerDelta.getElement() instanceof ITask) { + final AbstractTask updateTask = (AbstractTask) taskContainerDelta.getElement(); + if (task.equals(updateTask)) { + if (PlatformUI.getWorkbench() != null && !PlatformUI.getWorkbench().isClosing()) { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + updateImageDescriptor(); + } + }); + } + } + } + } + } + + }; + public TaskEditorScheduleAction(ITask task) { + Assert.isNotNull(task); this.task = task; - updateImageDescriptor(task); + updateImageDescriptor(); setMenuCreator(this); setToolTipText(Messages.TaskEditorScheduleAction_Private_Scheduling); - scheduleMenuContributor.setScheduleAction(this); + TasksUiPlugin.getTaskList().addChangeListener(TASK_LIST_LISTENER); } @Override @@ -53,15 +86,15 @@ public class TaskEditorScheduleAction extends Action implements IMenuCreator { } else { TasksUiPlugin.getTaskActivityManager().setScheduledFor((AbstractTask) task, null); } - updateImageDescriptor(task); } - public void updateImageDescriptor(ITask task) { + public void updateImageDescriptor() { if (task instanceof AbstractTask && ((AbstractTask) task).getScheduledForDate() != null) { setImageDescriptor(CommonImages.SCHEDULE_DAY); } else { setImageDescriptor(CommonImages.SCHEDULE); } + setEnabled(!task.isCompleted()); } public Menu getMenu(Control parent) { @@ -84,6 +117,7 @@ public class TaskEditorScheduleAction extends Action implements IMenuCreator { if (menuManager != null) { menuManager.dispose(); } + TasksUiPlugin.getTaskList().removeChangeListener(TASK_LIST_LISTENER); } }
\ No newline at end of file diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java index 6d6ea1869..0887bf53b 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java @@ -180,6 +180,8 @@ public class TaskEditor extends SharedHeaderFormEditor { private CommonTextSupport textSupport; + private TaskEditorScheduleAction scheduleAction; + private static boolean toolBarFailureLogged; public TaskEditor() { @@ -480,6 +482,7 @@ public class TaskEditor extends SharedHeaderFormEditor { @Override public void dispose() { + disposeScheduleAction(); if (headerImage != null) { headerImage.dispose(); } @@ -950,7 +953,9 @@ public class TaskEditor extends SharedHeaderFormEditor { } toolBarManager.add(new Separator("planning")); //$NON-NLS-1$ - toolBarManager.add(new TaskEditorScheduleAction(task)); + disposeScheduleAction(); + scheduleAction = new TaskEditorScheduleAction(task); + toolBarManager.add(scheduleAction); toolBarManager.add(new GroupMarker("page")); //$NON-NLS-1$ for (IFormPage page : getPages()) { @@ -1009,6 +1014,13 @@ public class TaskEditor extends SharedHeaderFormEditor { updateHeader(); } + private void disposeScheduleAction() { + if (scheduleAction != null) { + scheduleAction.dispose(); + scheduleAction = null; + } + } + private void updateLeftHeaderToolBar() { leftToolBarManager.removeAll(); |