diff options
author | spingel | 2009-09-18 02:17:32 +0000 |
---|---|---|
committer | spingel | 2009-09-18 02:17:32 +0000 |
commit | d3a1bd02743ae16dd0f14cf057828350d812731a (patch) | |
tree | 86c62844634e509cc5d292a45db01b58390fcc02 | |
parent | 3f0ba86951e1881f5fdf7656ca660bdd19278499 (diff) | |
download | org.eclipse.mylyn.tasks-d3a1bd02743ae16dd0f14cf057828350d812731a.tar.gz org.eclipse.mylyn.tasks-d3a1bd02743ae16dd0f14cf057828350d812731a.tar.xz org.eclipse.mylyn.tasks-d3a1bd02743ae16dd0f14cf057828350d812731a.zip |
RESOLVED - bug 169083: Context menu items should not be enabled if there is no task selected
https://bugs.eclipse.org/bugs/show_bug.cgi?id=169083
4 files changed, 107 insertions, 79 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/plugin.xml b/org.eclipse.mylyn.tasks.ui/plugin.xml index 8a3d7aecc..bf2cafae2 100644 --- a/org.eclipse.mylyn.tasks.ui/plugin.xml +++ b/org.eclipse.mylyn.tasks.ui/plugin.xml @@ -345,24 +345,11 @@ menubarPath="repository" tooltip="%SynchronizeSelectedAction.tooltip"> <enablement> - <and> <not> <objectClass name="org.eclipse.mylyn.internal.tasks.core.LocalTask"> </objectClass> </not> - <or> - <objectClass - name="org.eclipse.mylyn.internal.tasks.core.RepositoryQuery"> - </objectClass> - <objectClass - name="org.eclipse.mylyn.internal.tasks.core.AbstractTask"> - </objectClass> - <objectClass - name="org.eclipse.mylyn.internal.tasks.core.AbstractTaskContainer"> - </objectClass> - </or> - </and> </enablement> </action> @@ -1055,6 +1042,12 @@ values="org.eclipse.mylyn.internal.tasks.ui.commands.TaskRepositoryParameterValues"> </commandParameter> </command> + <command + categoryId="org.eclipse.mylyn.tasks.ui.commands" + defaultHandler="org.eclipse.mylyn.internal.tasks.ui.commands.SynchronizeAllHandler" + id="org.eclipse.mylyn.tasks.ui.command.SynchronizeAll" + name="%SynchronizeAllAction.label"> + </command> </extension> <extension point="org.eclipse.mylyn.tasks.ui.projectLinkProviders"> diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java index 523af5895..4ee38b0ec 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java @@ -212,7 +212,7 @@ public class RepositoryElementActionGroup { copyDetailsSubMenu.add(copyDetailsAction); manager.appendToGroup(ID_SEPARATOR_EDIT, copyDetailsSubMenu); } - if (isInTaskList()) { + if (isInTaskList() && !selection.isEmpty()) { manager.appendToGroup(ID_SEPARATOR_EDIT, deleteAction); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java index 7e35e8435..407e3bd58 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/SynchronizeSelectedAction.java @@ -46,89 +46,95 @@ import org.eclipse.ui.actions.ActionFactory; */ public class SynchronizeSelectedAction extends ActionDelegate implements IViewActionDelegate { - private final Map<AbstractRepositoryConnector, List<RepositoryQuery>> queriesToSyncMap = new LinkedHashMap<AbstractRepositoryConnector, List<RepositoryQuery>>(); - - private final Map<AbstractRepositoryConnector, List<ITask>> tasksToSyncMap = new LinkedHashMap<AbstractRepositoryConnector, List<ITask>>(); - @Override public void run(IAction action) { + TaskListView taskListView = TaskListView.getFromActivePerspective(); + if (taskListView != null) { + ISelection selection = taskListView.getViewer().getSelection(); + if (selection.isEmpty()) { + TasksUiInternal.synchronizeAllRepositories(true); + } else if (selection instanceof IStructuredSelection) { + synchronizeSelected((IStructuredSelection) selection); + } + } + } - if (TaskListView.getFromActivePerspective() != null) { - - ISelection selection = TaskListView.getFromActivePerspective().getViewer().getSelection(); - for (Object obj : ((IStructuredSelection) selection).toList()) { - if (obj instanceof IRepositoryQuery) { - final RepositoryQuery repositoryQuery = (RepositoryQuery) obj; - AbstractRepositoryConnector client = TasksUi.getRepositoryManager().getRepositoryConnector( - repositoryQuery.getConnectorKind()); - if (client != null) { - List<RepositoryQuery> queriesToSync = queriesToSyncMap.get(client); - if (queriesToSync == null) { - queriesToSync = new ArrayList<RepositoryQuery>(); - queriesToSyncMap.put(client, queriesToSync); - } - queriesToSync.add(repositoryQuery); + private void synchronizeSelected(IStructuredSelection selection) { + Map<AbstractRepositoryConnector, List<RepositoryQuery>> queriesToSyncMap = new LinkedHashMap<AbstractRepositoryConnector, List<RepositoryQuery>>(); + Map<AbstractRepositoryConnector, List<ITask>> tasksToSyncMap = new LinkedHashMap<AbstractRepositoryConnector, List<ITask>>(); + + // collect queries and tasks + for (Object obj : selection.toList()) { + if (obj instanceof IRepositoryQuery) { + final RepositoryQuery repositoryQuery = (RepositoryQuery) obj; + AbstractRepositoryConnector client = TasksUi.getRepositoryManager().getRepositoryConnector( + repositoryQuery.getConnectorKind()); + if (client != null) { + List<RepositoryQuery> queriesToSync = queriesToSyncMap.get(client); + if (queriesToSync == null) { + queriesToSync = new ArrayList<RepositoryQuery>(); + queriesToSyncMap.put(client, queriesToSync); } - } else if (obj instanceof TaskCategory) { - TaskCategory cat = (TaskCategory) obj; - for (ITask task : cat.getChildren()) { - AbstractRepositoryConnector client = TasksUi.getRepositoryManager().getRepositoryConnector( - task.getConnectorKind()); - addTaskToSync(client, task); - } - } else if (obj instanceof ITask) { - AbstractTask repositoryTask = (AbstractTask) obj; + queriesToSync.add(repositoryQuery); + } + } else if (obj instanceof TaskCategory) { + TaskCategory cat = (TaskCategory) obj; + for (ITask task : cat.getChildren()) { AbstractRepositoryConnector client = TasksUi.getRepositoryManager().getRepositoryConnector( - repositoryTask.getConnectorKind()); - addTaskToSync(client, repositoryTask); + task.getConnectorKind()); + addTaskToSync(client, task, tasksToSyncMap); } + } else if (obj instanceof ITask) { + AbstractTask repositoryTask = (AbstractTask) obj; + AbstractRepositoryConnector client = TasksUi.getRepositoryManager().getRepositoryConnector( + repositoryTask.getConnectorKind()); + addTaskToSync(client, repositoryTask, tasksToSyncMap); } + } - if (!queriesToSyncMap.isEmpty()) { - // determine which repositories to synch changed tasks for - HashMap<TaskRepository, Set<RepositoryQuery>> repositoriesToSync = new HashMap<TaskRepository, Set<RepositoryQuery>>(); - for (AbstractRepositoryConnector connector : queriesToSyncMap.keySet()) { - List<RepositoryQuery> queriesToSync = queriesToSyncMap.get(connector); - if (queriesToSync == null || queriesToSync.isEmpty()) { - continue; - } + // update queries + if (!queriesToSyncMap.isEmpty()) { + // determine which repositories to synch changed tasks for + HashMap<TaskRepository, Set<RepositoryQuery>> repositoriesToSync = new HashMap<TaskRepository, Set<RepositoryQuery>>(); + for (AbstractRepositoryConnector connector : queriesToSyncMap.keySet()) { + List<RepositoryQuery> queriesToSync = queriesToSyncMap.get(connector); + if (queriesToSync == null || queriesToSync.isEmpty()) { + continue; + } - for (RepositoryQuery query : queriesToSync) { - TaskRepository repos = TasksUi.getRepositoryManager().getRepository(query.getConnectorKind(), - query.getRepositoryUrl()); - Set<RepositoryQuery> queries = repositoriesToSync.get(repos); - if (queries == null) { - queries = new HashSet<RepositoryQuery>(); - repositoriesToSync.put(repos, queries); - } - queries.add(query); + for (RepositoryQuery query : queriesToSync) { + TaskRepository repos = TasksUi.getRepositoryManager().getRepository(query.getConnectorKind(), + query.getRepositoryUrl()); + Set<RepositoryQuery> queries = repositoriesToSync.get(repos); + if (queries == null) { + queries = new HashSet<RepositoryQuery>(); + repositoriesToSync.put(repos, queries); } + queries.add(query); } + } - for (Map.Entry<TaskRepository, Set<RepositoryQuery>> entry : repositoriesToSync.entrySet()) { - TaskRepository repository = entry.getKey(); - AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector( - repository.getConnectorKind()); - Set<RepositoryQuery> queries = entry.getValue(); - TasksUiInternal.synchronizeQueries(connector, repository, queries, null, true); - } + for (Map.Entry<TaskRepository, Set<RepositoryQuery>> entry : repositoriesToSync.entrySet()) { + TaskRepository repository = entry.getKey(); + AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector( + repository.getConnectorKind()); + Set<RepositoryQuery> queries = entry.getValue(); + TasksUiInternal.synchronizeQueries(connector, repository, queries, null, true); } - if (!tasksToSyncMap.isEmpty()) { - for (AbstractRepositoryConnector connector : tasksToSyncMap.keySet()) { - List<ITask> tasksToSync = tasksToSyncMap.get(connector); - if (tasksToSync != null && tasksToSync.size() > 0) { - TasksUiInternal.synchronizeTasks(connector, new HashSet<ITask>(tasksToSync), true, null); - } + } + // update tasks + if (!tasksToSyncMap.isEmpty()) { + for (AbstractRepositoryConnector connector : tasksToSyncMap.keySet()) { + List<ITask> tasksToSync = tasksToSyncMap.get(connector); + if (tasksToSync != null && tasksToSync.size() > 0) { + TasksUiInternal.synchronizeTasks(connector, new HashSet<ITask>(tasksToSync), true, null); } } - } - - queriesToSyncMap.clear(); - tasksToSyncMap.clear(); } - private void addTaskToSync(AbstractRepositoryConnector connector, ITask task) { + private void addTaskToSync(AbstractRepositoryConnector connector, ITask task, + Map<AbstractRepositoryConnector, List<ITask>> tasksToSyncMap) { if (connector == null // || task instanceof LocalTask // || task.getSynchronizationState() == SynchronizationState.OUTGOING_NEW) { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/commands/SynchronizeAllHandler.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/commands/SynchronizeAllHandler.java new file mode 100644 index 000000000..7a911b4d1 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/commands/SynchronizeAllHandler.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2009 Tasktop Technologies 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 + * + * Contributors: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.tasks.ui.commands; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; + +/** + * @author Steffen Pingel + */ +public class SynchronizeAllHandler extends AbstractHandler { + + public Object execute(ExecutionEvent event) throws ExecutionException { + TasksUiInternal.synchronizeAllRepositories(true); + return null; + } + +} |