### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.tasks.ui Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java =================================================================== RCS file: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java diff -N src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java --- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDragSourceListener.java 5 Feb 2008 04:23:10 -0000 1.15 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,142 +0,0 @@ -/******************************************************************************* - * 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.views; - -import java.io.File; -import java.io.IOException; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.mylyn.internal.tasks.ui.ITasksUiConstants; -import org.eclipse.mylyn.internal.tasks.ui.TaskTransfer; -import org.eclipse.mylyn.internal.tasks.ui.actions.CopyTaskDetailsAction; -import org.eclipse.mylyn.monitor.core.StatusHandler; -import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; -import org.eclipse.mylyn.tasks.core.AbstractTask; -import org.eclipse.mylyn.tasks.core.AbstractTaskContainer; -import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; -import org.eclipse.swt.dnd.DragSourceEvent; -import org.eclipse.swt.dnd.DragSourceListener; -import org.eclipse.swt.dnd.FileTransfer; -import org.eclipse.swt.dnd.TextTransfer; - -/** - * @author Mik Kersten - * @author Jevgeni Holodkov - * @author Leo Dos Santos - * @author Steffen Pingel - */ -class TaskListDragSourceListener implements DragSourceListener { - - static final String DELIM = ", "; - - private final TaskListView view; - - private StructuredSelection selection; - - public TaskListDragSourceListener(TaskListView view) { - this.view = view; - } - - public void dragStart(DragSourceEvent event) { - StructuredSelection selection = (StructuredSelection) this.view.getViewer().getSelection(); - if (selection.isEmpty()) { - this.selection = null; - event.doit = false; - } else { - this.selection = selection; - } - } - - private List createTaskFiles(StructuredSelection selection) { - // prepare temporary directory - File tempDir = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + "temp"); - if (!tempDir.exists()) { - tempDir.mkdirs(); - } - - // extract queries and tasks from selection - List queries = new ArrayList(); - List tasks = new ArrayList(); - for (Iterator it = selection.iterator(); it.hasNext();) { - Object element = it.next(); - if (element instanceof AbstractRepositoryQuery) { - queries.add((AbstractRepositoryQuery) element); - } else if (element instanceof AbstractTask) { - tasks.add((AbstractTask) element); - } - } - - List taskFiles = new ArrayList(queries.size() + tasks.size()); - try { - for (AbstractRepositoryQuery query : queries) { - String encodedName = URLEncoder.encode(query.getHandleIdentifier(), ITasksUiConstants.FILENAME_ENCODING); - File file = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, tempDir); - file.deleteOnExit(); - - TasksUiPlugin.getTaskListManager().getTaskListWriter().writeQueries(Collections.singletonList(query), - file); - taskFiles.add(file); - } - - for (AbstractTask task : tasks) { - String encodedName = URLEncoder.encode(task.getHandleIdentifier(), ITasksUiConstants.FILENAME_ENCODING); - File file = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, tempDir); - file.deleteOnExit(); - - TasksUiPlugin.getTaskListManager().getTaskListWriter().writeTask(task, file); - taskFiles.add(file); - } - - return taskFiles; - } catch (IOException e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Cannot create a temp query file for Drag&Drop", e)); - return null; - } - } - - public void dragSetData(DragSourceEvent event) { - if (selection == null || selection.isEmpty()) { - return; - } - - if (TaskTransfer.getInstance().isSupportedType(event.dataType)) { - List tasks = new ArrayList(); - for (Iterator it = selection.iterator(); it.hasNext();) { - AbstractTaskContainer element = (AbstractTaskContainer) it.next(); - if (element instanceof AbstractTask) { - tasks.add((AbstractTask) element); - } - } - event.data = tasks.toArray(new AbstractTask[0]); - } else if (FileTransfer.getInstance().isSupportedType(event.dataType)) { - List files = createTaskFiles(selection); - if (files != null && !files.isEmpty()) { - String[] paths = new String[files.size()]; - int i = 0; - for (File file : files) { - paths[i++] = file.getAbsolutePath(); - } - event.data = paths; - } - } else if (TextTransfer.getInstance().isSupportedType(event.dataType)) { - event.data = CopyTaskDetailsAction.getTextForTask(selection.getFirstElement()); - } - } - - public void dragFinished(DragSourceEvent event) { - // don't care if the drag is done - } -} Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java,v retrieving revision 1.228 diff -u -r1.228 TaskListView.java --- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java 5 Feb 2008 04:23:10 -0000 1.228 +++ src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java 6 Feb 2008 06:49:59 -0000 @@ -89,6 +89,7 @@ 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.TaskListElementPropertiesAction; +import org.eclipse.mylyn.internal.tasks.ui.util.TaskDragSourceListener; import org.eclipse.mylyn.internal.tasks.ui.views.TaskListTableSorter.SortByIndex; import org.eclipse.mylyn.internal.tasks.ui.wizards.NewLocalTaskWizard; import org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetUpdater; @@ -1034,7 +1035,7 @@ RTFTransfer.getInstance() }; getViewer().addDragSupport(DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK, dragTypes, - new TaskListDragSourceListener(this)); + new TaskDragSourceListener(getViewer())); getViewer().addDropSupport(DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK | DND.DROP_DEFAULT, dropTypes, new TaskListDropAdapter(getViewer())); } Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java,v retrieving revision 1.52 diff -u -r1.52 TaskListDropAdapter.java --- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java 5 Feb 2008 04:23:10 -0000 1.52 +++ src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java 6 Feb 2008 06:49:59 -0000 @@ -60,6 +60,7 @@ * @author Rob Elves (added URL based task creation support) * @author Jevgeni Holodkov */ +// API 3.0 rename to TaskListDropTargetListener public class TaskListDropAdapter extends ViewerDropAdapter { private AbstractTask newTask = null; Index: src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java,v retrieving revision 1.69 diff -u -r1.69 TaskEditor.java --- src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java 5 Feb 2008 04:23:10 -0000 1.69 +++ src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java 6 Feb 2008 06:49:59 -0000 @@ -23,17 +23,24 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.mylyn.internal.tasks.core.LocalTask; +import org.eclipse.mylyn.internal.tasks.ui.TaskTransfer; import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages; import org.eclipse.mylyn.internal.tasks.ui.editors.EditorBusyIndicator; import org.eclipse.mylyn.internal.tasks.ui.editors.IBusyEditor; import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorActionContributor; import org.eclipse.mylyn.internal.tasks.ui.editors.TaskPlanningEditor; +import org.eclipse.mylyn.internal.tasks.ui.util.SelectionProviderAdapter; +import org.eclipse.mylyn.internal.tasks.ui.util.TaskDragSourceListener; import org.eclipse.mylyn.monitor.core.StatusHandler; import org.eclipse.mylyn.tasks.core.AbstractTask; import org.eclipse.mylyn.tasks.core.RepositoryTaskData; import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.tasks.ui.TasksUiUtil; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.FileTransfer; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; @@ -67,13 +74,15 @@ private IEditorPart contentOutlineProvider = null; public final Object FAMILY_SUBMIT = new Object(); - + private MenuManager menuManager = new MenuManager(); private EditorBusyIndicator editorBusyIndicator; private IHyperlinkListener messageHyperLinkListener; + private TaskDragSourceListener titleDragSourceListener; + public TaskEditor() { super(); taskPlanningEditor = new TaskPlanningEditor(this); @@ -90,9 +99,9 @@ public TaskEditorActionContributor getContributor() { return (TaskEditorActionContributor) getEditorSite().getActionBarContributor(); } - + /** - * @param Configurs standard task editor context menu + * Configures the standard task editor context menu * @Since 2.3 */ protected void configureContextMenuManager(MenuManager manager) { @@ -229,7 +238,6 @@ @Override public void dispose() { - if (editorBusyIndicator != null) { editorBusyIndicator.stop(); } @@ -335,7 +343,7 @@ } } else if (getEditorInput() instanceof AbstractRepositoryTaskEditorInput) { this.setTitleImage(TasksUiImages.getImage(TasksUiImages.TASK_REMOTE)); - } else { + } else { setTitleImage(TasksUiImages.getImage(TasksUiImages.TASK)); } @@ -365,10 +373,6 @@ @Override public void showBusy(boolean busy) { - // if (!this.getHeaderForm().getForm().isDisposed()) { - // this.getHeaderForm().getForm().setBusy(busy); - // } - if (busy) { if (TasksUiUtil.isAnimationsEnabled()) { editorBusyIndicator.start(); @@ -400,31 +404,56 @@ updateFormTitle(); } + private void installTitleDrag(Form form, final AbstractTask task, final RepositoryTaskData taskData) { + if (titleDragSourceListener == null) { + Transfer[] transferTypes; + if (null == task) { + transferTypes = new Transfer[] { TextTransfer.getInstance() }; + } else { + transferTypes = new Transfer[] { TaskTransfer.getInstance(), TextTransfer.getInstance(), + FileTransfer.getInstance() }; + } + titleDragSourceListener = new TaskDragSourceListener(new SelectionProviderAdapter() { + @Override + public ISelection getSelection() { + if (task != null) { + return new StructuredSelection(task); + } else if (taskData != null && !taskData.isNew()){ + return new StructuredSelection(taskData); + } + return null; + } + }); + form.addTitleDragSupport(DND.DROP_MOVE | DND.DROP_LINK, transferTypes, titleDragSourceListener); + } + } + protected void updateFormTitle() { + AbstractTask task = null; + RepositoryTaskData taskData = null; IEditorInput input = getEditorInput(); if (input instanceof TaskEditorInput) { - AbstractTask task = ((TaskEditorInput) input).getTask(); + task = ((TaskEditorInput) input).getTask(); if (task instanceof LocalTask) { getHeaderForm().getForm().setText("Task: " + task.getSummary()); } else { setFormHeaderImage(task.getConnectorKind()); setFormHeaderLabel(task); - return; } } else if (input instanceof RepositoryTaskEditorInput) { - AbstractTask task = ((RepositoryTaskEditorInput) input).getRepositoryTask(); - RepositoryTaskData data = ((RepositoryTaskEditorInput) input).getTaskData(); - if (task != null && data != null && !data.isNew()) { + task = ((RepositoryTaskEditorInput) input).getRepositoryTask(); + taskData = ((RepositoryTaskEditorInput) input).getTaskData(); + if (task != null && taskData != null && !taskData.isNew()) { setFormHeaderImage(task.getConnectorKind()); setFormHeaderLabel(task); - return; } else { - if (data != null) { - setFormHeaderImage(data.getRepositoryKind()); - setFormHeaderLabel(data); + if (taskData != null) { + setFormHeaderImage(taskData.getRepositoryKind()); + setFormHeaderLabel(taskData); } } } + installTitleDrag(getHeaderForm().getForm().getForm(), task, taskData); } private void setFormHeaderImage(String repositoryKind) { @@ -440,13 +469,13 @@ } /** - * @since 2.3 + * @since 2.3 */ public void setMessage(String message, int type, IHyperlinkListener listener) { if (this.getHeaderForm() != null && this.getHeaderForm().getForm() != null) { if (!this.getHeaderForm().getForm().isDisposed()) { getTopForm().setMessage(message, type); - + if (messageHyperLinkListener != null) { getTopForm().removeMessageHyperlinkListener(messageHyperLinkListener); } @@ -461,7 +490,7 @@ public void setMessage(String message, int type) { setMessage(message, type, null); } - + protected IWorkbenchSiteProgressService getProgressService() { Object siteService = getEditorSite().getAdapter(IWorkbenchSiteProgressService.class); if (siteService != null) @@ -470,7 +499,6 @@ } private void setFormHeaderLabel(RepositoryTaskData taskData) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(taskData.getRepositoryKind()); String kindLabel = taskData.getTaskKind(); @@ -500,7 +528,6 @@ } private void setFormHeaderLabel(AbstractTask repositoryTask) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repositoryTask.getConnectorKind()); String kindLabel = ""; if (connectorUi != null) { Index: src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java,v retrieving revision 1.21 diff -u -r1.21 CopyTaskDetailsAction.java --- src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java 23 Jan 2008 18:58:59 -0000 1.21 +++ src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java 6 Feb 2008 06:49:59 -0000 @@ -15,6 +15,7 @@ import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; import org.eclipse.mylyn.tasks.core.AbstractTask; import org.eclipse.mylyn.tasks.core.AbstractTaskContainer; +import org.eclipse.mylyn.tasks.core.RepositoryTaskData; import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; @@ -55,7 +56,7 @@ String text = getTextForTask(object); TextTransfer textTransfer = TextTransfer.getInstance(); - if (text != null && !text.equals("")) { + if (text != null && !text.equals("")) { clipboard.setContents(new Object[] { text }, new Transfer[] { textTransfer }); } } @@ -64,19 +65,26 @@ public static String getTextForTask(Object object) { String text = ""; if (object instanceof AbstractTask) { - AbstractTask task = null; - if (object instanceof AbstractTask) { - task = (AbstractTask) object; + AbstractTask task = (AbstractTask) object; + if (task.getTaskKey() != null) { + text += task.getTaskKey() + ": "; } - if (task != null) { - if (task.getTaskKey() != null) { - text += task.getTaskKey() + ": "; - } - - text += task.getSummary(); - if (task.hasValidUrl()) { - text += "\n" + task.getUrl(); - } + + text += task.getSummary(); + if (task.hasValidUrl()) { + text += "\n" + task.getUrl(); + } + } else if (object instanceof RepositoryTaskData) { + RepositoryTaskData taskData = (RepositoryTaskData) object; + if (taskData.getTaskKey() != null) { + text += taskData.getTaskKey() + ": "; + } + + text += taskData.getSummary(); + AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( + taskData.getRepositoryKind()); + if (connector != null) { + text += "\n" + connector.getTaskUrl(taskData.getRepositoryUrl(), taskData.getId()); } } else if (object instanceof AbstractRepositoryQuery) { AbstractRepositoryQuery query = (AbstractRepositoryQuery) object; Index: src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDragSourceListener.java =================================================================== RCS file: src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDragSourceListener.java diff -N src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDragSourceListener.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDragSourceListener.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,153 @@ +/******************************************************************************* + * 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.util; + +import java.io.File; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.mylyn.internal.tasks.ui.ITasksUiConstants; +import org.eclipse.mylyn.internal.tasks.ui.TaskTransfer; +import org.eclipse.mylyn.internal.tasks.ui.actions.CopyTaskDetailsAction; +import org.eclipse.mylyn.monitor.core.StatusHandler; +import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; +import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; +import org.eclipse.mylyn.tasks.core.AbstractTask; +import org.eclipse.mylyn.tasks.core.AbstractTaskContainer; +import org.eclipse.mylyn.tasks.core.RepositoryTaskData; +import org.eclipse.mylyn.tasks.ui.TasksUiPlugin; +import org.eclipse.swt.dnd.DragSourceAdapter; +import org.eclipse.swt.dnd.DragSourceEvent; +import org.eclipse.swt.dnd.FileTransfer; +import org.eclipse.swt.dnd.TextTransfer; + +/** + * @author Mik Kersten + * @author Jevgeni Holodkov + * @author Leo Dos Santos + * @author Steffen Pingel + */ +public class TaskDragSourceListener extends DragSourceAdapter { + + static final String DELIM = ", "; + + private IStructuredSelection selection; + + private final ISelectionProvider selectionProvider; + + public TaskDragSourceListener(ISelectionProvider selectionProvider) { + this.selectionProvider = selectionProvider; + } + + public void dragStart(DragSourceEvent event) { + ISelection selection = selectionProvider.getSelection(); + if (selection instanceof IStructuredSelection && !selection.isEmpty()) { + this.selection = (IStructuredSelection) selection; + } else { + this.selection = null; + event.doit = false; + } + } + + private List createTaskFiles(IStructuredSelection selection) { + // prepare temporary directory + File tempDir = new File(TasksUiPlugin.getDefault().getDataDirectory() + File.separator + "temp"); + if (!tempDir.exists()) { + tempDir.mkdirs(); + } + + // extract queries and tasks from selection + List queries = new ArrayList(); + List tasks = new ArrayList(); + for (Iterator it = selection.iterator(); it.hasNext();) { + Object element = it.next(); + if (element instanceof AbstractRepositoryQuery) { + queries.add((AbstractRepositoryQuery) element); + } else if (element instanceof AbstractTask) { + tasks.add((AbstractTask) element); + } + } + + List taskFiles = new ArrayList(queries.size() + tasks.size()); + try { + for (AbstractRepositoryQuery query : queries) { + String encodedName = URLEncoder.encode(query.getHandleIdentifier(), ITasksUiConstants.FILENAME_ENCODING); + File file = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, tempDir); + file.deleteOnExit(); + + TasksUiPlugin.getTaskListManager().getTaskListWriter().writeQueries(Collections.singletonList(query), + file); + taskFiles.add(file); + } + + for (AbstractTask task : tasks) { + String encodedName = URLEncoder.encode(task.getHandleIdentifier(), ITasksUiConstants.FILENAME_ENCODING); + File file = File.createTempFile(encodedName, ITasksUiConstants.FILE_EXTENSION, tempDir); + file.deleteOnExit(); + + TasksUiPlugin.getTaskListManager().getTaskListWriter().writeTask(task, file); + taskFiles.add(file); + } + + return taskFiles; + } catch (IOException e) { + StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Cannot create a temp query file for Drag&Drop", e)); + return null; + } + } + + public void dragSetData(DragSourceEvent event) { + if (selection == null || selection.isEmpty()) { + return; + } + + if (TaskTransfer.getInstance().isSupportedType(event.dataType)) { + List tasks = new ArrayList(); + for (Iterator it = selection.iterator(); it.hasNext();) { + AbstractTaskContainer element = (AbstractTaskContainer) it.next(); + if (element instanceof AbstractTask) { + tasks.add((AbstractTask) element); + } + } + event.data = tasks.toArray(new AbstractTask[0]); + } else if (FileTransfer.getInstance().isSupportedType(event.dataType)) { + List files = createTaskFiles(selection); + if (files != null && !files.isEmpty()) { + String[] paths = new String[files.size()]; + int i = 0; + for (File file : files) { + paths[i++] = file.getAbsolutePath(); + } + event.data = paths; + } + } else if (TextTransfer.getInstance().isSupportedType(event.dataType)) { + if (selection.getFirstElement() instanceof RepositoryTaskData) { + RepositoryTaskData taskData = (RepositoryTaskData) selection.getFirstElement(); + AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector( + taskData.getRepositoryKind()); + if (connector != null) { + event.data = connector.getTaskUrl(taskData.getRepositoryUrl(), taskData.getId()); + } else { + event.data = taskData.getSummary(); + } + } else { + event.data = CopyTaskDetailsAction.getTextForTask(selection.getFirstElement()); + } + } + } + +} Index: src/org/eclipse/mylyn/internal/tasks/ui/util/SelectionProviderAdapter.java =================================================================== RCS file: src/org/eclipse/mylyn/internal/tasks/ui/util/SelectionProviderAdapter.java diff -N src/org/eclipse/mylyn/internal/tasks/ui/util/SelectionProviderAdapter.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/mylyn/internal/tasks/ui/util/SelectionProviderAdapter.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,36 @@ +/******************************************************************************* + * 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.util; + +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; + +/** + * @author Steffen Pingel + */ +public class SelectionProviderAdapter implements ISelectionProvider { + + public void addSelectionChangedListener(ISelectionChangedListener listener) { + // ignore + } + + public ISelection getSelection() { + // ignore + return null; + } + + public void removeSelectionChangedListener(ISelectionChangedListener listener) { + // ignore + } + + public void setSelection(ISelection selection) { + // ignore + } + +}