### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.tasks.ui Index: src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java,v retrieving revision 1.255 diff -u -r1.255 AbstractRepositoryTaskEditor.java --- src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java 7 Jan 2008 17:18:23 -0000 1.255 +++ src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java 9 Jan 2008 19:23:18 -0000 @@ -73,6 +73,7 @@ import org.eclipse.mylyn.internal.tasks.ui.PersonProposalLabelProvider; import org.eclipse.mylyn.internal.tasks.ui.PersonProposalProvider; import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts; +import org.eclipse.mylyn.internal.tasks.ui.TaskListHyperlink; import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages; import org.eclipse.mylyn.internal.tasks.ui.actions.AbstractTaskEditorAction; import org.eclipse.mylyn.internal.tasks.ui.actions.AttachAction; @@ -3756,4 +3757,31 @@ form.reflow(true); } } + + /** + * @since 2.3 + */ + protected Hyperlink createTaskLinkHyperlink(Composite hyperlinksComposite, final String taskId, final String taskUrl, + final AbstractTask task) { + TaskListHyperlink hyperlink = new TaskListHyperlink(hyperlinksComposite, SWT.SHORT + | getManagedForm().getToolkit().getOrientation()); + getManagedForm().getToolkit().adapt(hyperlink, true, true); + getManagedForm().getToolkit().getHyperlinkGroup().add(hyperlink); + hyperlink.setTask(task); + if (task == null) { + hyperlink.setText(taskId); + } + hyperlink.addHyperlinkListener(new HyperlinkAdapter() { + @Override + public void linkActivated(HyperlinkEvent e) { + if (task != null) { + TasksUiUtil.refreshAndOpenTaskListElement(task); + } else { + TasksUiUtil.openRepositoryTask(repository.getUrl(), taskId, taskUrl); + } + } + }); + return hyperlink; + } + } Index: src/org/eclipse/mylyn/internal/tasks/ui/TaskListHyperlink.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListHyperlink.java,v retrieving revision 1.5 diff -u -r1.5 TaskListHyperlink.java --- src/org/eclipse/mylyn/internal/tasks/ui/TaskListHyperlink.java 6 Dec 2007 02:04:27 -0000 1.5 +++ src/org/eclipse/mylyn/internal/tasks/ui/TaskListHyperlink.java 9 Jan 2008 19:23:17 -0000 @@ -9,22 +9,28 @@ package org.eclipse.mylyn.internal.tasks.ui; import org.eclipse.mylyn.tasks.core.AbstractTask; +import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseTrackListener; import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.ImageHyperlink; /** - * Override Hyperlink to truncate its text at the end, rather than the middle. + * Enhanced Hyperlink for rendering tasks that truncates its text at the end rather than the middle if it + * is wider than the available space. * * @author Leo Dos Santos * @author Mik Kersten + * @author Steffen Pingel + * @author Frank Becker */ public class TaskListHyperlink extends ImageHyperlink { - private final MouseTrackListener MOUSE_TRACK_LISTENER = new MouseTrackListener() { - + private final MouseTrackListener MOUSE_TRACK_LISTENER = new MouseTrackListener() { + public void mouseEnter(MouseEvent e) { setUnderlined(true); } @@ -37,6 +43,8 @@ } }; + private boolean strikeThrough; + private AbstractTask task; public TaskListHyperlink(Composite parent, int style) { @@ -44,19 +52,68 @@ setForeground(TaskListColorsAndFonts.COLOR_HYPERLINK_WIDGET); addMouseTrackListener(MOUSE_TRACK_LISTENER); } - + @Override public void dispose() { removeMouseTrackListener(MOUSE_TRACK_LISTENER); super.dispose(); } + public AbstractTask getTask() { + return task; + } + + public boolean isStrikeThrough() { + return strikeThrough; + } + + @Override + protected void paintText(GC gc, Rectangle bounds) { + super.paintText(gc, bounds); + if (strikeThrough) { + Point totalSize = computeTextSize(SWT.DEFAULT, SWT.DEFAULT); + int textWidth = Math.min(bounds.width, totalSize.x); + int textHeight = totalSize.y; + + // int descent = gc.getFontMetrics().getDescent(); + int lineY = bounds.y + (textHeight / 2); // - descent + 1; + gc.drawLine(bounds.x, lineY, bounds.x + textWidth, lineY); + } + } + + public void setStrikeThrough(boolean strikethrough) { + this.strikeThrough = strikethrough; + } + + public void setTask(AbstractTask task) { + this.task = task; + if (task != null) { + if ((getStyle() & SWT.SHORT) != 0) { + setText(task.getTaskKey()); + setToolTipText(task.getTaskKey() + ": " + task.getSummary()); + setStrikeThrough(task.isCompleted()); + } else { + setText(task.getSummary()); + setToolTipText(null); + setStrikeThrough(false); + } + } else { + setText(""); + setToolTipText(null); + setStrikeThrough(false); + } + } + @Override protected String shortenText(GC gc, String t, int width) { if (t == null) { return null; } + if ((getStyle() & SWT.SHORT) != 0) { + return t; + } + String returnText = t; if (gc.textExtent(t).x > width) { for (int i = t.length(); i > 0; i--) { @@ -71,12 +128,4 @@ return returnText; } - public AbstractTask getTask() { - return task; - } - - public void setTask(AbstractTask task) { - this.task = task; - } - } Index: src/org/eclipse/mylyn/internal/tasks/ui/TaskListImageHyperlink.java =================================================================== RCS file: src/org/eclipse/mylyn/internal/tasks/ui/TaskListImageHyperlink.java diff -N src/org/eclipse/mylyn/internal/tasks/ui/TaskListImageHyperlink.java --- src/org/eclipse/mylyn/internal/tasks/ui/TaskListImageHyperlink.java 10 Jul 2007 00:30:39 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,47 +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; - -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.forms.widgets.ImageHyperlink; - -/** - * Override ImageHyperlink to truncate its text at the end, rather than the middle. - * - * @author Leo Dos Santos - */ -public class TaskListImageHyperlink extends ImageHyperlink { - - public TaskListImageHyperlink(Composite parent, int style) { - super(parent, style); - } - - // From PerspectiveBarContributionItem - @Override - protected String shortenText(GC gc, String t, int width) { - if (t == null) { - return null; - } - - String returnText = t; - if (gc.textExtent(t).x > width) { - for (int i = t.length(); i > 0; i--) { - String test = t.substring(0, i); - test = test + "..."; - if (gc.textExtent(test).x < width) { - returnText = test; - break; - } - } - } - return returnText; - } - -} Index: .refactorings/2008/1/2/refactorings.history =================================================================== RCS file: .refactorings/2008/1/2/refactorings.history diff -N .refactorings/2008/1/2/refactorings.history --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2008/1/2/refactorings.history 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,3 @@ + + + Index: .refactorings/2008/1/2/refactorings.index =================================================================== RCS file: .refactorings/2008/1/2/refactorings.index diff -N .refactorings/2008/1/2/refactorings.index --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2008/1/2/refactorings.index 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,2 @@ +1199904661806 Delete element +1199906043421 Rename field 'strikethrough' #P org.eclipse.mylyn.bugzilla.ui Index: src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugzillaTaskEditor.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugzillaTaskEditor.java,v retrieving revision 1.83 diff -u -r1.83 BugzillaTaskEditor.java --- src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugzillaTaskEditor.java 21 Nov 2007 22:14:56 -0000 1.83 +++ src/org/eclipse/mylyn/internal/bugzilla/ui/editor/BugzillaTaskEditor.java 9 Jan 2008 19:23:19 -0000 @@ -242,24 +242,10 @@ if (values != null && values.length() > 0) { for (String bugNumber : values.split(",")) { final String bugId = bugNumber.trim(); - Hyperlink hyperlink = getManagedForm().getToolkit().createHyperlink(hyperlinksComposite, bugId, - SWT.NONE); + final String bugUrl = repository.getUrl() + IBugzillaConstants.URL_GET_SHOW_BUG + bugId; final AbstractTask task = TasksUiPlugin.getTaskListManager().getTaskList().getTask(repository.getUrl(), bugId); - if (task != null) { - hyperlink.setToolTipText(task.getSummary()); - } - hyperlink.addHyperlinkListener(new HyperlinkAdapter() { - @Override - public void linkActivated(HyperlinkEvent e) { - if (task != null) { - TasksUiUtil.refreshAndOpenTaskListElement(task); - } else { - TasksUiUtil.openRepositoryTask(repository.getUrl(), bugId, repository.getUrl() - + IBugzillaConstants.URL_GET_SHOW_BUG + bugId); - } - } - }); + createTaskLinkHyperlink(hyperlinksComposite, bugId, bugUrl, task); } } } Index: .refactorings/2008/1/2/refactorings.history =================================================================== RCS file: .refactorings/2008/1/2/refactorings.history diff -N .refactorings/2008/1/2/refactorings.history --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2008/1/2/refactorings.history 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,4 @@ + + + + Index: .refactorings/2008/1/2/refactorings.index =================================================================== RCS file: .refactorings/2008/1/2/refactorings.index diff -N .refactorings/2008/1/2/refactorings.index --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2008/1/2/refactorings.index 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,1 @@ +1199906292897 Extract method 'createTaskLinkHyperlink'