Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkersten2007-06-28 17:09:05 -0400
committermkersten2007-06-28 17:09:05 -0400
commit89ab307cd8982a8fd405eaeb414376d474073783 (patch)
tree89a6a849cde909a8e76cc7e48603415533648375
parentb753470e1d08c9a4de416de35c4cf2269133395f (diff)
downloadorg.eclipse.mylyn.tasks-89ab307cd8982a8fd405eaeb414376d474073783.tar.gz
org.eclipse.mylyn.tasks-89ab307cd8982a8fd405eaeb414376d474073783.tar.xz
org.eclipse.mylyn.tasks-89ab307cd8982a8fd405eaeb414376d474073783.zip
Version update
-rw-r--r--org.eclipse.mylyn.bugzilla.ui/plugin.xml3
-rw-r--r--org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperlinkUtil.java84
-rw-r--r--org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java69
-rw-r--r--org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF3
-rw-r--r--org.eclipse.mylyn.help.ui/doc/images/2.0/ui-legend.gifbin0 -> 7738 bytes
-rw-r--r--org.eclipse.mylyn.help.ui/doc/images/2.0/welcome.gifbin0 -> 17920 bytes
-rw-r--r--org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-edit.gifbin0 -> 15823 bytes
-rw-r--r--org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-switch.gifbin0 -> 30522 bytes
-rw-r--r--org.eclipse.mylyn.help.ui/doc/images/mylyn-2.0.pngbin0 -> 166436 bytes
-rw-r--r--org.eclipse.mylyn.help.ui/doc/new.html463
-rw-r--r--org.eclipse.mylyn.help.ui/doc/overview.html26
-rw-r--r--org.eclipse.mylyn.tasks.ui/plugin.xml34
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java2
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskWorkingSetAction.java360
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleAllWorkingSetsAction.java59
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleWorkingSetAction.java90
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java113
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java3
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractFilteredTree.java6
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java160
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java30
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetAdapterFactory.java61
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetElementFactory.java57
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java454
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java225
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractNewRepositoryTaskEditor.java2
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java168
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java3
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java10
29 files changed, 792 insertions, 1693 deletions
diff --git a/org.eclipse.mylyn.bugzilla.ui/plugin.xml b/org.eclipse.mylyn.bugzilla.ui/plugin.xml
index b7fe62a0d..8053f9c11 100644
--- a/org.eclipse.mylyn.bugzilla.ui/plugin.xml
+++ b/org.eclipse.mylyn.bugzilla.ui/plugin.xml
@@ -27,6 +27,9 @@
<extension
point="org.eclipse.mylyn.tasks.ui.editors">
<editorFactory class="org.eclipse.mylyn.internal.bugzilla.ui.tasklist.BugzillaTaskEditorFactory"/>
+ <hyperlinkDetector
+ class="org.eclipse.mylyn.internal.bugzilla.ui.BugzillaTaskHyperlinkDetector"
+ id="org.eclipse.mylyn.tasks.hyperlinkdetector.bugzillatask"/>
</extension>
<extension
diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperlinkUtil.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperlinkUtil.java
new file mode 100644
index 000000000..ffbbc56ff
--- /dev/null
+++ b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaHyperlinkUtil.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia 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:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.internal.bugzilla.ui;
+
+import java.util.ArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
+import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
+
+/**
+ * @author Rob Elves (multiple bug/task hyperlink support)
+ * @author Mik Kersten
+ */
+public class BugzillaHyperlinkUtil {
+
+ private static final int TASK_NUM_GROUP = 3;
+
+ private static final String regexp = "(duplicate of|bug|task)(\\s#|#|#\\s|\\s|)(\\s\\d+|\\d+)";
+
+ private static final Pattern PATTERN = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE);
+
+ public static IHyperlink[] findBugHyperlinks(String repositoryUrl, int offset, String comment, int lineOffset) {
+ ArrayList<IHyperlink> hyperlinksFound = new ArrayList<IHyperlink>();
+
+ Matcher m = PATTERN.matcher(comment);
+ while (m.find()) {
+ if (offset >= m.start() && offset <= m.end()) {
+ IHyperlink link = extractHyperlink(repositoryUrl, lineOffset, m);
+ if (link != null)
+ hyperlinksFound.add(link);
+ }
+ }
+
+ if (hyperlinksFound.size() > 0) {
+ return hyperlinksFound.toArray(new IHyperlink[1]);
+ }
+ return null;
+ }
+
+ private static IHyperlink extractHyperlink(String repositoryUrl, int lineOffset, Matcher m) {
+
+ int start = -1;
+
+ if(m.group().startsWith("duplicate")) {
+ start = m.start() + m.group().indexOf(m.group(TASK_NUM_GROUP));
+ } else {
+ start = m.start();
+ }
+
+ int end = m.end();
+
+ if (end == -1)
+ end = m.group().length();
+
+ TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(repositoryUrl);
+
+ try {
+
+ String bugId = m.group(TASK_NUM_GROUP).trim();
+ start += lineOffset;
+ end += lineOffset;
+
+ IRegion sregion = new Region(start, end - start);
+ return new TaskHyperlink(sregion, repository, bugId);
+
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+}
diff --git a/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java
new file mode 100644
index 000000000..c5a4cb179
--- /dev/null
+++ b/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/BugzillaTaskHyperlinkDetector.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia 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:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.bugzilla.ui;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
+import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTextViewer;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+
+/**
+ * @author Rob Elves
+ */
+public class BugzillaTaskHyperlinkDetector implements IHyperlinkDetector {
+
+ private TaskRepository repository;
+
+ public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
+ if (region == null || textViewer == null)
+ return null;
+
+ if (!(textViewer instanceof RepositoryTextViewer))
+ return null;
+
+ RepositoryTextViewer viewer = (RepositoryTextViewer) textViewer;
+
+ repository = viewer.getRepository();
+
+ if (repository == null)
+ return null;
+
+ IDocument document = textViewer.getDocument();
+
+ int offset = region.getOffset();
+
+ if (document == null)
+ return null;
+
+ IRegion lineInfo;
+ String line;
+ try {
+ lineInfo = document.getLineInformationOfOffset(offset);
+ line = document.get(lineInfo.getOffset(), lineInfo.getLength());
+ } catch (BadLocationException ex) {
+ return null;
+ }
+
+ int offsetInLine = offset - lineInfo.getOffset();
+
+ IHyperlink[] links = BugzillaHyperlinkUtil.findBugHyperlinks(repository.getUrl(), offsetInLine, line, lineInfo
+ .getOffset());
+
+ return links;
+
+ }
+
+}
diff --git a/org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF
index d7cb8818f..8d30da98b 100644
--- a/org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.help.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Mylyn Help
Bundle-SymbolicName: org.eclipse.mylyn.help.ui;singleton:=true
-Bundle-Version: 2.0.0.v20070627-0100
+Bundle-Version: 2.0.0.v20070627-1400
Eclipse-AutoStart: true
Bundle-Vendor: Eclipse.org
Require-Bundle: org.eclipse.ui,
@@ -13,4 +13,3 @@ Require-Bundle: org.eclipse.ui,
Export-Package: org.eclipse.mylyn.internal.help.ui.actions,
org.eclipse.mylyn.internal.help.ui.dialogs
Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Bundle-ClassPath: .
diff --git a/org.eclipse.mylyn.help.ui/doc/images/2.0/ui-legend.gif b/org.eclipse.mylyn.help.ui/doc/images/2.0/ui-legend.gif
new file mode 100644
index 000000000..6778787af
--- /dev/null
+++ b/org.eclipse.mylyn.help.ui/doc/images/2.0/ui-legend.gif
Binary files differ
diff --git a/org.eclipse.mylyn.help.ui/doc/images/2.0/welcome.gif b/org.eclipse.mylyn.help.ui/doc/images/2.0/welcome.gif
new file mode 100644
index 000000000..3fe38ce0b
--- /dev/null
+++ b/org.eclipse.mylyn.help.ui/doc/images/2.0/welcome.gif
Binary files differ
diff --git a/org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-edit.gif b/org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-edit.gif
new file mode 100644
index 000000000..d33b015f5
--- /dev/null
+++ b/org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-edit.gif
Binary files differ
diff --git a/org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-switch.gif b/org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-switch.gif
new file mode 100644
index 000000000..986cdae4e
--- /dev/null
+++ b/org.eclipse.mylyn.help.ui/doc/images/2.0/working-sets-switch.gif
Binary files differ
diff --git a/org.eclipse.mylyn.help.ui/doc/images/mylyn-2.0.png b/org.eclipse.mylyn.help.ui/doc/images/mylyn-2.0.png
new file mode 100644
index 000000000..566b2eb4f
--- /dev/null
+++ b/org.eclipse.mylyn.help.ui/doc/images/mylyn-2.0.png
Binary files differ
diff --git a/org.eclipse.mylyn.help.ui/doc/new.html b/org.eclipse.mylyn.help.ui/doc/new.html
index 1dff8ca83..216e005ba 100644
--- a/org.eclipse.mylyn.help.ui/doc/new.html
+++ b/org.eclipse.mylyn.help.ui/doc/new.html
@@ -1,6 +1,18 @@
<html>
+<head><title>Eclipse Mylar Downloads</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<meta name="author" content="Mik Kersten" />
+<meta name="keywords" content="Mylar, Eclipse" />
+
+<link rel="stylesheet" type="text/css" href="http://eclipse.org/eclipse.org-common/themes/Lazarus/css/visual.css" media="screen" />
+
+</head>
+
<body bgcolor="FFFFFF">
+<p>For the current New &amp; Noteworthy see: <b>
+<a href="http://www.eclipse.org/mylyn/doc/new.php">
+http://eclipse.org/mylyn/doc/new</a></b></p>
+
<table border="1" style="border-collapse: collapse" width="100%" id="table128" cellpadding="4" bordercolor="#FFFFFF">
<tr>
<td bgcolor="#595791" width="7%" align="center"><b>
@@ -12,12 +24,23 @@
<font color="#FFFFFF" size="1">Community Contributions</font></b></td>
</tr>
<tr>
- <td bgcolor="#E0D0E6"><font size="1">2.0M3<br>
+ <td bgcolor="#FAF7FB"><font size="1">2.0<br>
+ <i>Jun. 29</i></font></td>
+ <td bgcolor="#FAF7FB" align="center">
+ <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylyn&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2007-05-15&chfieldto=2007-06-29&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">
+ <font size="1">298</font><br><font size="1">bugs</font></a></td>
+ <td bgcolor="#FAF7FB"><font size="1">Key contributions and patches were
+ provided by Leo Dos Santos, Balazs Brinkus, Shawn Minto, Willian
+ Mitsuda, Frank Becker, Erik Pearson, Meghan Allen, Christian Dupuis,
+ Tomasz Zarna, David Green and Mark Phippard.</font></td>
+ </tr>
+ <tr>
+ <td bgcolor="#FAF7FB"><font size="1">2.0M3<br>
<i>May. 14</i></font></td>
- <td bgcolor="#E0D0E6" align="center">
+ <td bgcolor="#FAF7FB" align="center">
<a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Mylyn&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=2007-04-01&chfieldto=2007-05-15&chfield=resolution&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=">
<font size="1">181</font><br><font size="1">bugs</font></a></td>
- <td bgcolor="#E0D0E6"><font size="1">Meghan Allen made significant
+ <td bgcolor="#FAF7FB"><font size="1">Meghan Allen made significant
improvements to the UI Usage Reporting infrastructure that she has
contributed.&nbsp; Shawn Minto resolved 6 bugs and provided numerous
fixes. Boris Pruessmann contributed task editor content assist.
@@ -37,7 +60,8 @@
helped with proxy settings patches and Nathan Hapke set up a Bugzilla
3.0 test server.&nbsp; Additional bug fixes and enhancements were
provided by John Anvik, Wayne Beaton, Juerg Billeter, Leo Dos Santos,
- Igor Fedorenko, Jean-Michel Lemieux, Benjamin Pasero and Boris Pruessmann. </font></td>
+ Igor Fedorenko, Jean-Michel Lemieux, Benjamin Pasero and Boris
+ Pruessmann. </font></td>
</tr>
<tr>
<td bgcolor="#FAF7FB"><font size="1">2.0M1<br>
@@ -56,56 +80,59 @@
</table>
<p><b>Also see the New &amp; Noteworthy for:
-<a href="http://eclipse.org/mylyn/doc/new-1.0.html">Mylyn 0.6-1.0</a>, <a href="http://eclipse.org/mylyn/doc/new-0.5.html">Mylyn 0.5</a>,&nbsp;
-<a href="http://eclipse.org/mylyn/doc/new-0.4.html">Mylyn 0.4</a>, <a href="http://eclipse.org/mylyn/doc/new-0.3.html">Mylyn 0.3</a></b></p>
+<a href="http://eclipse.org/mylyn/doc/new-1.0.html">Mylyn 0.6-1.0</a>, <a href="http://eclipse.org/mylyn/doc/new-0.5.html">
+Mylyn 0.5</a>,&nbsp;
+<a href="http://eclipse.org/mylyn/doc/new-0.4.html">Mylyn 0.4</a>, <a href="http://eclipse.org/mylyn/doc/new-0.3.html">
+Mylyn 0.3</a></b></p>
+
+<!--
+
<p><b>Update Notes</b> <br>
&nbsp;&nbsp;&nbsp; - We recommend using the Eclipse 3.3M7 release due to the
numerous UI improvements (see Eclipse 3.3 only items below).<br>
-&nbsp;&nbsp;&nbsp; - 2.0M2 and later releases will reset your task activity timings
-(Mylyn now uses a new and much more robust timing mechanism).<br>
+&nbsp;&nbsp;&nbsp; - 2.0M2 and later releases will reset your task activity
+timings (Mylyn now uses a new and much more robust timing mechanism).<br>
&nbsp;&nbsp;&nbsp; - The offline task data cache will be reset, so submit outgoing changes before
updating.<br>
&nbsp;&nbsp;&nbsp; - If upgrading from a 0.x version, first update to Mylyn 1.0
-and see the corresponding <a href="http://eclipse.org/mylyn/doc/new-1.0.html">
+and see the corresponding <a href="http://eclipse.org/mylar/doc/new-1.0.html">
update notes</a>.<br>
&nbsp;&nbsp;&nbsp; - Trac xml-rpc users: you will
<a href="http://wiki.eclipse.org/index.php/Mylar_FAQ#Trac_Connector">need the
latest</a> XmlRpcPlugin.<br>&nbsp;</p>
+<p><b>Mylar -&gt; Mylyn Migration</b></p>
+<ul>
+ <li>No uninstall necessary during the update, the old plug-ins will
+ automatically be disabled.</li>
+ <li>Can delete all old plug-ins/features either manually or via the Update
+ Manager.</li>
+ <li>All Mylyn preferences will need to be reset.&nbsp; If you set a custom
+ data directory this will need to be reset on start.</li>
+ <li>Project to Task Repository associations will need to be reset.</li>
+</ul>
+<p><b>UI Cleanup</b></p>
+<p>The following things have moved into the Sandbox either because they are not
+at the 2.0 quality level or because they are experimental features.</p>
+<ul>
+ <li>Pause Context Capture</li>
+ <li>Active Task on open</li>
+ <li>Synchronize view style overlays</li>
+ <li>Task Activity report</li>
+ <li>Legend moved to view menu</li>
+</ul>
+-->
<hr>
-<h2>Tasks</h2>
+<h2><a name="help">Help</a></h2>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylyn/doc/images/dev/ id="table340">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table355">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
- <p align="right"><b>New Task List layout</b></p>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
+ <p align="right"><b>Welcome Content</b></p>
</td>
<td valign="top" width="70%">
- The <i>Task List</i> layout has been updated to use a custom drawn
- tree instead of relying on multiple columns in order to provide the
- following improvements:<ul>
- <li>Support for subtasks (for an example see the Bugzilla section)</li>
- <li>The icon columns no longer take up a large amount of
- horizontal space, making more of the Summary visible.&nbsp; Sort
- using <i>Sort by</i> in the view menu.</li>
- <li>The table header and horizontal scrollbar are gone, making
- 2-3 more tasks visible.</li>
- <li>The icon scheme has been updated to make incoming indicators
- easier to pick out, hits more consistent with tasks, and the
- kind of task appear on the icon (see the <i>Help -&gt; Mylyn UI
- Legend</i> for the updated scheme).&nbsp; Note in particular
- that new tasks now have the task icon background and are
- distinguished by a special incoming indicator.</li>
- </ul>
- <p>Note that the incoming overlays can also be configured to use the
- Synchronize view style icons and left-facing placement via <i>Preferences -&gt; Task List
- -&gt; Layout</i>.&nbsp; Please use
- <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=182772">bug
- 182772</a> for feedback or reporting any OS-specific rendering
- problems.</p>
- <p>
- <img src="images/2.0M3/tasklist-tree.gif"></td>
+ <p class="MsoPlainText">...<img src="images/2.0/welcome.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -116,13 +143,13 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table346">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
<p align="right"><b>UI Legend for Connectors</b></p>
</td>
<td valign="top" width="70%">
<i>Help -&gt; Mylyn UI Legend</i> now displays connector-specific icon
contributions.&nbsp; <p>
- <img src="images/2.0M3/ui-legend-connectors.gif"></td>
+ <img src="images/2.0/ui-legend.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -131,17 +158,30 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table335">
+<p>&nbsp;</p>
+<h2><a name="task-list">Task List</a></h2>
+
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table353">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
- <p align="right"><b>Content Assist in Task Editor</b></p>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
+ <p align="right"><b>Mylyn Working Sets</b></p>
</td>
<td valign="top" width="70%">
- The Task Editor now supports content assist.&nbsp; The proposals include
- all usernames/emails associated with an &quot;Assigned to&quot; for all bugs in
- the repository.&nbsp; The username in the repository credentials is used
- to highlight your username.<p>
- <img src="images/2.0M3/tasks-content-assist.gif"></td>
+ <p class="MsoPlainText">Mylyn now provides a unified working set
+ mechanism for tasks and resources.&nbsp; Using the bar on the Task
+ List create working sets that includes queries, categories and
+ workspace projects.&nbsp; As long as Eclipse views are set to show
+ the Window Working Set (this is the default), switching Mylyn
+ working sets will cause both the Task List and Eclipse views to show
+ only the elements that have been selected to be part of the working
+ set when the views are <i>not</i> focused on the Active task.&nbsp;
+ When views like the Package Explorer are focused and you navigate
+ across working sets the elements will still populate the view as
+ expected<p class="MsoPlainText">
+ <img src="images/2.0/working-sets-switch.gif"><p class="MsoPlainText">
+ To edit the working set use the pull-down menu visible above or
+ click the working set&#39;s label.<p class="MsoPlainText">
+ <img src="images/2.0/working-sets-edit.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -150,16 +190,37 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table347">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table340">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
- <p align="right"><b>Task tooltips show changes</b></p>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
+ <p align="right"><b>New Task List layout</b></p>
</td>
<td valign="top" width="70%">
- Task List tooltips now summarize incoming changes, making it easier
- to scan for changes without opening the task editor.&nbsp; Note that
- the popup menu can be used to mark tasks read without opening.<p>
- <img src="images/2.0M3/task-tooltip-incoming.gif"></td>
+ The <i>Task List</i> layout has been updated to use a custom drawn
+ tree instead of relying on multiple columns in order to provide the
+ following improvements:<ul>
+ <li>Support for subtasks (for an example see the Bugzilla
+ section)</li>
+ <li>The icon columns no longer take up a large amount of
+ horizontal space, making more of the Summary visible.&nbsp; Sort
+ using <i>Sort by</i> in the view menu.</li>
+ <li>The table header and horizontal scrollbar are gone, making
+ 2-3 more tasks visible.</li>
+ <li>The icon scheme has been updated to make incoming indicators
+ easier to pick out, hits more consistent with tasks, and the
+ kind of task appear on the icon (see the <i>Help -&gt; Mylyn UI
+ Legend</i> for the updated scheme).&nbsp; Note in particular
+ that new tasks now have the task icon background and are
+ distinguished by a special incoming indicator.</li>
+ </ul>
+ <p>Note that the incoming overlays can also be configured to use the
+ Synchronize view style icons and left-facing placement via <i>
+ Preferences -&gt; Task List -&gt; Layout</i>.&nbsp; Please use
+ <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=182772">bug
+ 182772</a> for feedback or reporting any OS-specific rendering
+ problems.</p>
+ <p>
+ <img src="images/2.0M3/tasklist-tree.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -168,25 +229,22 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table342">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table324">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
- <p align="right"><b>Task Working Sets<br>
- (Experimental)<br>
- 3.3 only</b></p>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
+ <p align="right"><b>Scheduled Presentation</b></p>
</td>
<td valign="top" width="70%">
- Categories and Queries can be added to a Task Working Set.&nbsp;
- Switching Task Working Sets makes only the tasks for that working
- set appear.&nbsp; This can be useful for those with a large Task
- List, several non-overlapping projects, different sets of tasks for
- different venues (e.g. home vs. work).&nbsp; For 2.0M3 switching
- working sets is only supported via the working set switcher on the
- main toolbar.&nbsp; To switch to see only one working set
- you need to Ctrl+click that working set, otherwise multiple will be
- visible.&nbsp; The create a new Task Working Set use the <i>Edit...</i>
- button visible below.<p>
- <img src="images/2.0M3/tasks-working-sets.gif"></td>
+ The <i>Task Activity</i> view has been removed and replaced by the
+ <i>Scheduled</i> presentation of the <i>Task List</i>.&nbsp; When in
+ focused mode this presentation shows only the tasks scheduled for
+ the current workweek.&nbsp; Since unscheduled query hits will not
+ show, this makes it easier to work without getting distracted by
+ incoming items.&nbsp; To focus on the workday, use the <i>Go Into</i>
+ action on the day container.&nbsp; When the focused mode is off,
+ this presentation both past task activity and tasks scheduled for
+ the future.&nbsp;&nbsp; <p>
+ <img src="images/2.0M2/tasklist-schedule.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -195,24 +253,17 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table337">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table313">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
- <p align="right"><b>Offline Improvements</b></p>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
+ <p align="right"><b>Drag and Drop improvements</b></p>
</td>
<td valign="top" width="70%">
- The offline support has been improved to be more transparent.&nbsp;
- Offline data for all tasks, even unread ones, is downloaded in the
- background, so before going offline all you need to do is run one successful
- synchronization.&nbsp; If switching frequently between being connected
- note that you can toggle background synchronizations via the <i>
- Synchronize Automatically</i> button in the <i>Task List</i> view menu.&nbsp;
- Opening repository tasks is now much faster due to synchronization and
- offline concurrency improvements.&nbsp; Any submission errors are now
- shown on the task editor header (Eclipse 3.3) instead of the <i>Error
- Log</i> view.&nbsp; Also note that the <i>History</i> button is now on
- the toolbar and a <i>Submit </i>buttons has been added as well.<p>
- <img src="images/2.0M3/task-editor-error.gif"></td>
+ To attach files to a repository task them onto the Task Editor from
+ a navigator view or operating system window.&nbsp; Dragging a URL
+ that corresponds to a task onto the Task List will cause the
+ corresponding task to be created and added to the Task List, if the
+ corresponding repository exists.</td>
</tr>
<tr>
<td colspan="2">
@@ -221,19 +272,19 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table326">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table315">
<tr>
<td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
- <p align="right"><b>Task Editor Improvements</b></p>
+ <p align="right"><b>Hyperlinks in Java Editor<br>
+ (3.3 only)</b></p>
</td>
<td valign="top" width="70%">
- The performance of repository task opening has improved
- dramatically because there are no more synchronous trips to the
- server and all editor pages load lazily.&nbsp; If editor contents become stale, the
- header will be updated as below (Eclipse 3.3) or a dialog will
- show (Eclipse 3.2).&nbsp; The <i>Synchronize</i> button on the right
- of the header retrieves the latest contents.&nbsp; There have also been numerous layout and improvements.<p>
- <img src="images/2.0M2/task-editor-warning.gif"></td>
+ References to tasks and bugs in the Java Editor and now hyperlinked
+ consistently with the Task Editor.&nbsp; The Task Repository must be
+ defined on the corresponding project (set via <i>Project Properties </i>
+ -&gt; <i>Task Repository</i>). References to tasks must be moused over
+ to turn into hyperlinks.<p>
+ <img src="images/2.0M1/java-editor-hyperlink.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -245,7 +296,7 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table332">
<tr>
<td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
- <p align="right"><b>Hyperlinks in Text Editors<br>
+ <p align="right"><b>Task Hyperlinks in Text Editors<br>
(3.3 only)</b></p>
</td>
<td valign="top" width="70%">
@@ -261,23 +312,16 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table324">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table347">
<tr>
<td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
- <p align="right"><b>Scheduled Task Presentation<br>
- (Experimental)</b></p>
+ <p align="right"><b>Task tooltips show changes</b></p>
</td>
<td valign="top" width="70%">
- The <i>Task Activity</i> view has been removed and replaced by the
- <i>Scheduled</i> presentation of the <i>Task List</i>.&nbsp; When in
- focused
- mode this presentation shows only the tasks scheduled for the
- current workweek.&nbsp; Since unscheduled query hits will not show, this makes it
- easier to work without getting distracted by incoming items.&nbsp; To focus on the workday, use
- the <i>Go Into</i> action on the day container.&nbsp; When the
- focused mode is off, this presentation both past task activity
- and tasks scheduled for the future.&nbsp;&nbsp; <p>
- <img src="images/2.0M2/tasklist-schedule.gif"></td>
+ Task List tooltips now summarize incoming changes, making it easier
+ to scan for changes without opening the task editor.&nbsp; Note that
+ the popup menu can be used to mark tasks read without opening.<p>
+ <img src="images/2.0M3/task-tooltip-incoming.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -286,22 +330,20 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table316">
+<p>&nbsp;</p>
+<h2><a name="task-editor">Task Editor</a></h2>
+
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table335">
<tr>
<td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
- <p align="right"><b>Task Editor lifecycle streamlined</b></p>
+ <p align="right"><b>Content Assist in Task Editor</b></p>
</td>
<td valign="top" width="70%">
- The <i>Task Editor</i> no longer closes on submission, and instead shows
- progress while it synchronizes with the repository. If incoming
- changes occur while editor is open the refresh will preserve and
- mark any outgoing changes.&nbsp; In order to
- clear outgoing changes use the context menu -&gt; <i>Mark </i>-&gt; <i>
- Clear Outgoing</i>.&nbsp; If an editor is opened for a task not in the <i>
- Task List </i>the <i>Add to Task List</i> action can be used on the
- editor's context menu. Formatting of the editor has been improved
- and uses the new form look on Eclipse 3.3.<p>
- <img src="images/2.0M1/task-editor-progress.gif"></td>
+ The Task Editor now supports content assist.&nbsp; The proposals include
+ all usernames/emails associated with an &quot;Assigned to&quot; for all bugs in
+ the repository.&nbsp; The username in the repository credentials is used
+ to highlight your username.<p>
+ <img src="images/2.0M3/tasks-content-assist.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -310,18 +352,24 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table315">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table337">
<tr>
<td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
- <p align="right"><b>Hyperlinks in Java Editor<br>
- (3.3 only)</b></p>
+ <p align="right"><b>Offline Improvements</b></p>
</td>
<td valign="top" width="70%">
- References to tasks and bugs in the Java Editor and now hyperlinked
- consistently with the Task Editor.&nbsp; The Task Repository must be
- defined on the corresponding project (set via <i>Project Properties </i>-&gt; <i>Task Repository</i>).
- References to tasks must be moused over to turn into hyperlinks.<p>
- <img src="images/2.0M1/java-editor-hyperlink.gif"></td>
+ The offline support has been improved to be more transparent.&nbsp;
+ Offline data for all tasks, even unread ones, is downloaded in the
+ background, so before going offline all you need to do is run one
+ successful synchronization.&nbsp; If switching frequently between being
+ connected note that you can toggle background synchronizations via the <i>
+ Synchronize Automatically</i> button in the <i>Task List</i> view menu.&nbsp;
+ Opening repository tasks is now much faster due to synchronization and
+ offline concurrency improvements.&nbsp; Any submission errors are now
+ shown on the task editor header (Eclipse 3.3) instead of the <i>Error
+ Log</i> view.&nbsp; Also note that the <i>History</i> button is now on
+ the toolbar and a <i>Submit </i>buttons has been added as well.<p>
+ <img src="images/2.0M3/task-editor-error.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -330,17 +378,45 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table313">
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table326">
<tr>
<td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
- <p align="right"><b>Drag and Drop improvements</b></p>
+ <p align="right"><b>Task Editor Improvements</b></p>
</td>
<td valign="top" width="70%">
- To attach files to a repository task them onto the Task Editor from
- a navigator view or operating system window.&nbsp; Dragging a URL
- that corresponds to a task onto the Task List will cause the
- corresponding task to be created and added to the Task List, if the
- corresponding repository exists.</td>
+ The performance of repository task opening has improved dramatically
+ because there are no more synchronous trips to the server and all
+ editor pages load lazily.&nbsp; If editor contents become stale, the
+ header will be updated as below (Eclipse 3.3) or a dialog will show
+ (Eclipse 3.2).&nbsp; The <i>Synchronize</i> button on the right of
+ the header retrieves the latest contents.&nbsp; There have also been
+ numerous layout and improvements.<p>
+ <img src="images/2.0M2/task-editor-warning.gif"></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <hr>
+ </td>
+ </tr>
+</table>
+
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table316">
+ <tr>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
+ <p align="right"><b>Task Editor lifecycle streamlined</b></p>
+ </td>
+ <td valign="top" width="70%">
+ The <i>Task Editor</i> no longer closes on submission, and instead
+ shows progress while it synchronizes with the repository. If
+ incoming changes occur while editor is open the refresh will
+ preserve and mark any outgoing changes.&nbsp; In order to clear
+ outgoing changes use the context menu -&gt; <i>Mark </i>-&gt; <i>
+ Clear Outgoing</i>.&nbsp; If an editor is opened for a task not in
+ the <i>
+ Task List </i>the <i>Add to Task List</i> action can be used on the
+ editor&#39;s context menu. Formatting of the editor has been improved
+ and uses the new form look on Eclipse 3.3.<p>
+ <img src="images/2.0M1/task-editor-progress.gif"></td>
</tr>
<tr>
<td colspan="2">
@@ -350,7 +426,7 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</table>
<p>&nbsp;</p>
-<h2>Task Repositories</h2>
+<h2><a name="task-repositories">Task Repositories</a></h2>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table323">
<tr>
@@ -388,11 +464,11 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</table>
<h2>&nbsp;</h2>
-<h2>Team</h2>
+<h2><a name="task-list">Team</a></h2>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table336">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
<p align="right"><b>Hyperlinks in Annotations and History<br>
(3.3 only)</b></p>
</td>
@@ -413,55 +489,11 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</table>
<h2>&nbsp;</h2>
-<h2>Task Context</h2>
-
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table345">
- <tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
- <p align="right"><b>UI Usage Reports<br>
- (Experimental)<br>
- 3.3 only</b></p>
- </td>
- <td valign="top" width="70%">
- <i>File -&gt; New -&gt; Other -&gt; Mylyn -&gt; UI Usage Report</i> will
- generate a report of your perspective, view, preference, command and
- editor usage in Eclipse.&nbsp; This reporting facility builds on the
- Mylyn Monitor used to study early releases of Mylyn and has been
- extended to upload statistics to the mylyn.eclipse.org server where
- they can be accessed by all interested (via the button in the <i>
- Actions</i> section).&nbsp; As before, we will be using these
- statistics as input to evolving and improving the Mylyn UI.&nbsp;
- <p><i>UI Usage Reporting</i> is installable as a separate feature
- that can be used independently of the rest of Mylyn.&nbsp; Currently
- it is only available to Eclipse 3.3 users but will be made available
- to 3.2 users for the next release.&nbsp; If installed it will ask to
- run once every three weeks, at which point you will see statistics
- displayed as below.&nbsp; We then ask that you share your usage data
- with the community, via the <i>Submit to Eclipse.org</i> button, so
- that it can help inform Eclipse developers how the UI is being used.&nbsp;
- Note that only interaction events that have IDs starting with &quot;org.eclipse&quot;
- will be uploaded in order to avoid having private ID names made
- public.&nbsp; Note that the information gathered also includes
- interaction information about elements, so to avoid sharing the IDs
- of private elements make sure to leave on &quot;Obfuscate elements using
- SHA message digest one-way hash&quot; via the <i>Preferences -&gt; Mylyn -&gt;
- Usage Data</i> page.&nbsp; More information on how the monitor works
- can be found in
- <a href="http://wiki.eclipse.org/index.php/Mylar_Integrator_Reference#Monitor_API">
- Eclipsepedia</a>.</p>
- <p>
- <img src="images/2.0M3/ui-usage-report.gif"></td>
- </tr>
- <tr>
- <td colspan="2">
- <hr>
- </td>
- </tr>
-</table>
+<h2><a name="task-focused-ui">Focused UI</a></h2>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table338">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
<p align="right"><b>Context Activation Improvements</b></p>
</td>
<td valign="top" width="70%">
@@ -560,11 +592,11 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</table>
<h2>&nbsp; </h2>
-<h2>Bugzilla Connector</h2>
+<h2><a name="connector-bugzilla">Bugzilla Connector</a></h2>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table343">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
<p align="right"><b>Dependencies show as subtasks<br>
(Experimental)</b></p>
</td>
@@ -625,23 +657,22 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</table>
<p>&nbsp;</p>
-<h2>JIRA Connector</h2>
+<h2><a name="connector-jira">Jira Connector (Incubation)</a></h2>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table344">
<tr>
- <td align="left" valign="top" width="15%" bgcolor=#E0D0E6>
+ <td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
<p align="right"><b>Attachment support</b></p>
</td>
<td valign="top" width="70%">
The JIRA task editor now supports attachments, both for files and
- for task contexts.&nbsp; Submission errors are now displayed
- instead of failing silently.<p>
+ for task contexts.&nbsp; Submission errors are now displayed instead
+ of failing silently.<p>
<img src="images/2.0M3/jira-attachments.gif"></td>
</tr>
<tr>
<td colspan="2">
- <hr>
- </td>
+ &nbsp;</td>
</tr>
</table>
@@ -696,19 +727,55 @@ latest</a> XmlRpcPlugin.<br>&nbsp;</p>
</tr>
</table>
-<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table319">
+<h2>&nbsp; </h2>
+<h2><a name="monitor-usage">UI Usage Reporting (Incubation)</a></h2>
+
+<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table345">
<tr>
<td align="left" valign="top" width="15%" bgcolor=#FAF7FB>
- <p align="right"><b>JIRA Core Services</b></p>
+ <p align="right"><b>UI Usage Reports<br>
+ (Experimental)<br>
+ 3.3 only</b></p>
</td>
<td valign="top" width="70%">
- The JIRA feature will now install without requiring additional
- downloads from Tigris.org.</td>
+ <i>File -&gt; New -&gt; Other -&gt; Mylyn -&gt; UI Usage Report</i> will
+ generate a report of your perspective, view, preference, command and
+ editor usage in Eclipse.&nbsp; This reporting facility builds on the
+ Mylyn Monitor used to study early releases of Mylyn and has been
+ extended to upload statistics to the mylyn.eclipse.org server where
+ they can be accessed by all interested (via the button in the <i>
+ Actions</i> section).&nbsp; As before, we will be using these
+ statistics as input to evolving and improving the Mylyn UI.&nbsp;
+ <p><i>UI Usage Reporting</i> is installable as a separate feature
+ that can be used independently of the rest of Mylyn.&nbsp; Currently
+ it is only available to Eclipse 3.3 users but will be made available
+ to 3.2 users for the next release.&nbsp; If installed it will ask to
+ run once every three weeks, at which point you will see statistics
+ displayed as below.&nbsp; We then ask that you share your usage data
+ with the community, via the <i>Submit to Eclipse.org</i> button, so
+ that it can help inform Eclipse developers how the UI is being used.&nbsp;
+ Note that only interaction events that have IDs starting with
+ &quot;org.eclipse&quot; will be uploaded in order to avoid having private ID
+ names made public.&nbsp; Note that the information gathered also
+ includes interaction information about elements, so to avoid sharing
+ the IDs of private elements make sure to leave on &quot;Obfuscate
+ elements using SHA message digest one-way hash&quot; via the <i>
+ Preferences -&gt; Mylyn -&gt; Usage Data</i> page.&nbsp; More information
+ on how the monitor works can be found in
+ <a href="http://wiki.eclipse.org/index.php/Mylar_Integrator_Reference#Monitor_API">
+ Eclipsepedia</a>.</p>
+ <p>
+ <img src="images/2.0M3/ui-usage-report.gif"></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <hr>
+ </td>
</tr>
</table>
-<h2>&nbsp; </h2>
-<h2>Trac Connector</h2>
+<p>&nbsp;</p>
+<h2><a name="connector-trac">Trac Connector</a></h2>
<table cellpadding="10" cellspacing="0" http://www.eclipse.org/mylar/doc/images/dev/ id="table322">
<tr>
diff --git a/org.eclipse.mylyn.help.ui/doc/overview.html b/org.eclipse.mylyn.help.ui/doc/overview.html
index 9982f28fe..db00a5aa2 100644
--- a/org.eclipse.mylyn.help.ui/doc/overview.html
+++ b/org.eclipse.mylyn.help.ui/doc/overview.html
@@ -28,19 +28,20 @@ tr {
<h2>Mylyn Overview</h2>
-<p>Mylyn is a task-focused UI for Eclipse that makes working with
-very large workspaces as easy as working with small ones. Mylyn extends
-Eclipse with mechanisms for keeping track of the tasks that you work on.
-A task is defined as any unit of work that you want to recall or share
-with others, such as a bug reported by a user or a note to yourself
-about improving a feature. You can store tasks locally in your
-workspace, or they can come from one or more task repositories. To
-connect to a task repository, you must have a connector that supports
-that repository. (A task repository is a bug/ticket/issue tracker such
-as Bugzilla, Trac, or JIRA).</p>
+<p>Mylyn documentation is available online at: <b>
+<a href="http://eclipse.org/mylyn/start/">http://eclipse.org/mylyn/start</a>
+</b></p>
+<p>Mylyn is a task-focused UI for Eclipse that makes working with very large
+workspaces as easy as working with small ones. Mylyn extends Eclipse with rich
+facilities for keeping track of the tasks that you work and collaborate on. A
+task is defined as any unit of work that you want to recall or share with
+others, such as a bug reported by a user or a note to yourself about improving a
+feature. You can store tasks locally in your workspace, or they can come from
+one or more task repositories. To connect to a task repository, for example a
+bug tracker such as Bugzilla, you must have a connector that supports that
+repository. </p>
<p>Once your tasks are integrated, Mylyn monitors your work activity
on those tasks to identify information relevant to the task-at-hand.
-Mylyn monitors Eclipse and captures your interaction in a task context.
System artifacts such as files, types, methods, and fields get assigned
a degree-of-interest based on how recently and frequently you interact
with them. This results in uninteresting elements being filtered from
@@ -55,5 +56,6 @@ your productivity by reducing the time you spend searching, scrolling,
and navigating. By making task context explicit, Mylyn also facilitates
multitasking, planning, reusing past efforts, and sharing expertise.</p>
+<img src=images/mylyn-2.0.png>
</body>
-</html>
+</html> \ No newline at end of file
diff --git a/org.eclipse.mylyn.tasks.ui/plugin.xml b/org.eclipse.mylyn.tasks.ui/plugin.xml
index a23b34ee0..43c80c670 100644
--- a/org.eclipse.mylyn.tasks.ui/plugin.xml
+++ b/org.eclipse.mylyn.tasks.ui/plugin.xml
@@ -252,6 +252,17 @@
<viewContribution
id="org.eclipse.mylyn.tasks.ui.actions.view"
targetID="org.eclipse.mylyn.tasks.ui.views.tasks">
+
+ <action
+ class="org.eclipse.mylyn.internal.tasks.ui.actions.SynchronizeAllAction"
+ enablesFor="*"
+ icon="icons/etool16/repository-synchronize.gif"
+ id="org.eclipse.mylyn.tasks.ui.synchronize.changed"
+ label="Synchronize Changed"
+ menubarPath="tasks"
+ toolbarPath="new"
+ tooltip="Synchronize Changed">
+ </action>
<action
class="org.eclipse.mylyn.internal.tasks.ui.actions.RestoreTaskListAction"
icon="icons/etool16/import.gif"
@@ -270,17 +281,6 @@
menubarPath="tasks"
tooltip="Show Task Repositories View">
</action>
-
- <action
- class="org.eclipse.mylyn.internal.tasks.ui.actions.SynchronizeAllAction"
- enablesFor="*"
- icon="icons/etool16/repository-synchronize.gif"
- id="org.eclipse.mylyn.tasks.ui.synchronize.changed"
- label="Synchronize Changed"
- menubarPath="tasks"
- toolbarPath="new"
- tooltip="Synchronize Changed">
- </action>
<action
class="org.eclipse.mylyn.internal.tasks.ui.actions.OpenTaskSearchAction"
icon="icons/elcl16/task-search.gif"
@@ -769,12 +769,22 @@
</factory>
</extension>
+ <extension
+ point="org.eclipse.mylyn.tasks.ui.editors">
+ <hyperlinkDetector
+ class="org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorUrlHyperlinkDetector"
+ id="org.eclipse.mylyn.tasklist.hyperlinkdetector.url"/>
+ </extension>
+
+
<extension point="org.eclipse.core.runtime.adapters">
+ <!--
<factory
adaptableType="org.eclipse.mylyn.tasks.core.AbstractTaskContainer"
class="org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetAdapterFactory">
<adapter type="org.eclipse.ui.IPersistableElement"/>
</factory>
+ -->
<factory
adaptableType="org.eclipse.mylyn.tasks.core.TaskRepository"
class="org.eclipse.mylyn.internal.tasks.ui.TaskRepositoryAdapterFactory">
@@ -782,6 +792,7 @@
</factory>
</extension>
+<!--
<extension
point="org.eclipse.ui.elementFactories">
<factory
@@ -789,6 +800,7 @@
id="org.eclipse.mylyn.tasks.ui.workingSets.elementFactory">
</factory>
</extension>
+ -->
<extension
id="org.eclipse.mylyn.tasks.local.repository"
name="Local Task Repository"
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java
index 6df5b21b1..a35028fb3 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListNotificationPopup.java
@@ -153,7 +153,7 @@ public class TaskListNotificationPopup extends PopupDialog {
section.setTextClient(hyperlink);
- form.pack();
+ parent.pack();
return form;
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskWorkingSetAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskWorkingSetAction.java
deleted file mode 100644
index b23c90392..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/TaskWorkingSetAction.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 Mylar 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.actions;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuCreator;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages;
-import org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetUpdater;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkingSet;
-import org.eclipse.ui.IWorkingSetManager;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.IWorkingSetEditWizard;
-import org.eclipse.ui.internal.WorkbenchMessages;
-import org.eclipse.ui.internal.WorkbenchPlugin;
-import org.eclipse.ui.internal.WorkingSetComparator;
-import org.eclipse.ui.internal.dialogs.AbstractWorkingSetDialog;
-import org.eclipse.ui.internal.dialogs.WorkingSetFilter;
-import org.eclipse.ui.internal.dialogs.WorkingSetLabelProvider;
-
-/**
- * Derived from SelectWorkingSetsAction
- *
- * @author Leo Dos Santos
- * @author Mik Kersten
- */
-public class TaskWorkingSetAction extends Action implements IMenuCreator {
-
- public static final String LABEL_SETS_NONE = "All";
-
- public static String TASK_WORKING_SET_TEXT_LABEL = "Select and Edit Working Sets";
-
- private Menu dropDownMenu = null;
-
- public TaskWorkingSetAction() {
- super();
- setText("Sets");
- setToolTipText(TASK_WORKING_SET_TEXT_LABEL);
- setImageDescriptor(TasksUiImages.TASK_WORKING_SET);
- setEnabled(true);
- setMenuCreator(this);
- }
-
- public void dispose() {
- if (dropDownMenu != null) {
- dropDownMenu.dispose();
- dropDownMenu = null;
- }
- }
-
- public Menu getMenu(Control parent) {
- if (dropDownMenu != null) {
- dropDownMenu.dispose();
- }
- dropDownMenu = new Menu(parent);
- addActionsToMenu();
- return dropDownMenu;
- }
-
- public Menu getMenu(Menu parent) {
- if (dropDownMenu != null) {
- dropDownMenu.dispose();
- }
- dropDownMenu = new Menu(parent);
- addActionsToMenu();
- return dropDownMenu;
- }
-
- @SuppressWarnings("unchecked")
- private void addActionsToMenu() {
- IWorkingSet[] workingSets = PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
-
- if (doTaskWorkingSetsExist()) {
- ActionContributionItem itemAll = new ActionContributionItem(new ToggleAllWorkingSetsAction(PlatformUI.getWorkbench().getActiveWorkbenchWindow()));
-// ActionContributionItem itemNone = new ActionContributionItem(new ToggleNoWorkingSetsAction());
-
- List<IWorkingSet> sortedWorkingSets = Arrays.asList(workingSets);
- Collections.sort(sortedWorkingSets, new WorkingSetComparator());
-
- Iterator<IWorkingSet> iter = sortedWorkingSets.iterator();
- while (iter.hasNext()) {
- IWorkingSet workingSet = iter.next();
- if (workingSet != null && workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- ActionContributionItem itemSet = new ActionContributionItem(new ToggleWorkingSetAction(workingSet));
- itemSet.fill(dropDownMenu, -1);
- }
- }
-
- Separator separator = new Separator();
- separator.fill(dropDownMenu, -1);
- itemAll.fill(dropDownMenu, -1);
- }
-
- ActionContributionItem editItem = new ActionContributionItem(new ManageWorkingSetsAction());
- editItem.fill(dropDownMenu, -1);
- }
-
- private boolean doTaskWorkingSetsExist() {
- IWorkingSet[] workingSets = PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
- for (IWorkingSet workingSet : workingSets) {
- if (workingSet != null && workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public void run() {
- String[] ids = new String[1];
- ids[0] = TaskWorkingSetUpdater.ID_TASK_WORKING_SET;
- ConfigureWindowWorkingSetsDialog dialog = new ConfigureWindowWorkingSetsDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), ids);
- dialog.open();
- }
-
- public void run(IAction action) {
- this.run();
- }
-
- public void run(IWorkingSet editWorkingSet) {
- IWorkingSetManager manager = WorkbenchPlugin.getDefault().getWorkingSetManager();
- IWorkingSetEditWizard wizard = manager.createWorkingSetEditWizard(editWorkingSet);
- WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), wizard);
-
-// dialog.create();
- dialog.open();
-// PlatformUI.getWorkbench().getHelpSystem().setHelp(dialog.getShell(),
-// IWorkbenchHelpContextIds.WORKING_SET_EDIT_WIZARD);
-// if (dialog.open() == Window.OK) {
-// editWorkingSet = wizard.getSelection();
-// availableWorkingSetsChanged();
-// // make sure ok button is enabled when the selected working set
-// // is edited. Fixes bug 33386.
-// updateButtonAvailability();
-// }
-// editedWorkingSets.put(editWorkingSet, originalWorkingSet);
- }
-
- private class ManageWorkingSetsAction extends Action {
- ManageWorkingSetsAction() {
- super(WorkbenchMessages.Edit);
- }
-
- @Override
- public void run() {
- TaskWorkingSetAction.this.run(this);
- }
- }
-
- // TODO: remove?
- protected class ToggleEnableAllSetsAction extends Action {
-
- ToggleEnableAllSetsAction() {
- super("Deselect All", IAction.AS_CHECK_BOX);
-// setImageDescriptor(TasksUiImages.TASK_WORKING_SET);
-// setChecked(!areAllTaskWorkingSetsEnabled());
- }
-
- @Override
- public void runWithEvent(Event event) {
- Set<IWorkingSet> newList = new HashSet<IWorkingSet>(Arrays.asList(TaskWorkingSetUpdater.getEnabledSets()));
-
- Set<IWorkingSet> tempList = new HashSet<IWorkingSet>();
- Iterator<IWorkingSet> iter = newList.iterator();
- while (iter.hasNext()) {
- IWorkingSet workingSet = iter.next();
- if (workingSet != null && workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- tempList.add(workingSet);
- }
- }
- newList.removeAll(tempList);
-
- if (isChecked()) {
- IWorkingSet[] allWorkingSets = PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
- for (IWorkingSet workingSet : allWorkingSets) {
- if (workingSet != null && workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- newList.add(workingSet);
- }
- }
- }
-
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().setWorkingSets(newList.toArray(new IWorkingSet[newList.size()]));
- }
-
- }
-
- class ConfigureWindowWorkingSetsDialog extends AbstractWorkingSetDialog {
-
- private final static int SIZING_SELECTION_WIDGET_HEIGHT = 200;
-
- private final static int SIZING_SELECTION_WIDGET_WIDTH = 50;
-
- private IWorkbenchWindow window;
-
- private CheckboxTableViewer viewer;
-
- private Set<String> taskWorkingSetIds;
-
- protected ConfigureWindowWorkingSetsDialog(IWorkbenchWindow window, String[] workingSetIds) {
- super(window.getShell(), workingSetIds);
- setShellStyle(getShellStyle() | SWT.RESIZE);
- this.window = window;
- //setTitle(WorkbenchMessages.WorkingSetSelectionDialog_title_multiSelect);
- setTitle(TASK_WORKING_SET_TEXT_LABEL);
- setMessage(WorkbenchMessages.WorkingSetSelectionDialog_message_multiSelect);
-
- if (workingSetIds == null || workingSetIds.length == 0) {
- taskWorkingSetIds = null;
- } else {
- taskWorkingSetIds = new HashSet<String>();
- for (String id : workingSetIds) {
- taskWorkingSetIds.add(id);
- }
- }
- }
-
- @Override
- protected Control createDialogArea(Composite parent) {
- initializeDialogUnits(parent);
-
- Composite composite = (Composite) super.createDialogArea(parent);
-
- Composite viewerComposite = new Composite(composite, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
- layout.marginHeight = layout.marginWidth = 0;
- layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
- layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
- viewerComposite.setLayout(layout);
-
- GridData data = new GridData(GridData.FILL_BOTH);
- data.heightHint = SIZING_SELECTION_WIDGET_HEIGHT;
- data.widthHint = SIZING_SELECTION_WIDGET_WIDTH + 300; // fudge? I like fudge.
- viewerComposite.setLayoutData(data);
-
- viewer = CheckboxTableViewer.newCheckList(viewerComposite, SWT.BORDER);
- viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
- viewer.setLabelProvider(new WorkingSetLabelProvider());
- viewer.setContentProvider(new ArrayContentProvider());
- viewer.addFilter(new WorkingSetFilter(taskWorkingSetIds));
- viewer.setInput(window.getWorkbench().getWorkingSetManager().getWorkingSets());
-
- viewer.setCheckedElements(window.getActivePage().getWorkingSets());
-
- viewer.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- handleSelectionChanged();
- }
- });
-
- data = new GridData(GridData.FILL_BOTH);
- data.heightHint = SIZING_SELECTION_WIDGET_HEIGHT;
- data.widthHint = SIZING_SELECTION_WIDGET_WIDTH;
-
- viewer.getControl().setLayoutData(data);
- addModifyButtons(viewerComposite);
-
- addSelectionButtons(composite);
-
- availableWorkingSetsChanged();
-
- Dialog.applyDialogFont(composite);
-
- return composite;
- }
-
- @Override
- protected void okPressed() {
- Set<IWorkingSet> newList = new HashSet<IWorkingSet>(Arrays.asList(TaskWorkingSetUpdater.getEnabledSets()));
- Set<IWorkingSet> tempList = new HashSet<IWorkingSet>();
- for (IWorkingSet workingSet : newList) {
- for (String id : taskWorkingSetIds) {
- if (workingSet.getId().equalsIgnoreCase(id)) {
- tempList.add(workingSet);
- }
- }
- }
- newList.removeAll(tempList);
-
- Object[] selection = viewer.getCheckedElements();
- IWorkingSet[] setsToEnable = new IWorkingSet[selection.length];
- System.arraycopy(selection, 0, setsToEnable, 0, selection.length);
- newList.addAll(new HashSet<IWorkingSet>(Arrays.asList(setsToEnable)));
-
- window.getActivePage().setWorkingSets(newList.toArray(new IWorkingSet[newList.size()]));
- super.okPressed();
- }
-
- @Override
- protected List<?> getSelectedWorkingSets() {
- ISelection selection = viewer.getSelection();
- if (selection instanceof IStructuredSelection) {
- return ((IStructuredSelection) selection).toList();
- }
- return null;
- }
-
- @Override
- protected void availableWorkingSetsChanged() {
- viewer.setInput(window.getWorkbench().getWorkingSetManager().getWorkingSets());
-// super.availableWorkingSetsChanged();
- }
-
- /**
- * Called when the selection has changed.
- */
- void handleSelectionChanged() {
- updateButtonAvailability();
- }
-
- @Override
- protected void configureShell(Shell shell) {
- super.configureShell(shell);
- }
-
- @Override
- protected void selectAllSets() {
- viewer.setCheckedElements(window.getWorkbench().getWorkingSetManager().getWorkingSets());
- updateButtonAvailability();
- }
-
- @Override
- protected void deselectAllSets() {
- viewer.setCheckedElements(new Object[0]);
- updateButtonAvailability();
- }
- }
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleAllWorkingSetsAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleAllWorkingSetsAction.java
deleted file mode 100644
index 06f3db17f..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleAllWorkingSetsAction.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- * University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.actions;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetUpdater;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkingSet;
-
-/**
- * @author Mik Kersten
- */
-public class ToggleAllWorkingSetsAction extends Action {
-
- private IWorkbenchWindow window;
-
- public ToggleAllWorkingSetsAction(IWorkbenchWindow window) {
- super("Show All", IAction.AS_CHECK_BOX);
- super.setChecked(TaskWorkingSetUpdater.areNoTaskWorkingSetsEnabled());
- this.window = window;
- }
-
- @Override
- public void run() {
- Set<IWorkingSet> newList = new HashSet<IWorkingSet>(Arrays.asList(TaskWorkingSetUpdater.getEnabledSets()));
-
- Set<IWorkingSet> tempList = new HashSet<IWorkingSet>();
- Iterator<IWorkingSet> iter = newList.iterator();
- while (iter.hasNext()) {
- IWorkingSet workingSet = iter.next();
- if (workingSet != null && workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- tempList.add(workingSet);
- }
- }
- newList.removeAll(tempList);
- window.getActivePage().setWorkingSets(newList.toArray(new IWorkingSet[newList.size()]));
- }
-
- @Override
- public void runWithEvent(Event event) {
- run();
- }
-} \ No newline at end of file
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleWorkingSetAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleWorkingSetAction.java
deleted file mode 100644
index 6dde9a9bf..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/ToggleWorkingSetAction.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 University Of British Columbia 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:
- * University Of British Columbia - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.tasks.ui.actions;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.bindings.keys.IKeyLookup;
-import org.eclipse.jface.bindings.keys.KeyLookupFactory;
-import org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetUpdater;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.ui.IWorkingSet;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * @author Mik Kersten
- */
-public class ToggleWorkingSetAction extends Action {
-
- private IWorkingSet workingSet;
-
- public ToggleWorkingSetAction(IWorkingSet set) {
- super(set.getLabel(), IAction.AS_CHECK_BOX);
-// setImageDescriptor(set.getImageDescriptor());
- this.workingSet = set;
- setChecked(TaskWorkingSetUpdater.isWorkingSetEnabled(set));
- }
-
- @Override
- public void run() {
- runWithEvent(null);
- }
-
- @Override
- public void runWithEvent(Event event) {
- Set<IWorkingSet> newList = new HashSet<IWorkingSet>(Arrays.asList(TaskWorkingSetUpdater.getEnabledSets()));
-
- boolean modified = false;
- if (event != null) {
- modified = (event.stateMask & KeyLookupFactory.getDefault().formalModifierLookup(IKeyLookup.M1_NAME)) != 0;
- }
-
- if (!modified) {
- // Default behavior is to act as a radio button.
- Set<IWorkingSet> tempList = new HashSet<IWorkingSet>();
- Iterator<IWorkingSet> iter = newList.iterator();
- while (iter.hasNext()) {
- IWorkingSet workingSet = iter.next();
- if (workingSet != null
- && workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- tempList.add(workingSet);
- }
- }
- newList.removeAll(tempList);
-
- if (isChecked()) {
- newList.add(workingSet);
- } else {
- // If multiples were previously selected, make this action active
- if (!TaskWorkingSetUpdater.isOnlyTaskWorkingSetEnabled(workingSet)) {
- newList.add(workingSet);
- }
- }
- } else {
- // If modifier key is pressed, de/selections are additive.
- if (isChecked()) {
- newList.add(workingSet);
- } else {
- newList.remove(workingSet);
- }
- }
-
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().setWorkingSets(
- newList.toArray(new IWorkingSet[newList.size()]));
- }
-
-} \ No newline at end of file
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java
new file mode 100644
index 000000000..d1f5d43a7
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorUrlHyperlinkDetector.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 Mylar 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.editors;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
+import org.eclipse.jface.text.hyperlink.URLHyperlink;
+import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
+
+/**
+ * @author Rob Elves
+ */
+public class TaskEditorUrlHyperlinkDetector implements IHyperlinkDetector {
+
+ // URL BNF: http://www.foad.org/~abigail/Perl/url2.html
+ // Source:
+ // http://www.truerwords.net/articles/ut/urlactivation.html#expressions
+ // Original pattern: (^|[
+ // \\t\\r\\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))
+ private static final Pattern urlPattern = Pattern
+ .compile(
+ "((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]*))?([A-Za-z0-9$_+!*;/?:~-]))",
+ Pattern.CASE_INSENSITIVE);
+
+ public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
+
+ if (region == null || textViewer == null)
+ return null;
+
+ IDocument document = textViewer.getDocument();
+
+ List<IHyperlink> hyperlinksFound = new ArrayList<IHyperlink>();
+
+ int offset = region.getOffset();
+
+ if (document == null)
+ return null;
+
+ IRegion lineInfo;
+ String line;
+ try {
+ lineInfo = document.getLineInformationOfOffset(offset);
+ line = document.get(lineInfo.getOffset(), lineInfo.getLength());
+ } catch (BadLocationException ex) {
+ return null;
+ }
+
+ int offsetInLine = offset - lineInfo.getOffset();
+
+ Matcher m = urlPattern.matcher(line);
+
+ while (m.find()) {
+ if (offsetInLine >= m.start() && offsetInLine <= m.end()) {
+ IHyperlink link = extractHyperlink(lineInfo.getOffset(), m);
+ if (link != null)
+ hyperlinksFound.add(link);
+ }
+ }
+
+ if (hyperlinksFound.size() > 0) {
+ return hyperlinksFound.toArray(new IHyperlink[hyperlinksFound.size()]);
+ }
+
+ return null;
+
+ }
+
+ private TaskEditorUrlHyperlink extractHyperlink(int lineOffset, Matcher m) {
+
+ int start = m.start();
+ int end = m.end();
+
+ if (end == -1)
+ end = m.group().length();
+
+ start += lineOffset;
+ end += lineOffset;
+
+ IRegion sregion = new Region(start, end - start);
+ return new TaskEditorUrlHyperlink(sregion, m.group());
+ }
+
+ static class TaskEditorUrlHyperlink extends URLHyperlink {
+
+ public TaskEditorUrlHyperlink(IRegion region, String urlString) {
+ super(region, urlString);
+ }
+
+ @Override
+ public void open() {
+ // TODO: if url is to a repository task, open task instead of url
+ TasksUiUtil.openUrl(getURLString(), true);
+ }
+
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java
index 2b9623f8b..60d323c15 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskPlanningEditor.java
@@ -309,9 +309,6 @@ public class TaskPlanningEditor extends TaskFormPage {
}
private void addHeaderControls() {
-
- System.err.println("!!!!!!!!");
-
if (form.getForm() != null) {
activateAction = new Action() {
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractFilteredTree.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractFilteredTree.java
index 01f981829..b418d0f5f 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractFilteredTree.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/AbstractFilteredTree.java
@@ -128,8 +128,8 @@ public abstract class AbstractFilteredTree extends FilteredTree {
superComposite.setLayout(superLayout);
superComposite.setLayoutData(superLayoutData);
- Composite workingSetComposite = createActiveWorkingSetComposite(superComposite);
- workingSetComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
+// Composite workingSetComposite = createActiveWorkingSetComposite(superComposite);
+// workingSetComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
Composite activeTaskComposite = createActiveTaskComposite(superComposite);
activeTaskComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));
@@ -165,7 +165,7 @@ public abstract class AbstractFilteredTree extends FilteredTree {
protected abstract Composite createProgressComposite(Composite container);
- protected abstract Composite createActiveWorkingSetComposite(Composite container);
+// protected abstract Composite createActiveWorkingSetComposite(Composite container);
protected abstract Composite createActiveTaskComposite(Composite container);
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java
index bafb09410..f91d5724c 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListFilteredTree.java
@@ -31,7 +31,6 @@ import org.eclipse.mylyn.internal.tasks.ui.actions.CopyTaskDetailsAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.OpenTaskListElementAction;
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.TaskWorkingSetAction;
import org.eclipse.mylyn.tasks.core.AbstractTask;
import org.eclipse.mylyn.tasks.core.AbstractTaskContainer;
import org.eclipse.mylyn.tasks.core.ITaskActivityListener;
@@ -48,7 +47,6 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PatternFilter;
import org.eclipse.ui.forms.events.IHyperlinkListener;
@@ -67,8 +65,6 @@ public class TaskListFilteredTree extends AbstractFilteredTree {
private static final String LABEL_SETS_MULTIPLE = "<multiple>";
- private TaskListHyperlink workingSetLink;
-
private TaskListHyperlink activeTaskLink;
private WorkweekProgressBar taskProgressBar;
@@ -81,7 +77,7 @@ public class TaskListFilteredTree extends AbstractFilteredTree {
private int incompleteTime;
- private IWorkingSet currentWorkingSet;
+// private IWorkingSet currentWorkingSet;
private MenuManager activeTaskMenuManager = null;
@@ -202,62 +198,62 @@ public class TaskListFilteredTree extends AbstractFilteredTree {
});
}
- @Override
- protected Composite createActiveWorkingSetComposite(Composite container) {
- final ImageHyperlink workingSetButton = new ImageHyperlink(container, SWT.FLAT);
- workingSetButton.setImage(TasksUiImages.getImage(TasksUiImages.TOOLBAR_ARROW_RIGHT));
- workingSetButton.setToolTipText("Select Working Set");
-
- workingSetLink = new TaskListHyperlink(container, SWT.LEFT);
- workingSetLink.setText(TaskWorkingSetAction.LABEL_SETS_NONE);
- workingSetLink.setUnderlined(false);
- workingSetLink.setForeground(TaskListColorsAndFonts.COLOR_HYPERLINK_WIDGET);
-
- final TaskWorkingSetAction workingSetAction = new TaskWorkingSetAction();
- workingSetButton.addHyperlinkListener(new IHyperlinkListener() {
-
- public void linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent e) {
- workingSetAction.getMenu(workingSetButton).setVisible(true);
- }
-
- public void linkEntered(org.eclipse.ui.forms.events.HyperlinkEvent e) {
- workingSetButton.setImage(TasksUiImages.getImage(TasksUiImages.TOOLBAR_ARROW_DOWN));
- }
-
- public void linkExited(org.eclipse.ui.forms.events.HyperlinkEvent e) {
- workingSetButton.setImage(TasksUiImages.getImage(TasksUiImages.TOOLBAR_ARROW_RIGHT));
- }
- });
-
- workingSetLink.addMouseTrackListener(new MouseTrackListener() {
-
- public void mouseEnter(MouseEvent e) {
- workingSetLink.setUnderlined(true);
- }
-
- public void mouseExit(MouseEvent e) {
- workingSetLink.setUnderlined(false);
- }
-
- public void mouseHover(MouseEvent e) {
- }
- });
-
- indicateActiveTaskWorkingSet();
-
- workingSetLink.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseDown(MouseEvent e) {
- if (currentWorkingSet != null) {
- workingSetAction.run(currentWorkingSet);
- } else {
- workingSetAction.run();
- }
- }
- });
-
- return workingSetLink;
- }
+// @Override
+// protected Composite createActiveWorkingSetComposite(Composite container) {
+// final ImageHyperlink workingSetButton = new ImageHyperlink(container, SWT.FLAT);
+// workingSetButton.setImage(TasksUiImages.getImage(TasksUiImages.TOOLBAR_ARROW_RIGHT));
+// workingSetButton.setToolTipText("Select Working Set");
+//
+// workingSetLink = new TaskListHyperlink(container, SWT.LEFT);
+// workingSetLink.setText(TaskWorkingSetAction.LABEL_SETS_NONE);
+// workingSetLink.setUnderlined(false);
+// workingSetLink.setForeground(TaskListColorsAndFonts.COLOR_HYPERLINK_WIDGET);
+//
+// final TaskWorkingSetAction workingSetAction = new TaskWorkingSetAction();
+// workingSetButton.addHyperlinkListener(new IHyperlinkListener() {
+//
+// public void linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent e) {
+// workingSetAction.getMenu(workingSetButton).setVisible(true);
+// }
+//
+// public void linkEntered(org.eclipse.ui.forms.events.HyperlinkEvent e) {
+// workingSetButton.setImage(TasksUiImages.getImage(TasksUiImages.TOOLBAR_ARROW_DOWN));
+// }
+//
+// public void linkExited(org.eclipse.ui.forms.events.HyperlinkEvent e) {
+// workingSetButton.setImage(TasksUiImages.getImage(TasksUiImages.TOOLBAR_ARROW_RIGHT));
+// }
+// });
+//
+// workingSetLink.addMouseTrackListener(new MouseTrackListener() {
+//
+// public void mouseEnter(MouseEvent e) {
+// workingSetLink.setUnderlined(true);
+// }
+//
+// public void mouseExit(MouseEvent e) {
+// workingSetLink.setUnderlined(false);
+// }
+//
+// public void mouseHover(MouseEvent e) {
+// }
+// });
+//
+// indicateActiveTaskWorkingSet();
+//
+// workingSetLink.addMouseListener(new MouseAdapter() {
+// @Override
+// public void mouseDown(MouseEvent e) {
+// if (currentWorkingSet != null) {
+// workingSetAction.run(currentWorkingSet);
+// } else {
+// workingSetAction.run();
+// }
+// }
+// });
+//
+// return workingSetLink;
+// }
@Override
protected Composite createActiveTaskComposite(final Composite container) {
@@ -350,27 +346,27 @@ public class TaskListFilteredTree extends AbstractFilteredTree {
}
public void indicateActiveTaskWorkingSet() {
- Set<IWorkingSet> activeSets = TaskListView.getActiveWorkingSets();
- if (filterComposite.isDisposed() || activeSets == null) {
- return;
- }
-
- if (activeSets.size() == 0) {
- workingSetLink.setText(TaskWorkingSetAction.LABEL_SETS_NONE);
- workingSetLink.setToolTipText(LABEL_SETS_EDIT);
- currentWorkingSet = null;
- } else if (activeSets.size() > 1) {
- workingSetLink.setText(LABEL_SETS_MULTIPLE);
- workingSetLink.setToolTipText(LABEL_SETS_EDIT);
- currentWorkingSet = null;
- } else {
- Object[] array = activeSets.toArray();
- IWorkingSet workingSet = (IWorkingSet) array[0];
- workingSetLink.setText(workingSet.getLabel());
- workingSetLink.setToolTipText(LABEL_SETS_EDIT);
- currentWorkingSet = workingSet;
- }
- filterComposite.layout();
+// Set<IWorkingSet> activeSets = TaskListView.getActiveWorkingSets();
+// if (filterComposite.isDisposed() || activeSets == null) {
+// return;
+// }
+//
+// if (activeSets.size() == 0) {
+// workingSetLink.setText(TaskWorkingSetAction.LABEL_SETS_NONE);
+// workingSetLink.setToolTipText(LABEL_SETS_EDIT);
+// currentWorkingSet = null;
+// } else if (activeSets.size() > 1) {
+// workingSetLink.setText(LABEL_SETS_MULTIPLE);
+// workingSetLink.setToolTipText(LABEL_SETS_EDIT);
+// currentWorkingSet = null;
+// } else {
+// Object[] array = activeSets.toArray();
+// IWorkingSet workingSet = (IWorkingSet) array[0];
+// workingSetLink.setText(workingSet.getLabel());
+// workingSetLink.setToolTipText(LABEL_SETS_EDIT);
+// currentWorkingSet = workingSet;
+// }
+// filterComposite.layout();
}
public void indicateActiveTask(AbstractTask task) {
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
index 91a231018..4d79c3728 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListView.java
@@ -9,7 +9,6 @@
package org.eclipse.mylyn.internal.tasks.ui.views;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
@@ -85,7 +84,6 @@ 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.views.TaskListTableSorter.SortByIndex;
import org.eclipse.mylyn.internal.tasks.ui.wizards.NewLocalTaskWizard;
-import org.eclipse.mylyn.internal.tasks.ui.workingsets.TaskWorkingSetUpdater;
import org.eclipse.mylyn.monitor.core.StatusHandler;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery;
import org.eclipse.mylyn.tasks.core.AbstractTask;
@@ -1705,21 +1703,21 @@ public class TaskListView extends ViewPart implements IPropertyChangeListener {
}
public static Set<IWorkingSet> getActiveWorkingSets() {
- if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) {
- Set<IWorkingSet> allSets = new HashSet<IWorkingSet>(Arrays.asList(PlatformUI.getWorkbench()
- .getActiveWorkbenchWindow()
- .getActivePage()
- .getWorkingSets()));
- Set<IWorkingSet> tasksSets = new HashSet<IWorkingSet>(allSets);
- for (IWorkingSet workingSet : allSets) {
- if (workingSet.getId() == null || !workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- tasksSets.remove(workingSet);
- }
- }
- return tasksSets;
- } else {
+// if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) {
+// Set<IWorkingSet> allSets = new HashSet<IWorkingSet>(Arrays.asList(PlatformUI.getWorkbench()
+// .getActiveWorkbenchWindow()
+// .getActivePage()
+// .getWorkingSets()));
+// Set<IWorkingSet> tasksSets = new HashSet<IWorkingSet>(allSets);
+// for (IWorkingSet workingSet : allSets) {
+// if (workingSet.getId() == null || !workingSet.getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
+// tasksSets.remove(workingSet);
+// }
+// }
+// return tasksSets;
+// } else {
return Collections.emptySet();
- }
+// }
}
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetAdapterFactory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetAdapterFactory.java
deleted file mode 100644
index e8ab50af5..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetAdapterFactory.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 Mylar 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.workingsets;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.mylyn.tasks.core.AbstractTaskContainer;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IPersistableElement;
-
-/**
- * Adapter factory used to adapt AbstractTaskContainer to IPersistableElement
- *
- * @author Eugene Kuleshov
- */
-public class TaskWorkingSetAdapterFactory implements IAdapterFactory {
-
- private static final String TASK_ELEMENT_FACTORY_ID = "org.eclipse.mylyn.tasks.ui.workingSets.elementFactory";
-
- @SuppressWarnings("unchecked")
- private static final Class[] ADAPTER_TYPES = new Class[] { IPersistableElement.class };
-
- @SuppressWarnings("unchecked")
- public Class[] getAdapterList() {
- return ADAPTER_TYPES;
- }
-
- public Object getAdapter(final Object adaptableObject, @SuppressWarnings("unchecked")
- Class adapterType) {
- if (adapterType == IPersistableElement.class && adaptableObject instanceof AbstractTaskContainer) {
- return new IPersistableElement() {
- public void saveState(IMemento memento) {
- AbstractTaskContainer container = (AbstractTaskContainer) adaptableObject;
- memento.putString(TaskWorkingSetElementFactory.HANDLE_TASK, container.getHandleIdentifier());
- }
-
- public String getFactoryId() {
- return TASK_ELEMENT_FACTORY_ID;
- }
- };
- } else if (adapterType == IPersistableElement.class && adaptableObject instanceof IProject) {
- return new IPersistableElement() {
- public void saveState(IMemento memento) {
- IProject project = (IProject) adaptableObject;
- memento.putString(TaskWorkingSetElementFactory.HANDLE_PROJECT, project.getName());
- }
-
- public String getFactoryId() {
- return TASK_ELEMENT_FACTORY_ID;
- }
- };
- }
- return null;
- }
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetElementFactory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetElementFactory.java
deleted file mode 100644
index 41a2f1dbf..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetElementFactory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 Mylar 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.workingsets;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.mylyn.monitor.core.StatusHandler;
-import org.eclipse.mylyn.tasks.core.AbstractTaskContainer;
-import org.eclipse.mylyn.tasks.core.TaskList;
-import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
-import org.eclipse.ui.IElementFactory;
-import org.eclipse.ui.IMemento;
-
-/**
- * Element factory used to restore task containers and projects for Task+Resource working sets.
- *
- * @author Eugene Kuleshov
- * @author Mik Kersten
- */
-public class TaskWorkingSetElementFactory implements IElementFactory {
-
- static final String HANDLE_TASK = "handle.task";
-
- static final String HANDLE_PROJECT = "handle.task";
-
- public IAdaptable createElement(IMemento memento) {
- String taskHandle = memento.getString(HANDLE_TASK);
- if (taskHandle != null) {
- // TOOD: this does not support projects and categories/queries have the same name
- TaskList taskList = TasksUiPlugin.getTaskListManager().getTaskList();
- for (AbstractTaskContainer element : taskList.getRootElements()) {
- if (element.getHandleIdentifier().equals(taskHandle)) {
- return element;
- }
- }
- }
- String projectHandle = memento.getString(HANDLE_PROJECT);
- if (projectHandle != null) {
- try {
- IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectHandle);
- if (project != null) {
- return project;
- }
- } catch (Throwable t) {
- StatusHandler.log("Could not not determine project for handle: " + projectHandle, t);
- }
- }
- return null;
- }
-} \ No newline at end of file
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java
deleted file mode 100644
index 53bd777fb..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetPage.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 Mylar 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.workingsets;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.PlatformObject;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.DecoratingLabelProvider;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.mylyn.internal.tasks.core.TaskArchive;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskElementLabelProvider;
-import org.eclipse.mylyn.tasks.core.AbstractTaskContainer;
-import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkingSet;
-import org.eclipse.ui.IWorkingSetManager;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.IWorkingSetPage;
-import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
-import org.eclipse.ui.internal.WorkbenchImages;
-import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
-
-/**
- * Adapted from org.eclipse.ui.internal.ide.dialogs.ResourceWorkingSetPage
- *
- * @author Eugene Kuleshov
- * @author Mik Kersten
- */
-public class TaskWorkingSetPage extends WizardPage implements IWorkingSetPage {
-
- private static final String LABEL_TASKS = "Tasks";
-
- private final static int SIZING_SELECTION_WIDGET_WIDTH = 50;
-
- private final static int SIZING_SELECTION_WIDGET_HEIGHT = 200;
-
- private Text text;
-
- private CheckboxTreeViewer tree;
-
- private IWorkingSet workingSet;
-
- private boolean firstCheck = false;
-
- class ElementCategory extends PlatformObject implements IWorkbenchAdapter {
-
- private String label;
-
- private List<IAdaptable> children;
-
- public ElementCategory(String label, List<IAdaptable> children) {
- this.label = label;
- this.children = children;
- }
-
- public Object[] getChildren(Object o) {
- return children.toArray();
- }
-
- public ImageDescriptor getImageDescriptor(Object object) {
- return WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_WORKING_SETS);
- }
-
- public String getLabel(Object o) {
- return label;
- }
-
- public Object getParent(Object o) {
- return null;
- }
-
- }
-
- class AggregateLabelProvider implements ILabelProvider {
-
- private TaskElementLabelProvider taskProvider = new TaskElementLabelProvider(false);
-
- private WorkbenchLabelProvider workbenchProvider = new WorkbenchLabelProvider();
-
- public Image getImage(Object element) {
- if (element instanceof AbstractTaskContainer) {
- return taskProvider.getImage(element);
- } else {
- return workbenchProvider.getImage(element);
- }
- }
-
- public String getText(Object element) {
- if (element instanceof AbstractTaskContainer) {
- return taskProvider.getText(element);
- } else {
- return workbenchProvider.getText(element);
- }
- }
-
- public void addListener(ILabelProviderListener listener) {
- }
-
- public void dispose() {
- }
-
- public boolean isLabelProperty(Object element, String property) {
- return false;
- }
-
- public void removeListener(ILabelProviderListener listener) {
- }
- }
-
- class CustomSorter extends ViewerSorter {
- @Override
- public int compare(Viewer viewer, Object e1, Object e2) {
- if (e1 instanceof ElementCategory && ((ElementCategory) e1).getLabel(e1).equals(LABEL_TASKS)) {
- return -1;
- } else if (e2 instanceof ElementCategory && ((ElementCategory) e1).getLabel(e1).equals(LABEL_TASKS)) {
- return 1;
- } else {
- return super.compare(viewer, e1, e2);
- }
- }
- }
-
- public TaskWorkingSetPage() {
- super("taskWorkingSetPage", "Select Working Set Elements", null);
- setDescription("" + "When this Working Set is selected views will be filtered just to show only\n"
- + "these elements if the Window Working Set is enabled in the view (default).");
- setImageDescriptor(TasksUiImages.BANNER_WORKING_SET);
- }
-
- @SuppressWarnings("unchecked")
- public void finish() {
- Object[] elements = tree.getCheckedElements();
- Set<IAdaptable> validElements = new HashSet<IAdaptable>();
- for (int i = 0; i < elements.length; i++) {
- if (elements[i] instanceof AbstractTaskContainer || elements[i] instanceof IProject) {
- validElements.add((IAdaptable) elements[i]);
- }
- }
-
- if (workingSet == null) {
- IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager();
- workingSet = workingSetManager.createWorkingSet(getWorkingSetName(),
- validElements.toArray(new IAdaptable[validElements.size()]));
- } else {
- workingSet.setName(getWorkingSetName());
- workingSet.setElements(validElements.toArray(new IAdaptable[validElements.size()]));
- }
- }
-
- public IWorkingSet getSelection() {
- return workingSet;
- }
-
- public void setSelection(IWorkingSet workingSet) {
- this.workingSet = workingSet;
- if (getShell() != null && text != null) {
- firstCheck = true;
- initializeCheckedState();
- text.setText(workingSet.getName());
- }
- }
-
- private String getWorkingSetName() {
- return text.getText();
- }
-
- public void createControl(Composite parent) {
- initializeDialogUnits(parent);
-
- Composite composite = new Composite(parent, SWT.NULL);
-
- GridLayout layout = new GridLayout();
- layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
- layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
- layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
- composite.setLayout(layout);
- composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
- setControl(composite);
-
- // PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IIDEHelpContextIds.WORKING_SET_RESOURCE_PAGE);
- Label label = new Label(composite, SWT.WRAP);
- label.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_message);
- label.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL
- | GridData.VERTICAL_ALIGN_CENTER));
-
- text = new Text(composite, SWT.SINGLE | SWT.BORDER);
- text.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
- text.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- validateInput();
- }
- });
- text.setFocus();
- // text.setBackground(FieldAssistColors.getRequiredFieldBackgroundColor(text));
-
- label = new Label(composite, SWT.WRAP);
- label.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_label_tree);
- label.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL
- | GridData.VERTICAL_ALIGN_CENTER));
-
- tree = new CheckboxTreeViewer(composite);
- tree.setUseHashlookup(true);
-
- final ITreeContentProvider treeContentProvider = new ITreeContentProvider() {
-
- @SuppressWarnings("unchecked")
- public Object[] getChildren(Object parentElement) {
- if (parentElement instanceof List) {
- List<IAdaptable> taskContainers = new ArrayList<IAdaptable>();
- for (Object container : (List) parentElement) {
- if (container instanceof AbstractTaskContainer) {
- taskContainers.add((AbstractTaskContainer) container);
- }
- }
- List<IAdaptable> projects = new ArrayList<IAdaptable>();
- for (Object container : (List) parentElement) {
- if (container instanceof IProject) {
- projects.add((IProject) container);
- }
- }
-
- return new Object[] { new ElementCategory(LABEL_TASKS, taskContainers),
- new ElementCategory("Resources", projects) };
- } else if (parentElement instanceof ElementCategory) {
- return ((ElementCategory) parentElement).getChildren(parentElement);
- } else {
- return new Object[0];
- }
- }
-
- @SuppressWarnings("unchecked")
- public boolean hasChildren(Object element) {
- return getChildren(element).length > 0;
- }
-
- public Object[] getElements(Object element) {
- return getChildren(element);
- }
-
- public Object getParent(Object element) {
- return null;
- }
-
- public void dispose() {
- }
-
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
- };
-
- tree.setContentProvider(treeContentProvider);
-
- tree.setLabelProvider(new DecoratingLabelProvider(new AggregateLabelProvider(), PlatformUI.getWorkbench()
- .getDecoratorManager()
- .getLabelDecorator()));
-
-// tree.setLabelProvider(new TaskElementLabelProvider());
- tree.setSorter(new CustomSorter());
-
- ArrayList<Object> containers = new ArrayList<Object>();
- for (AbstractTaskContainer element : TasksUiPlugin.getTaskListManager().getTaskList().getRootElements()) {
- if (!(element instanceof TaskArchive)) {
- containers.add(element);
- }
- }
- containers.addAll(Arrays.asList(ResourcesPlugin.getWorkspace().getRoot().getProjects()));
-
- tree.setInput(containers);
- tree.expandAll();
-
- // tree.setComparator(new ResourceComparator(ResourceComparator.NAME));
-
- GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL);
- data.heightHint = SIZING_SELECTION_WIDGET_HEIGHT;
- data.widthHint = SIZING_SELECTION_WIDGET_WIDTH;
- tree.getControl().setLayoutData(data);
-
- tree.addCheckStateListener(new ICheckStateListener() {
- public void checkStateChanged(CheckStateChangedEvent event) {
- handleCheckStateChange(event);
- }
- });
-
-// tree.addTreeListener(new ITreeViewerListener() {
-// public void treeCollapsed(TreeExpansionEvent event) {
-// }
-//
-// public void treeExpanded(TreeExpansionEvent event) {
-// final Object element = event.getElement();
-// if (tree.getGrayed(element) == false) {
-// BusyIndicator.showWhile(getShell().getDisplay(),
-// new Runnable() {
-// public void run() {
-// setSubtreeChecked((IContainer) element,
-// tree.getChecked(element), false);
-// }
-// });
-// }
-// }
-// });
-
- // Add select / deselect all buttons for bug 46669
- Composite buttonComposite = new Composite(composite, SWT.NONE);
- layout = new GridLayout(2, false);
- layout.marginWidth = 0;
- layout.marginHeight = 0;
- layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
- buttonComposite.setLayout(layout);
- buttonComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-
- Button selectAllButton = new Button(buttonComposite, SWT.PUSH);
- selectAllButton.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_selectAll_label);
- selectAllButton.setToolTipText(IDEWorkbenchMessages.ResourceWorkingSetPage_selectAll_toolTip);
- selectAllButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent selectionEvent) {
- tree.setCheckedElements(treeContentProvider.getElements(tree.getInput()));
- validateInput();
- }
- });
- setButtonLayoutData(selectAllButton);
-
- Button deselectAllButton = new Button(buttonComposite, SWT.PUSH);
- deselectAllButton.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_deselectAll_label);
- deselectAllButton.setToolTipText(IDEWorkbenchMessages.ResourceWorkingSetPage_deselectAll_toolTip);
- deselectAllButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent selectionEvent) {
- tree.setCheckedElements(new Object[0]);
- validateInput();
- }
- });
- setButtonLayoutData(deselectAllButton);
-
- initializeCheckedState();
- if (workingSet != null) {
- text.setText(workingSet.getName());
- }
- setPageComplete(false);
-
- Dialog.applyDialogFont(composite);
- }
-
- private void initializeCheckedState() {
- BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
- public void run() {
- Object[] items = null;
- if (workingSet != null) {
- items = workingSet.getElements();
- if (items != null) {
- // see bug 191342
- tree.setCheckedElements(new Object[] {});
- for (Object item : items) {
- if (item != null) {
- tree.setChecked(item, true);
- }
- }
- }
- }
- }
- });
- }
-
- protected void handleCheckStateChange(final CheckStateChangedEvent event) {
- BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
- public void run() {
- IAdaptable element = (IAdaptable) event.getElement();
- if (element instanceof AbstractTaskContainer || element instanceof IProject) {
- tree.setGrayed(element, false);
- // boolean state = event.getChecked();
- // if (element instanceof AbstractTaskContainer) {
- // setSubtreeChecked((AbstractTaskContainer) element, state, true);
- // }
- // updateParentState(element);
- } else if (element instanceof ElementCategory) {
- for (Object child : ((ElementCategory) element).getChildren(null)) {
- tree.setChecked(child, event.getChecked());
- }
- }
- validateInput();
- }
- });
- }
-
- protected void validateInput() {
- String errorMessage = null;
- String infoMessage = null;
- String newText = text.getText();
-
- if (!newText.equals(newText.trim())) {
- errorMessage = "The name must not have a leading or trailing whitespace.";
- } else if (firstCheck) {
- firstCheck = false;
- return;
- }
- if ("".equals(newText)) { //$NON-NLS-1$
- errorMessage = "The name must not be empty.";
- }
- if (errorMessage == null && (workingSet == null || !newText.equals(workingSet.getName()))) {
- IWorkingSet[] workingSets = PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
- for (int i = 0; i < workingSets.length; i++) {
- if (newText.equals(workingSets[i].getName())) {
- errorMessage = "A working set with the same name already exists.";
- }
- }
- }
- if (tree.getCheckedElements().length == 0) {
- infoMessage = "No categories/queries selected.";
- }
- setMessage(infoMessage, INFORMATION);
- setErrorMessage(errorMessage);
- setPageComplete(errorMessage == null);
- }
-
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java
deleted file mode 100644
index 2e2eb565f..000000000
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/workingsets/TaskWorkingSetUpdater.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 - 2006 Mylar 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.workingsets;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.mylyn.internal.tasks.core.ScheduledTaskContainer;
-import org.eclipse.mylyn.internal.tasks.core.TaskCategory;
-import org.eclipse.mylyn.internal.tasks.ui.actions.ToggleAllWorkingSetsAction;
-import org.eclipse.mylyn.internal.tasks.ui.actions.ToggleWorkingSetAction;
-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.ITaskActivityListener;
-import org.eclipse.mylyn.tasks.core.ITaskListChangeListener;
-import org.eclipse.mylyn.tasks.core.TaskContainerDelta;
-import org.eclipse.mylyn.tasks.ui.TasksUiPlugin;
-import org.eclipse.ui.IWorkingSet;
-import org.eclipse.ui.IWorkingSetUpdater;
-import org.eclipse.ui.PlatformUI;
-
-/**
- * @author Eugene Kuleshov
- * @author Mik Kersten
- */
-public class TaskWorkingSetUpdater implements IWorkingSetUpdater, ITaskListChangeListener, ITaskActivityListener {
-
- public static String ID_TASK_WORKING_SET = "org.eclipse.mylyn.tasks.ui.workingSet";
-
- private List<IWorkingSet> workingSets = new ArrayList<IWorkingSet>();
-
- public TaskWorkingSetUpdater() {
- TasksUiPlugin.getTaskListManager().getTaskList().addChangeListener(this);
- TasksUiPlugin.getTaskListManager().addActivityListener(this);
- }
-
- public void dispose() {
- TasksUiPlugin.getTaskListManager().getTaskList().removeChangeListener(this);
- TasksUiPlugin.getTaskListManager().removeActivityListener(this);
- }
-
- public void add(IWorkingSet workingSet) {
- checkElementExistence(workingSet);
- synchronized (workingSets) {
- workingSets.add(workingSet);
- }
- }
-
- private void checkElementExistence(IWorkingSet workingSet) {
- ArrayList<IAdaptable> list = new ArrayList<IAdaptable>();
- for (IAdaptable adaptable : workingSet.getElements()) {
- if (adaptable instanceof AbstractTaskContainer) {
- String handle = ((AbstractTaskContainer) adaptable).getHandleIdentifier();
- for (AbstractTaskContainer element : TasksUiPlugin.getTaskListManager().getTaskList().getRootElements()) {
- if (element != null && element.getHandleIdentifier().equals(handle)) {
- list.add(adaptable);
- }
- }
- } else if (adaptable instanceof IProject) {
- IProject project = ResourcesPlugin.getWorkspace()
- .getRoot()
- .getProject(((IProject) adaptable).getName());
- if (project != null && project.exists()) {
- list.add(project);
- }
- }
- }
- workingSet.setElements(list.toArray(new IAdaptable[list.size()]));
- }
-
- public boolean contains(IWorkingSet workingSet) {
- synchronized (workingSets) {
- return workingSets.contains(workingSet);
- }
- }
-
- public boolean remove(IWorkingSet workingSet) {
- synchronized (workingSets) {
- return workingSets.remove(workingSet);
- }
- }
-
- public void containersChanged(Set<TaskContainerDelta> delta) {
- for (TaskContainerDelta taskContainerDelta : delta) {
- if (taskContainerDelta.getContainer() instanceof TaskCategory
- || taskContainerDelta.getContainer() instanceof AbstractRepositoryQuery) {
- synchronized (workingSets) {
- switch (taskContainerDelta.getKind()) {
- case REMOVED:
- for (IWorkingSet workingSet : workingSets) {
- ArrayList<IAdaptable> elements = new ArrayList<IAdaptable>(
- Arrays.asList(workingSet.getElements()));
- elements.remove(taskContainerDelta.getContainer());
- workingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
- }
- break;
- case ADDED:
- for (IWorkingSet workingSet : workingSets) {
- ArrayList<IAdaptable> elements = new ArrayList<IAdaptable>(
- Arrays.asList(workingSet.getElements()));
- elements.add(taskContainerDelta.getContainer());
- workingSet.setElements(elements.toArray(new IAdaptable[elements.size()]));
- }
- }
- break;
- }
- }
- }
- }
-
- public void activityChanged(ScheduledTaskContainer week) {
- // ignore
- }
-
- public void taskActivated(AbstractTask task) {
- Set<AbstractTaskContainer> taskContainers = new HashSet<AbstractTaskContainer>(
- TasksUiPlugin.getTaskListManager().getTaskList().getQueriesForHandle(task.getHandleIdentifier()));
- taskContainers.addAll(task.getParentContainers());
-
- Set<AbstractTaskContainer> allActiveWorkingSetContainers = new HashSet<AbstractTaskContainer>();
- for (IWorkingSet workingSet : PlatformUI.getWorkbench()
- .getActiveWorkbenchWindow()
- .getActivePage()
- .getWorkingSets()) {
- ArrayList<IAdaptable> elements = new ArrayList<IAdaptable>(Arrays.asList(workingSet.getElements()));
- for (IAdaptable adaptable : elements) {
- if (adaptable instanceof AbstractTaskContainer) {
- allActiveWorkingSetContainers.add((AbstractTaskContainer) adaptable);
- }
- }
- }
- boolean isContained = false;
- for (AbstractTaskContainer taskContainer : allActiveWorkingSetContainers) {
- if (taskContainers.contains(taskContainer)) {
- isContained = true;
- break;
- }
- }
-
- ;
- if (!isContained) {
- IWorkingSet matchingWorkingSet = null;
- for (IWorkingSet workingSet : PlatformUI.getWorkbench().getWorkingSetManager().getAllWorkingSets()) {
- ArrayList<IAdaptable> elements = new ArrayList<IAdaptable>(Arrays.asList(workingSet.getElements()));
- for (IAdaptable adaptable : elements) {
- if (adaptable instanceof AbstractTaskContainer) {
- if (((AbstractTaskContainer)adaptable).contains(task.getHandleIdentifier())) {
- matchingWorkingSet = workingSet;
- }
- }
- }
- }
-
- if (matchingWorkingSet != null) {
- new ToggleWorkingSetAction(matchingWorkingSet).run();
- } else {
- new ToggleAllWorkingSetsAction(PlatformUI.getWorkbench().getActiveWorkbenchWindow()).run();
- }
- }
- }
-
- public void taskDeactivated(AbstractTask task) {
- // ignore
- }
-
- public void taskListRead() {
- // ignore
- }
-
- public static IWorkingSet[] getEnabledSets() {
- return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getWorkingSets();
- }
-
- /**
- * TODO: move
- */
- public static boolean areNoTaskWorkingSetsEnabled() {
- IWorkingSet[] workingSets = PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
- for (IWorkingSet workingSet : workingSets) {
- if (workingSet != null && workingSet.getId().equalsIgnoreCase(ID_TASK_WORKING_SET)) {
- if (isWorkingSetEnabled(workingSet)) {
- return false;
- }
- }
- }
- return true;
- }
-
- public static boolean isWorkingSetEnabled(IWorkingSet set) {
- IWorkingSet[] enabledSets = TaskWorkingSetUpdater.getEnabledSets();
- for (int i = 0; i < enabledSets.length; i++) {
- if (enabledSets[i].equals(set)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean isOnlyTaskWorkingSetEnabled(IWorkingSet set) {
- if (!TaskWorkingSetUpdater.isWorkingSetEnabled(set)) {
- return false;
- }
-
- IWorkingSet[] enabledSets = TaskWorkingSetUpdater.getEnabledSets();
- for (int i = 0; i < enabledSets.length; i++) {
- if (!enabledSets[i].equals(set) && enabledSets[i].getId().equalsIgnoreCase(TaskWorkingSetUpdater.ID_TASK_WORKING_SET)) {
- return false;
- }
- }
- return true;
- }
-}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractNewRepositoryTaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractNewRepositoryTaskEditor.java
index 232ba5e34..268c16f79 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractNewRepositoryTaskEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractNewRepositoryTaskEditor.java
@@ -131,6 +131,8 @@ public abstract class AbstractNewRepositoryTaskEditor extends AbstractRepository
descriptionTextViewer.getControl().setLayoutData(descriptionTextData);
descriptionTextViewer.getControl().setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
+ addDuplicateDetection(descriptionComposite);
+
toolkit.paintBordersFor(descriptionComposite);
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java
index bf4dd6565..90cb2c7e3 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java
@@ -196,7 +196,7 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
private static final String LABEL_TEXT_EDITOR = "Text Editor";
- private static final String LABEL_NO_DETECTOR = "No duplicate detector available.";
+// private static final String LABEL_NO_DETECTOR = "No duplicate detector available.";
protected static final String CONTEXT_MENU_ID = "#MylarRepositoryEditor";
@@ -222,9 +222,9 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
private static final String LABEL_SAVE = "Save...";
- private static final String LABEL_SEARCH_DUPS = "Search for Duplicates";
+ private static final String LABEL_SEARCH_DUPS = "Search";
- private static final String LABEL_SELECT_DETECTOR = "Select duplicate detector:";
+ private static final String LABEL_SELECT_DETECTOR = "Duplicate Detection";
private RepositoryTaskEditorInput editorInput;
@@ -998,57 +998,57 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
* Adds a related bugs section to the bug editor
*/
protected void createRelatedBugsSection(Composite composite) {
- Section relatedBugsSection = createSection(editorComposite, getSectionLabel(SECTION_NAME.RELATEDBUGS_SECTION));
- Composite relatedBugsComposite = toolkit.createComposite(relatedBugsSection);
- relatedBugsComposite.setLayout(new GridLayout(4, false));
- relatedBugsComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
- relatedBugsSection.setClient(relatedBugsComposite);
- relatedBugsSection.setExpanded(repositoryTask == null);
-
- List<AbstractDuplicateDetector> allCollectors = new ArrayList<AbstractDuplicateDetector>();
- if (getDuplicateSearchCollectorsList() != null) {
- allCollectors.addAll(getDuplicateSearchCollectorsList());
- }
- if (!allCollectors.isEmpty()) {
- duplicateDetectorLabel = new Label(relatedBugsComposite, SWT.LEFT);
- duplicateDetectorLabel.setText(LABEL_SELECT_DETECTOR);
-
- duplicateDetectorChooser = new CCombo(relatedBugsComposite, SWT.FLAT | SWT.READ_ONLY | SWT.BORDER);
-
- duplicateDetectorChooser.setLayoutData(GridDataFactory.swtDefaults().hint(150, SWT.DEFAULT).create());
- duplicateDetectorChooser.setFont(TEXT_FONT);
-
- Collections.sort(allCollectors, new Comparator<AbstractDuplicateDetector>() {
-
- public int compare(AbstractDuplicateDetector c1, AbstractDuplicateDetector c2) {
- return c1.getName().compareToIgnoreCase(c2.getName());
- }
-
- });
-
- for (AbstractDuplicateDetector detector : allCollectors) {
- duplicateDetectorChooser.add(detector.getName());
- }
-
- duplicateDetectorChooser.select(0);
- duplicateDetectorChooser.setEnabled(true);
- duplicateDetectorChooser.setData(allCollectors);
-
- if (allCollectors.size() > 0) {
-
- searchForDuplicates = toolkit.createButton(relatedBugsComposite, LABEL_SEARCH_DUPS, SWT.NONE);
- GridData searchDuplicatesButtonData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
- searchForDuplicates.setLayoutData(searchDuplicatesButtonData);
- searchForDuplicates.addListener(SWT.Selection, new Listener() {
- public void handleEvent(Event e) {
- searchForDuplicates();
- }
- });
- }
- } else {
- Label label = new Label(relatedBugsComposite, SWT.LEFT);
- label.setText(LABEL_NO_DETECTOR);
- }
+// Section relatedBugsSection = createSection(editorComposite, getSectionLabel(SECTION_NAME.RELATEDBUGS_SECTION));
+// Composite relatedBugsComposite = toolkit.createComposite(relatedBugsSection);
+// relatedBugsComposite.setLayout(new GridLayout(4, false));
+// relatedBugsComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+// relatedBugsSection.setClient(relatedBugsComposite);
+// relatedBugsSection.setExpanded(repositoryTask == null);
+//
+// List<AbstractDuplicateDetector> allCollectors = new ArrayList<AbstractDuplicateDetector>();
+// if (getDuplicateSearchCollectorsList() != null) {
+// allCollectors.addAll(getDuplicateSearchCollectorsList());
+// }
+// if (!allCollectors.isEmpty()) {
+// duplicateDetectorLabel = new Label(relatedBugsComposite, SWT.LEFT);
+// duplicateDetectorLabel.setText(LABEL_SELECT_DETECTOR);
+//
+// duplicateDetectorChooser = new CCombo(relatedBugsComposite, SWT.FLAT | SWT.READ_ONLY | SWT.BORDER);
+//
+// duplicateDetectorChooser.setLayoutData(GridDataFactory.swtDefaults().hint(150, SWT.DEFAULT).create());
+// duplicateDetectorChooser.setFont(TEXT_FONT);
+//
+// Collections.sort(allCollectors, new Comparator<AbstractDuplicateDetector>() {
+//
+// public int compare(AbstractDuplicateDetector c1, AbstractDuplicateDetector c2) {
+// return c1.getName().compareToIgnoreCase(c2.getName());
+// }
+//
+// });
+//
+// for (AbstractDuplicateDetector detector : allCollectors) {
+// duplicateDetectorChooser.add(detector.getName());
+// }
+//
+// duplicateDetectorChooser.select(0);
+// duplicateDetectorChooser.setEnabled(true);
+// duplicateDetectorChooser.setData(allCollectors);
+//
+// if (allCollectors.size() > 0) {
+//
+// searchForDuplicates = toolkit.createButton(relatedBugsComposite, LABEL_SEARCH_DUPS, SWT.NONE);
+// GridData searchDuplicatesButtonData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+// searchForDuplicates.setLayoutData(searchDuplicatesButtonData);
+// searchForDuplicates.addListener(SWT.Selection, new Listener() {
+// public void handleEvent(Event e) {
+// searchForDuplicates();
+// }
+// });
+// }
+// } else {
+// Label label = new Label(relatedBugsComposite, SWT.LEFT);
+// label.setText(LABEL_NO_DETECTOR);
+// }
}
protected SearchHitCollector getDuplicateSearchCollector(String name) {
@@ -1570,7 +1570,8 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
createReplyHyperlink(0, replyComp, taskData.getDescription());
descriptionSection.setTextClient(replyComp);
-
+// duplicatesSection.setBackground(new Color(form.getDisplay(), 123, 22, 45));
+ addDuplicateDetection(sectionComposite);
toolkit.paintBordersFor(sectionComposite);
}
@@ -1607,6 +1608,63 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
return replyLink;
}
+ protected void addDuplicateDetection(Composite composite) {
+ List<AbstractDuplicateDetector> allCollectors = new ArrayList<AbstractDuplicateDetector>();
+ if (getDuplicateSearchCollectorsList() != null) {
+ allCollectors.addAll(getDuplicateSearchCollectorsList());
+ }
+ if (!allCollectors.isEmpty()) {
+ Section duplicatesSection = toolkit.createSection(composite, ExpandableComposite.TWISTIE
+ | ExpandableComposite.SHORT_TITLE_BAR);
+ duplicatesSection.setText(LABEL_SELECT_DETECTOR);
+ duplicatesSection.setLayout(new GridLayout());
+ GridDataFactory.fillDefaults().indent(SWT.DEFAULT, 15).applyTo(duplicatesSection);
+ Composite relatedBugsComposite = toolkit.createComposite(duplicatesSection);
+ relatedBugsComposite.setLayout(new GridLayout(4, false));
+ relatedBugsComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
+ duplicatesSection.setClient(relatedBugsComposite);
+ duplicateDetectorLabel = new Label(relatedBugsComposite, SWT.LEFT);
+ duplicateDetectorLabel.setText("Detector:");
+
+ duplicateDetectorChooser = new CCombo(relatedBugsComposite, SWT.FLAT | SWT.READ_ONLY | SWT.BORDER);
+
+ duplicateDetectorChooser.setLayoutData(GridDataFactory.swtDefaults().hint(150, SWT.DEFAULT).create());
+ duplicateDetectorChooser.setFont(TEXT_FONT);
+
+ Collections.sort(allCollectors, new Comparator<AbstractDuplicateDetector>() {
+
+ public int compare(AbstractDuplicateDetector c1, AbstractDuplicateDetector c2) {
+ return c1.getName().compareToIgnoreCase(c2.getName());
+ }
+
+ });
+
+ for (AbstractDuplicateDetector detector : allCollectors) {
+ duplicateDetectorChooser.add(detector.getName());
+ }
+
+ duplicateDetectorChooser.select(0);
+ duplicateDetectorChooser.setEnabled(true);
+ duplicateDetectorChooser.setData(allCollectors);
+
+ if (allCollectors.size() > 0) {
+
+ searchForDuplicates = toolkit.createButton(relatedBugsComposite, LABEL_SEARCH_DUPS, SWT.NONE);
+ GridData searchDuplicatesButtonData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+ searchForDuplicates.setLayoutData(searchDuplicatesButtonData);
+ searchForDuplicates.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event e) {
+ searchForDuplicates();
+ }
+ });
+ }
+// } else {
+// Label label = new Label(composite, SWT.LEFT);
+// label.setText(LABEL_NO_DETECTOR);
+ }
+
+ }
+
protected void createCustomAttributeLayout(Composite composite) {
// override
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java
index 1728c56ad..429d9d276 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java
@@ -425,7 +425,8 @@ public final class TaskEditor extends FormEditor implements IBusyEditor {
public void setMessage(String message, int type) {
if (message != null) {
- MessageDialog.openInformation(getSite().getShell(), "Task Editor", message);
+ String currentTitle = getPartName();
+ setPartName("[STALE] " + currentTitle);
}
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java
index c7de831df..f994f40a6 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/wizards/AbstractRepositorySettingsPage.java
@@ -671,7 +671,10 @@ public abstract class AbstractRepositorySettingsPage extends WizardPage {
systemProxyButton = new Button(settingsComposite, SWT.CHECK);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.TOP).span(2, SWT.DEFAULT).applyTo(settingsComposite);
-// systemProxyButton.setText("Use global Network Connections preferences");
+ systemProxyButton.setText("Use global Network Connections preferences");
+ systemProxyButton.setSelection(false);
+ systemProxyButton.setEnabled(false);
+
// Hyperlink changeProxySettingsLink = toolkit.createHyperlink(settingsComposite, "Change Settings", SWT.NULL);
// changeProxySettingsLink.setBackground(compositeContainer.getBackground());
// changeProxySettingsLink.addHyperlinkListener(new IHyperlinkListener() {
@@ -771,8 +774,9 @@ public abstract class AbstractRepositorySettingsPage extends WizardPage {
setProxyAuth(oldProxyUsername != null && oldProxyPassword != null && !oldProxyUsername.equals("")
&& !oldProxyPassword.equals(""));
- setUseDefaultProxy(repository != null ? repository.isDefaultProxyEnabled() : true);
- proxyExpComposite.setExpanded(!systemProxyButton.getSelection());
+ setUseDefaultProxy(false);
+// setUseDefaultProxy(repository != null ? repository.isDefaultProxyEnabled() : true);
+// proxyExpComposite.setExpanded(!systemProxyButton.getSelection());
}
protected void setEncoding(String encoding) {

Back to the top