Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2009-06-01 09:53:42 +0000
committerspingel2009-06-01 09:53:42 +0000
commit8c8aae9f25bcce20941d80d88d0ea6ed0dbb1ff5 (patch)
treeda31c186b998b62eaf74cdf7cbe21a8bd7a8ebc3 /org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks
parentd6bf9862331480e4c039749bbf2f71112f263d83 (diff)
downloadorg.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')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AutoUpdateQueryAction.java4
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CommentActionGroup.java8
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyCommentDetailsAction.java23
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/CopyTaskDetailsAction.java114
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java8
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/RepositoryElementActionGroup.java24
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties4
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/ClipboardCopier.java20
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/Messages.java2
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/messages.properties1
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:

Back to the top