Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2009-10-08 04:25:11 +0000
committerspingel2009-10-08 04:25:11 +0000
commitb519c6a858285197e243af70284eab5e95c363c7 (patch)
treef024ceddfa9e4381aace5e2954f2cda58e10fea5
parent6dd9d957b53668dcd8dd4828e97e49b52a2cd596 (diff)
downloadorg.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
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/ScheduleTaskMenuContributor.java9
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskEditorScheduleAction.java42
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java14
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();

Back to the top