Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkersten2007-09-20 19:16:28 +0000
committermkersten2007-09-20 19:16:28 +0000
commitaf0257c0840ace6e56aaf32e198d650065704afd (patch)
treee53e2f934fa3530c9afe85339edebe0de95b1c52
parent64ad8967e1d6889867fe2dee70e0188ed4b496c3 (diff)
downloadorg.eclipse.mylyn.tasks-af0257c0840ace6e56aaf32e198d650065704afd.tar.gz
org.eclipse.mylyn.tasks-af0257c0840ace6e56aaf32e198d650065704afd.tar.xz
org.eclipse.mylyn.tasks-af0257c0840ace6e56aaf32e198d650065704afd.zip
RESOLVED - bug 197355: Duplicated "Activate Context" Button
https://bugs.eclipse.org/bugs/show_bug.cgi?id=197355
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java1
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivationActionTest.java43
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java5
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleTaskActivationAction.java91
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java66
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java56
6 files changed, 179 insertions, 83 deletions
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java
index c9b222b24..40592241c 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java
@@ -20,6 +20,7 @@ public class AllTasksTests {
TestSuite suite = new TestSuite("Test for org.eclipse.mylyn.tasks.tests");
// $JUnit-BEGIN$
+ suite.addTestSuite(TaskActivationActionTest.class);
suite.addTestSuite(TaskListPresentationTest.class);
suite.addTestSuite(TaskRepositoryTest.class);
suite.addTestSuite(TaskRepositorySorterTest.class);
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivationActionTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivationActionTest.java
new file mode 100644
index 000000000..6bb1a79c4
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskActivationActionTest.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.tasks.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.mylyn.internal.tasks.ui.actions.ToggleTaskActivationAction;
+import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryTask;
+import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
+
+/**
+ * @author Mik Kersten
+ */
+public class TaskActivationActionTest extends TestCase {
+
+ public void testUpdateOnExternalActivation() {
+ MockRepositoryTask task = new MockRepositoryTask("test:activation");
+ ToggleTaskActivationAction action = new ToggleTaskActivationAction(task, new ToolBarManager());
+ assertFalse(action.isChecked());
+
+ TasksUiPlugin.getTaskListManager().activateTask(task);
+ assertTrue(action.isChecked());
+
+ TasksUiPlugin.getTaskListManager().deactivateTask(task);
+ assertFalse(action.isChecked());
+
+ action.dispose();
+
+ TasksUiPlugin.getTaskListManager().activateTask(task);
+ assertFalse(action.isChecked());
+
+ TasksUiPlugin.getTaskListManager().deactivateTask(task);
+ assertFalse(action.isChecked());
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java
index 6869df079..d441a8ec1 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskActivateAction.java
@@ -43,9 +43,6 @@ public class TaskActivateAction extends Action implements IViewActionDelegate {
public void run(AbstractTask task) {
if (task != null && !task.isActive()) {
TasksUiPlugin.getTaskListManager().activateTask(task);
- if (TaskListView.getFromActivePerspective() != null) {
- TaskListView.getFromActivePerspective().refreshAndFocus(false);
- }
}
}
@@ -54,6 +51,6 @@ public class TaskActivateAction extends Action implements IViewActionDelegate {
}
public void selectionChanged(IAction action, ISelection selection) {
- // TODO Auto-generated method stub
+ // ignore
}
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleTaskActivationAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleTaskActivationAction.java
new file mode 100644
index 000000000..6e8ccdbeb
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleTaskActivationAction.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.mylyn.internal.tasks.core.ScheduledTaskContainer;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages;
+import org.eclipse.mylyn.tasks.core.AbstractTask;
+import org.eclipse.mylyn.tasks.core.ITaskActivityListener;
+import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
+
+/**
+ * @author Mik Kersten
+ */
+public class ToggleTaskActivationAction extends Action implements ITaskActivityListener {
+
+ public static final String ID = "org.eclipse.mylyn.tasks.ui.actions.task.activation.toggle";
+
+ private static final String LABEL_ACTIVATE = "Activate Task";
+
+ private static final String LABEL_DEACTIVATE = "Deactivate Task";
+
+ private AbstractTask task;
+
+ private IToolBarManager toolBarManager;
+
+ /**
+ * @param task cannot be null
+ * @param toolBarManager cannot be null
+ */
+ public ToggleTaskActivationAction(AbstractTask task, IToolBarManager toolBarManager) {
+ this.task = task;
+ this.toolBarManager = toolBarManager;
+ setId(ID);
+ setImageDescriptor(TasksUiImages.TASK_ACTIVE_CENTERED);
+ update();
+ TasksUiPlugin.getTaskListManager().addActivityListener(this);
+ }
+
+ public void dispose() {
+ TasksUiPlugin.getTaskListManager().removeActivityListener(this);
+ }
+
+ private void update() {
+ setChecked(task.isActive());
+ if (task.isActive()) {
+ setText(LABEL_DEACTIVATE);
+ setToolTipText(LABEL_DEACTIVATE);
+ } else {
+ setText(LABEL_ACTIVATE);
+ setToolTipText(LABEL_ACTIVATE);
+ }
+ }
+
+ @Override
+ public void run() {
+ if (!task.isActive()) {
+ TasksUiPlugin.getTaskListManager().activateTask(task);
+ } else {
+ TasksUiPlugin.getTaskListManager().deactivateTask(task);
+ }
+ update();
+// toolBarManager.add(this);
+ }
+
+ public void activityChanged(ScheduledTaskContainer week) {
+ // ignore
+ }
+
+ public void taskActivated(AbstractTask task) {
+ update();
+ toolBarManager.update(true);
+ }
+
+ public void taskDeactivated(AbstractTask task) {
+ update();
+ toolBarManager.update(true);
+ }
+
+ public void taskListRead() {
+ // ignore
+
+ }
+}
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
index e8dbf7a33..ec2f9d2e9 100644
--- 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
@@ -371,6 +371,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener {
private boolean gradientListenerAdded = false;
private final ITaskActivityListener TASK_ACTIVITY_LISTENER = new ITaskActivityListener() {
+
public void taskActivated(final AbstractTask task) {
if (task != null) {
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
@@ -378,6 +379,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener {
updateDescription(task);
selectedAndFocusTask(task);
filteredTree.indicateActiveTask(task);
+ refreshAndFocus(false);
}
});
}
@@ -386,7 +388,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener {
public void taskDeactivated(final AbstractTask task) {
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
public void run() {
- refresh(task);
+ refreshTask(new TaskContainerDelta(task, TaskContainerDelta.Kind.CHANGED));
updateDescription(null);
filteredTree.indicateNoActiveTask();
}
@@ -423,35 +425,7 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener {
refresh(null);
} else {
if (taskContainerDelta.getContainer() instanceof AbstractTask) {
- AbstractTask task = (AbstractTask) taskContainerDelta.getContainer();
- switch (taskContainerDelta.getKind()) {
- case ROOT:
- refresh(null);
- break;
- case ADDED:
- refresh(null);
- break;
- case REMOVED:
- refresh(null);
- break;
- default:
- // TODO: move logic into deltas
- refresh(task);
- Set<AbstractTaskContainer> containers = new HashSet<AbstractTaskContainer>(
- TasksUiPlugin.getTaskListManager().getTaskList().getQueriesForHandle(
- task.getHandleIdentifier()));
- containers.addAll(task.getParentContainers());
- containers.add(TasksUiPlugin.getTaskListManager()
- .getTaskList()
- .getArchiveContainer());
- containers.add(TasksUiPlugin.getTaskListManager()
- .getTaskList()
- .getDefaultCategory());
- for (AbstractTaskContainer container : containers) {
- refresh(container);
- }
- break;
- }
+ refreshTask(taskContainerDelta);
} else { // category or query
switch (taskContainerDelta.getKind()) {
case ROOT:
@@ -1650,6 +1624,38 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener {
}
}
+ private void refreshTask(TaskContainerDelta taskContainerDelta) {
+ AbstractTask task = (AbstractTask) taskContainerDelta.getContainer();
+ switch (taskContainerDelta.getKind()) {
+ case ROOT:
+ refresh(null);
+ break;
+ case ADDED:
+ refresh(null);
+ break;
+ case REMOVED:
+ refresh(null);
+ break;
+ default:
+ // TODO: move logic into deltas
+ refresh(task);
+ Set<AbstractTaskContainer> containers = new HashSet<AbstractTaskContainer>(
+ TasksUiPlugin.getTaskListManager().getTaskList().getQueriesForHandle(
+ task.getHandleIdentifier()));
+ containers.addAll(task.getParentContainers());
+ containers.add(TasksUiPlugin.getTaskListManager()
+ .getTaskList()
+ .getArchiveContainer());
+ containers.add(TasksUiPlugin.getTaskListManager()
+ .getTaskList()
+ .getDefaultCategory());
+ for (AbstractTaskContainer container : containers) {
+ refresh(container);
+ }
+ break;
+ }
+ }
+
public static Set<IWorkingSet> getActiveWorkingSets() {
if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) {
Set<IWorkingSet> allSets = new HashSet<IWorkingSet>(Arrays.asList(PlatformUI.getWorkbench()
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java
index 817a09058..5ad4bc7dc 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java
@@ -77,8 +77,7 @@ import org.eclipse.mylyn.internal.tasks.ui.actions.AttachFileAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.CopyAttachmentToClipboardJob;
import org.eclipse.mylyn.internal.tasks.ui.actions.DownloadAttachmentJob;
import org.eclipse.mylyn.internal.tasks.ui.actions.SynchronizeEditorAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.TaskActivateAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.TaskDeactivateAction;
+import org.eclipse.mylyn.internal.tasks.ui.actions.ToggleTaskActivationAction;
import org.eclipse.mylyn.internal.tasks.ui.editors.AttachmentTableLabelProvider;
import org.eclipse.mylyn.internal.tasks.ui.editors.AttachmentsTableContentProvider;
import org.eclipse.mylyn.internal.tasks.ui.editors.ContentOutlineTools;
@@ -442,7 +441,7 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
private SynchronizeEditorAction synchronizeEditorAction;
- private Action activateAction;
+ private ToggleTaskActivationAction activateAction;
private Action historyAction;
@@ -577,34 +576,7 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
}
}
- // private void setFormHeaderLabel() {
- //
- // AbstractRepositoryConnectorUi connectorUi =
- // TasksUiPlugin.getRepositoryUi(repository.getKind());
- // kindLabel = "";
- // if (connectorUi != null) {
- // kindLabel = connectorUi.getTaskKindLabel(repositoryTask);
- // }
- //
- // String idLabel = "";
- //
- // if (repositoryTask != null) {
- // idLabel = repositoryTask.getTaskKey();
- // } else if (taskData != null) {
- // idLabel = taskData.getId();
- // }
- //
- // if (taskData != null && taskData.isNew()) {
- // form.setText("New " + kindLabel);
- // } else if (idLabel != null) {
- // form.setText(kindLabel + " " + idLabel);
- // } else {
- // form.setText(kindLabel);
- // }
- // }
-
- // synchronizing to investigate possible resolution to bug#197355
- private synchronized void addHeaderControls() {
+ private void addHeaderControls() {
ControlContribution repositoryLabelControl = new ControlContribution("Title") { //$NON-NLS-1$
protected Control createControl(Composite parent) {
Composite composite = toolkit.createComposite(parent);
@@ -636,28 +608,14 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
// TODO: Remove? Added to debug bug#197355
toolBarManager.removeAll();
+ toolBarManager.update(true);
toolBarManager.add(repositoryLabelControl);
fillToolBar(parentEditor.getTopForm().getToolBarManager());
if (repositoryTask != null && taskData != null && !taskData.isNew()) {
- activateAction = new Action() {
- @Override
- public void run() {
- if (!repositoryTask.isActive()) {
- setChecked(true);
- new TaskActivateAction().run(repositoryTask);
- } else {
- setChecked(false);
- new TaskDeactivateAction().run(repositoryTask);
- }
- }
-
- };
- activateAction.setImageDescriptor(TasksUiImages.TASK_ACTIVE_CENTERED);
- activateAction.setToolTipText("Activate/Deactivate Task");
- activateAction.setChecked(repositoryTask.isActive());
- toolBarManager.add(new Separator("activation"));
+ activateAction = new ToggleTaskActivationAction(repositoryTask, toolBarManager);
+ toolBarManager.add(new Separator("activation"));
toolBarManager.add(activateAction);
}
@@ -2621,7 +2579,7 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
// TasksUiPlugin.getSynchronizationManager().discardOutgoing(repositoryTask);
// repositoryTask.setDirty(false);
// }
-
+ activateAction.dispose();
super.dispose();
}

Back to the top