diff options
author | mkersten | 2007-09-20 19:16:28 +0000 |
---|---|---|
committer | mkersten | 2007-09-20 19:16:28 +0000 |
commit | af0257c0840ace6e56aaf32e198d650065704afd (patch) | |
tree | e53e2f934fa3530c9afe85339edebe0de95b1c52 | |
parent | 64ad8967e1d6889867fe2dee70e0188ed4b496c3 (diff) | |
download | org.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
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(); } |