diff options
author | spingel | 2009-06-01 09:53:42 +0000 |
---|---|---|
committer | spingel | 2009-06-01 09:53:42 +0000 |
commit | 8c8aae9f25bcce20941d80d88d0ea6ed0dbb1ff5 (patch) | |
tree | da31c186b998b62eaf74cdf7cbe21a8bd7a8ebc3 /org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks | |
parent | d6bf9862331480e4c039749bbf2f71112f263d83 (diff) | |
download | org.eclipse.mylyn.tasks-8c8aae9f25bcce20941d80d88d0ea6ed0dbb1ff5.tar.gz org.eclipse.mylyn.tasks-8c8aae9f25bcce20941d80d88d0ea6ed0dbb1ff5.tar.xz org.eclipse.mylyn.tasks-8c8aae9f25bcce20941d80d88d0ea6ed0dbb1ff5.zip |
RESOLVED - bug 247441: Copying Bug URL from within task list and editor
https://bugs.eclipse.org/bugs/show_bug.cgi?id=247441
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks')
10 files changed, 134 insertions, 74 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AutoUpdateQueryAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AutoUpdateQueryAction.java index 9b45155d1..cae4e99a9 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AutoUpdateQueryAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AutoUpdateQueryAction.java @@ -30,7 +30,7 @@ import org.eclipse.ui.actions.BaseSelectionListenerAction; public class AutoUpdateQueryAction extends BaseSelectionListenerAction { public AutoUpdateQueryAction() { - super("Synchronize Automatically"); + super(Messages.AutoUpdateQueryAction_Synchronize_Automatically_Label); setChecked(false); } @@ -61,7 +61,7 @@ public class AutoUpdateQueryAction extends BaseSelectionListenerAction { TasksUiPlugin.getTaskList().notifyElementsChanged(Collections.singleton(query)); } catch (CoreException e) { StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Failed to set offline status for query", e)); + "Failed to set offline status for query", e)); //$NON-NLS-1$ } } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CommentActionGroup.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CommentActionGroup.java index 0b7835552..5d2024709 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CommentActionGroup.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CommentActionGroup.java @@ -58,12 +58,4 @@ public class CommentActionGroup extends ActionGroup { return StructuredSelection.EMPTY; } - @Override - public void dispose() { - super.dispose(); - if (copyDetailsAction != null) { - copyDetailsAction.dispose(); - } - } - } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyCommentDetailsAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyCommentDetailsAction.java index 0cea6397f..3db2a21b3 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyCommentDetailsAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyCommentDetailsAction.java @@ -22,15 +22,16 @@ import org.eclipse.ui.actions.BaseSelectionListenerAction; */ public class CopyCommentDetailsAction extends BaseSelectionListenerAction { - private final ClipboardCopier copier; - public CopyCommentDetailsAction() { super(Messages.CopyCommentDetailsAction_Copy_User_ID); setToolTipText(Messages.CopyCommentDetailsAction_Copy_User_ID_Tooltip); setImageDescriptor(CommonImages.COPY); - copier = new ClipboardCopier() { - @Override - protected String getTextForElement(Object element) { + } + + @Override + public void run() { + ClipboardCopier.getDefault().copy(getStructuredSelection(), new ClipboardCopier.TextProvider() { + public String getTextForElement(Object element) { if (element instanceof ITaskComment) { ITaskComment comment = (ITaskComment) element; IRepositoryPerson author = comment.getAuthor(); @@ -40,17 +41,7 @@ public class CopyCommentDetailsAction extends BaseSelectionListenerAction { } return null; } - }; - } - - @Override - public void run() { - copier.copy(getStructuredSelection()); - } - - public void dispose() { - copier.dispose(); - + }); } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java index afa336899..c34ece02c 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java @@ -11,8 +11,7 @@ package org.eclipse.mylyn.internal.tasks.ui.actions; -import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; -import org.eclipse.mylyn.internal.tasks.core.AbstractTask; +import org.eclipse.core.runtime.Assert; import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; import org.eclipse.mylyn.internal.tasks.ui.util.ClipboardCopier; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; @@ -23,60 +22,101 @@ import org.eclipse.ui.actions.BaseSelectionListenerAction; /** * @author Mik Kersten + * @author Steffen Pingel */ public class CopyTaskDetailsAction extends BaseSelectionListenerAction { public static final String ID = "org.eclipse.mylyn.tasklist.actions.copy"; //$NON-NLS-1$ - private final ClipboardCopier copier; + public enum Mode { + KEY, URL, SUMMARY_URL + } - public CopyTaskDetailsAction() { - super(Messages.CopyTaskDetailsAction_Copy_Details); - setToolTipText(Messages.CopyTaskDetailsAction_Copy_Details); - setId(ID); - setImageDescriptor(CommonImages.COPY); - this.copier = new ClipboardCopier() { - @Override - protected String getTextForElement(Object element) { - return getTextForTask(element); - } - }; + private Mode mode; + + public CopyTaskDetailsAction(Mode mode) { + super(""); //$NON-NLS-1$ + setMode(mode); + } + + public Mode getMode() { + return mode; + } + + public void setMode(Mode mode) { + Assert.isNotNull(mode); + this.mode = mode; + switch (mode) { + case KEY: + setText(Messages.CopyTaskDetailsAction_ID_Menu_Label); + break; + case URL: + setText(Messages.CopyTaskDetailsAction_Url_Menu_Label); + break; + case SUMMARY_URL: + setText(Messages.CopyTaskDetailsAction_Summary_and_Url_Menu_Label); + break; + } } @Override public void run() { - copier.copy(getStructuredSelection()); + ClipboardCopier.getDefault().copy(getStructuredSelection(), new ClipboardCopier.TextProvider() { + public String getTextForElement(Object element) { + return getTextForTask(element, getMode()); + } + }); } - public void dispose() { - copier.dispose(); + public static String getTextForTask(Object object) { + return getTextForTask(object, Mode.SUMMARY_URL); } // TODO move to TasksUiUtil / into core - public static String getTextForTask(Object object) { + public static String getTextForTask(Object object, Mode mode) { StringBuffer sb = new StringBuffer(); - if (object instanceof ITask) { - AbstractTask task = (AbstractTask) object; - if (task.getTaskKey() != null) { - sb.append(task.getTaskKey()); - sb.append(": "); //$NON-NLS-1$ + switch (mode) { + case KEY: + if (object instanceof ITask) { + ITask task = (ITask) object; + if (task.getTaskKey() != null) { + sb.append(task.getTaskKey()); + } } - - sb.append(task.getSummary()); - if (TasksUiInternal.isValidUrl(task.getUrl())) { - sb.append(ClipboardCopier.LINE_SEPARATOR); - sb.append(task.getUrl()); + break; + case URL: + if (object instanceof IRepositoryElement) { + IRepositoryElement element = (IRepositoryElement) object; + if (element.getUrl() != null) { + sb.append(element.getUrl()); + } } - } else if (object instanceof IRepositoryQuery) { - RepositoryQuery query = (RepositoryQuery) object; - sb.append(query.getSummary()); - if (TasksUiInternal.isValidUrl(query.getUrl())) { - sb.append(ClipboardCopier.LINE_SEPARATOR); - sb.append(query.getUrl()); + break; + case SUMMARY_URL: + if (object instanceof ITask) { + ITask task = (ITask) object; + if (task.getTaskKey() != null) { + sb.append(task.getTaskKey()); + sb.append(": "); //$NON-NLS-1$ + } + + sb.append(task.getSummary()); + if (TasksUiInternal.isValidUrl(task.getUrl())) { + sb.append(ClipboardCopier.LINE_SEPARATOR); + sb.append(task.getUrl()); + } + } else if (object instanceof IRepositoryQuery) { + RepositoryQuery query = (RepositoryQuery) object; + sb.append(query.getSummary()); + if (TasksUiInternal.isValidUrl(query.getUrl())) { + sb.append(ClipboardCopier.LINE_SEPARATOR); + sb.append(query.getUrl()); + } + } else if (object instanceof IRepositoryElement) { + IRepositoryElement element = (IRepositoryElement) object; + sb.append(element.getSummary()); } - } else if (object instanceof IRepositoryElement) { - IRepositoryElement element = (IRepositoryElement) object; - sb.append(element.getSummary()); + break; } return sb.toString(); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java index 29b491cf6..8548c4ec3 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java @@ -41,6 +41,8 @@ public class Messages extends NLS { public static String AddRepositoryAction_Do_not_show_again; + public static String AutoUpdateQueryAction_Synchronize_Automatically_Label; + public static String ClearOutgoingAction_Clear_outgoing; public static String ClearOutgoingAction_Clear_outgoing_failed; @@ -69,6 +71,12 @@ public class Messages extends NLS { public static String CopyTaskDetailsAction_Copy_Details; + public static String CopyTaskDetailsAction_ID_Menu_Label; + + public static String CopyTaskDetailsAction_Summary_and_Url_Menu_Label; + + public static String CopyTaskDetailsAction_Url_Menu_Label; + public static String DeleteAction_Confirm_Delete; public static String DeleteAction_Delete; 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 dcbf30584..a15d4537c 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 @@ -30,11 +30,13 @@ import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.mylyn.commons.core.StatusHandler; +import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory; import org.eclipse.mylyn.internal.tasks.core.TaskCategory; import org.eclipse.mylyn.internal.tasks.ui.IDynamicSubMenuContributor; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; +import org.eclipse.mylyn.internal.tasks.ui.actions.CopyTaskDetailsAction.Mode; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.internal.tasks.ui.views.Messages; import org.eclipse.mylyn.internal.tasks.ui.views.UpdateRepositoryConfigurationAction; @@ -66,6 +68,10 @@ public class RepositoryElementActionGroup { protected static final String ID_SEPARATOR_EDIT = "edit"; //$NON-NLS-1$ + private final CopyTaskDetailsAction copyUrlAction; + + private final CopyTaskDetailsAction copyKeyAction; + private final CopyTaskDetailsAction copyDetailsAction; private final OpenTaskListElementAction openAction; @@ -96,8 +102,12 @@ public class RepositoryElementActionGroup { activateAction = new TaskActivateAction(); deactivateAction = new TaskDeactivateAction(); - copyDetailsAction = add(new CopyTaskDetailsAction()); - copyDetailsAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.COPY); + copyKeyAction = add(new CopyTaskDetailsAction(Mode.KEY)); + copyUrlAction = add(new CopyTaskDetailsAction(Mode.URL)); + copyDetailsAction = add(new CopyTaskDetailsAction(Mode.SUMMARY_URL)); + if (!isInEditor()) { + copyDetailsAction.setActionDefinitionId(IWorkbenchActionDefinitionIds.COPY); + } removeFromCategoryAction = add(new RemoveFromCategoryAction()); @@ -193,10 +203,12 @@ public class RepositoryElementActionGroup { } } - addAction(ID_SEPARATOR_EDIT, copyDetailsAction, manager, element); - if (!isInEditor()) { - manager.appendToGroup(ID_SEPARATOR_EDIT, deleteAction); - } + MenuManager copyDetailsSubMenu = new MenuManager(Messages.RepositoryElementActionGroup_Copy_Detail_Menu_Label, CommonImages.COPY, CopyTaskDetailsAction.ID); + copyDetailsSubMenu.add(copyKeyAction); + copyDetailsSubMenu.add(copyUrlAction); + copyDetailsSubMenu.add(copyDetailsAction); + manager.appendToGroup(ID_SEPARATOR_EDIT, copyDetailsSubMenu); + removeFromCategoryAction.selectionChanged(selection); removeFromCategoryAction.setEnabled(isRemoveFromCategoryEnabled(selectedElements)); if (removeFromCategoryAction.isEnabled()) { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties index a4f65da3f..c64d5bbd9 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties @@ -9,6 +9,7 @@ AddRepositoryAction_Add_new_query=Add new query AddRepositoryAction_Add_a_query_to_the_Task_List=Would you like to add a query to the Task List for this repository? AddRepositoryAction_Add_Task_Repository=Add Task Repository... AddRepositoryAction_Do_not_show_again=Do not show again +AutoUpdateQueryAction_Synchronize_Automatically_Label=Synchronize Automatically ClearOutgoingAction_Clear_outgoing=Clear outgoing ClearOutgoingAction_Clear_outgoing_failed=Clear outgoing failed @@ -28,6 +29,9 @@ CompareAttachmentsAction_Failed_to_find_attachment=Failed to find attachment\:\ CopyCommentDetailsAction_Copy_User_ID=Copy User ID CopyCommentDetailsAction_Copy_User_ID_Tooltip=Copy User ID of Comment Author to Clipboard CopyTaskDetailsAction_Copy_Details=Copy Details +CopyTaskDetailsAction_ID_Menu_Label=ID +CopyTaskDetailsAction_Summary_and_Url_Menu_Label=Summary and URL +CopyTaskDetailsAction_Url_Menu_Label=URL DeleteAction_Confirm_Delete=Confirm Delete DeleteAction_Delete=Delete diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ClipboardCopier.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ClipboardCopier.java index 895fe6ce1..6a0226062 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ClipboardCopier.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ClipboardCopier.java @@ -23,7 +23,19 @@ import org.eclipse.ui.PlatformUI; /** * @author Steffen Pingel */ -public abstract class ClipboardCopier { +public class ClipboardCopier { + + public interface TextProvider { + + public abstract String getTextForElement(Object element); + + } + + private static ClipboardCopier instance = new ClipboardCopier(); + + public static ClipboardCopier getDefault() { + return instance; + } private Clipboard clipboard; @@ -32,12 +44,12 @@ public abstract class ClipboardCopier { public ClipboardCopier() { } - public void copy(IStructuredSelection selection) { + public void copy(IStructuredSelection selection, TextProvider provider) { if (!selection.isEmpty()) { StringBuilder sb = new StringBuilder(); for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object item = it.next(); - String textForElement = getTextForElement(item); + String textForElement = provider.getTextForElement(item); if (textForElement != null) { if (sb.length() > 0) { sb.append(LINE_SEPARATOR); @@ -50,8 +62,6 @@ public abstract class ClipboardCopier { } } - protected abstract String getTextForElement(Object element); - public void copy(String text) { if (clipboard == null) { Display display = PlatformUI.getWorkbench().getDisplay(); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/Messages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/Messages.java index 09ad1ae9e..6b8a4e5fb 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/Messages.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/Messages.java @@ -29,6 +29,8 @@ public class Messages extends NLS { public static String PriorityDropDownAction_Filter_Priority_Lower_Than; + public static String RepositoryElementActionGroup_Copy_Detail_Menu_Label; + public static String TaskInputDialog_Clear; public static String TaskInputDialog_Description; diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/messages.properties b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/messages.properties index 0f0ddd385..3467de588 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/messages.properties +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/messages.properties @@ -1,6 +1,7 @@ DisconnectRepositoryAction_Disconnected=Disconnected PriorityDropDownAction_Filter_Priority_Lower_Than=Filter Priority Lower Than +RepositoryElementActionGroup_Copy_Detail_Menu_Label=Copy Details TaskInputDialog_Clear=Clear TaskInputDialog_Description=Description: |