/*******************************************************************************
* Copyright (c) 2004, 2016 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.dialogs;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.mylyn.commons.ui.CommonImages;
import org.eclipse.mylyn.commons.ui.compatibility.CommonFonts;
import org.eclipse.mylyn.commons.ui.compatibility.CommonThemes;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
import org.eclipse.mylyn.tasks.ui.ITasksUiConstants;
import org.eclipse.mylyn.tasks.ui.LegendElement;
import org.eclipse.mylyn.tasks.ui.TaskElementLabelProvider;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.mylyn.tasks.ui.TasksUiImages;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Hyperlink;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.themes.IThemeManager;
/**
* @author Mik Kersten
* @author Leo Dos Santos
*/
public class UiLegendControl extends Composite {
private final FormToolkit toolkit;
private Window window = null;
private final TaskElementLabelProvider labelProvider = new TaskElementLabelProvider(false);
private final IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();
private final ArrayList<LegendElement> legendElements = new ArrayList<LegendElement>();
public UiLegendControl(Composite parent, FormToolkit toolkit) {
this(parent, toolkit, true, SWT.VERTICAL);
}
public UiLegendControl(Composite parent, FormToolkit toolkit, boolean showConnectors, int style) {
super(parent, SWT.NONE);
this.toolkit = toolkit;
toolkit.adapt(this);
addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
doDispose();
}
});
TableWrapLayout layout = new TableWrapLayout();
layout.leftMargin = 0;
layout.rightMargin = 0;
layout.topMargin = 0;
layout.bottomMargin = 0;
if (style == SWT.DEFAULT) {
createContentsVertical(layout, showConnectors);
} else if ((style & SWT.HORIZONTAL) != 0) {
createContentsHorizontal(layout, showConnectors);
} else {
createContentsVertical(layout, showConnectors);
}
setLayout(layout);
setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB));
}
private void doDispose() {
for (LegendElement element : legendElements) {
element.dispose();
}
if (labelProvider != null) {
labelProvider.dispose();
}
}
public void setWindow(Window window) {
this.window = window;
}
public boolean close() {
if (window != null) {
return window.close();
} else {
return false;
}
}
private void createContentsHorizontal(TableWrapLayout layout, boolean showConnectors) {
layout.numColumns = 2;
createTasksPrioritiesSection(this);
createContextSection(this);
createActivitySection(this);
createSynchronizationSection(this);
Composite subComp = toolkit.createComposite(this);
TableWrapLayout subLayout = new TableWrapLayout();
subLayout.topMargin = 0;
subLayout.bottomMargin = 0;
subLayout.leftMargin = 0;
subLayout.rightMargin = 0;
subComp.setLayout(subLayout);
subComp.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB, 1, 2));
if (showConnectors) {
createConnectorsSection(subComp);
}
createGettingStartedSection(subComp);
}
private void createContentsVertical(TableWrapLayout layout, boolean showConnectors) {
layout.numColumns = 1;
createTasksPrioritiesSection(this);
createActivitySection(this);
createContextSection(this);
createSynchronizationSection(this);
if (showConnectors) {
createConnectorsSection(this);
}
createGettingStartedSection(this);
}
private void createTasksPrioritiesSection(Composite parent) {
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = true;
layout.leftMargin = 0;
layout.rightMargin = 0;
layout.topMargin = 0;
layout.bottomMargin = 0;
Composite composite = toolkit.createComposite(parent);
composite.setLayout(layout);
composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
createTasksSection(composite);
createPrioritiesSection(composite);
}
private void createTasksSection(Composite parent) {
Section tasksSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
tasksSection.setText(Messages.UiLegendControl_Tasks);
tasksSection.setLayout(new TableWrapLayout());
tasksSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = false;
layout.verticalSpacing = 1;
layout.topMargin = 1;
layout.bottomMargin = 1;
Composite tasksClient = toolkit.createComposite(tasksSection);
tasksClient.setLayout(layout);
tasksClient.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
tasksSection.setClient(tasksClient);
Label imageLabel;
imageLabel = toolkit.createLabel(tasksClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.TASK));
toolkit.createLabel(tasksClient, Messages.UiLegendControl_Task);
imageLabel = toolkit.createLabel(tasksClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.TASK_OWNED));
toolkit.createLabel(tasksClient, Messages.UiLegendControl_Task_Owned);
imageLabel = toolkit.createLabel(tasksClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.CATEGORY));
toolkit.createLabel(tasksClient, Messages.UiLegendControl_Category);
imageLabel = toolkit.createLabel(tasksClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.QUERY));
toolkit.createLabel(tasksClient, Messages.UiLegendControl_Query);
imageLabel = toolkit.createLabel(tasksClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.CALENDAR));
toolkit.createLabel(tasksClient, Messages.UiLegendControl_Date_range);
imageLabel = toolkit.createLabel(tasksClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.BLANK));
Hyperlink openView = toolkit.createHyperlink(tasksClient, Messages.UiLegendControl_Open_Task_List_, SWT.WRAP);
openView.addHyperlinkListener(new IHyperlinkListener() {
public void linkActivated(HyperlinkEvent e) {
close();
TasksUiUtil.openTasksViewInActivePerspective();
}
public void linkEntered(HyperlinkEvent e) {
// ignore
}
public void linkExited(HyperlinkEvent e) {
// ignore
}
});
}
private void createPrioritiesSection(Composite parent) {
Section prioritiesSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
prioritiesSection.setText(Messages.UiLegendControl_Priorities);
prioritiesSection.setLayout(new TableWrapLayout());
prioritiesSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = false;
layout.verticalSpacing = 1;
layout.topMargin = 1;
layout.bottomMargin = 1;
Composite prioritiesClient = toolkit.createComposite(prioritiesSection);
prioritiesClient.setLayout(layout);
prioritiesClient.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
prioritiesSection.setClient(prioritiesClient);
Label imageLabel;
imageLabel = toolkit.createLabel(prioritiesClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.PRIORITY_1));
toolkit.createLabel(prioritiesClient, PriorityLevel.P1.getDescription());
imageLabel = toolkit.createLabel(prioritiesClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.PRIORITY_2));
toolkit.createLabel(prioritiesClient, PriorityLevel.P2.getDescription());
imageLabel = toolkit.createLabel(prioritiesClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.PRIORITY_3));
toolkit.createLabel(prioritiesClient, PriorityLevel.P3.getDescription() + Messages.UiLegendControl__default_);
imageLabel = toolkit.createLabel(prioritiesClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.PRIORITY_4));
toolkit.createLabel(prioritiesClient, PriorityLevel.P4.getDescription());
imageLabel = toolkit.createLabel(prioritiesClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.PRIORITY_5));
toolkit.createLabel(prioritiesClient, PriorityLevel.P5.getDescription());
}
private void createActivitySection(Composite parent) {
Section activitySection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
activitySection.setText(Messages.UiLegendControl_Task_Activity);
activitySection.setLayout(new TableWrapLayout());
activitySection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = false;
layout.verticalSpacing = 1;
layout.topMargin = 1;
layout.bottomMargin = 1;
Composite activityClient = toolkit.createComposite(activitySection);
activityClient.setLayout(layout);
activityClient.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
activitySection.setClient(activityClient);
Label imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.TASK));
Label labelToday = toolkit.createLabel(activityClient, Messages.UiLegendControl_Scheduled_for_today);
labelToday.setForeground(
themeManager.getCurrentTheme().getColorRegistry().get(CommonThemes.COLOR_SCHEDULED_TODAY));
imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.TASK));
Label labelOverdue = toolkit.createLabel(activityClient, Messages.UiLegendControl_Past_scheduled_date);
labelOverdue.setForeground(
themeManager.getCurrentTheme().getColorRegistry().get(CommonThemes.COLOR_SCHEDULED_PAST));
// imageLabel = toolkit.createLabel(activityClient, "");
// imageLabel.setImage(TasksUiImages.getImage(TasksUiImages.TASK));
// Label labelThisWeek = toolkit.createLabel(activityClient, "Scheduled for this
// week");
// labelThisWeek.setForeground(themeManager.getCurrentTheme().getColorRegistry().get(
// TaskListColorsAndFonts.THEME_COLOR_TASK_THISWEEK_SCHEDULED));
imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.TASK));
Label labelCompleted = toolkit.createLabel(activityClient, Messages.UiLegendControl_Completed);
labelCompleted.setFont(CommonFonts.STRIKETHROUGH);
// labelCompleted.setForeground(TaskListColorsAndFonts.COLOR_TASK_COMPLETED);
labelCompleted
.setForeground(themeManager.getCurrentTheme().getColorRegistry().get(CommonThemes.COLOR_COMPLETED));
imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.TASK));
Label labelCompletedToday = toolkit.createLabel(activityClient, Messages.UiLegendControl_Completed_today);
labelCompletedToday.setFont(CommonFonts.STRIKETHROUGH);
labelCompletedToday.setForeground(
themeManager.getCurrentTheme().getColorRegistry().get(CommonThemes.COLOR_COMPLETED_TODAY));
imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_DATE_DUE));
toolkit.createLabel(activityClient, Messages.UiLegendControl_Has_Due_date);
imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_DATE_OVERDUE));
Label textLabel = toolkit.createLabel(activityClient, Messages.UiLegendControl_Past_due_date);
textLabel.setForeground(themeManager.getCurrentTheme().getColorRegistry().get(CommonThemes.COLOR_OVERDUE));
imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.NOTES));
toolkit.createLabel(activityClient, Messages.UiLegendControl_Notes);
imageLabel = toolkit.createLabel(activityClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.BLANK));
Hyperlink adjust = toolkit.createHyperlink(activityClient, Messages.UiLegendControl_Adjust_Colors_and_Fonts_,
SWT.WRAP);
adjust.addHyperlinkListener(new IHyperlinkListener() {
public void linkActivated(HyperlinkEvent e) {
PreferenceDialog dlg = PreferencesUtil.createPreferenceDialogOn(
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
ITasksUiConstants.ID_PREFERENCES_COLORS_AND_FONTS,
new String[] { ITasksUiConstants.ID_PREFERENCES_COLORS_AND_FONTS }, null);
dlg.open();
}
public void linkEntered(HyperlinkEvent e) {
// ignore
}
public void linkExited(HyperlinkEvent e) {
// ignore
}
});
}
private void createContextSection(Composite parent) {
Section contextSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
contextSection.setText(Messages.UiLegendControl_Task_Context);
contextSection.setLayout(new TableWrapLayout());
contextSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = false;
layout.verticalSpacing = 1;
layout.topMargin = 1;
layout.bottomMargin = 1;
Composite contextClient = toolkit.createComposite(contextSection);
contextClient.setLayout(layout);
contextClient.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
contextSection.setClient(contextClient);
Label imageLabel;
imageLabel = toolkit.createLabel(contextClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.CONTEXT_FOCUS));
toolkit.createLabel(contextClient, Messages.UiLegendControl_Focus_view_on_active_task);
imageLabel = toolkit.createLabel(contextClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.CONTEXT_INACTIVE_EMPTY));
toolkit.createLabel(contextClient, Messages.UiLegendControl_Inactive_task_with_no_context);
imageLabel = toolkit.createLabel(contextClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.CONTEXT_INACTIVE));
toolkit.createLabel(contextClient, Messages.UiLegendControl_Inactive_task_with_context);
imageLabel = toolkit.createLabel(contextClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(TasksUiImages.CONTEXT_ACTIVE));
toolkit.createLabel(contextClient, Messages.UiLegendControl_Active_task);
}
private void createSynchronizationSection(Composite parent) {
Section synchroSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
synchroSection.setText(Messages.UiLegendControl_Synchronization);
synchroSection.setLayout(new TableWrapLayout());
synchroSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
layout.makeColumnsEqualWidth = false;
layout.verticalSpacing = 3;
layout.topMargin = 1;
layout.bottomMargin = 1;
Composite synchroClient = toolkit.createComposite(synchroSection);
synchroClient.setLayout(layout);
synchroClient.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
synchroSection.setClient(synchroClient);
Label imageLabel;
imageLabel = toolkit.createLabel(synchroClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_SYNC_INCOMMING_NEW));
toolkit.createLabel(synchroClient, Messages.UiLegendControl_New_task);
imageLabel = toolkit.createLabel(synchroClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_SYNC_INCOMMING));
toolkit.createLabel(synchroClient, Messages.UiLegendControl_Incoming_changes);
imageLabel = toolkit.createLabel(synchroClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_SYNC_OUTGOING));
toolkit.createLabel(synchroClient, Messages.UiLegendControl_Outgoing_changes);
imageLabel = toolkit.createLabel(synchroClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_SYNC_OUTGOING_NEW));
toolkit.createLabel(synchroClient, Messages.UiLegendControl_Unsubmitted_outgoing_changes);
imageLabel = toolkit.createLabel(synchroClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_SYNC_WARNING));
toolkit.createLabel(synchroClient, Messages.UiLegendControl_Synchronization_failed);
imageLabel = toolkit.createLabel(synchroClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_SYNC_ERROR));
toolkit.createLabel(synchroClient, Messages.UiLegendControl_Synchronization_error);
imageLabel = toolkit.createLabel(synchroClient, ""); //$NON-NLS-1$
imageLabel.setImage(CommonImages.getImage(CommonImages.OVERLAY_SYNC_CONFLICT));
toolkit.createLabel(synchroClient, Messages.UiLegendControl_Conflicting_changes);
}
private void createConnectorsSection(Composite parent) {
TableWrapLayout layout = new TableWrapLayout();
layout.makeColumnsEqualWidth = true;
layout.leftMargin = 0;
layout.rightMargin = 0;
layout.topMargin = 0;
layout.bottomMargin = 0;
ScrolledForm composite = toolkit.createScrolledForm(parent);
composite.getBody().setLayout(layout);
TableWrapData data = new TableWrapData(TableWrapData.FILL);
composite.setLayoutData(data);
List<AbstractRepositoryConnector> connectors = new ArrayList<AbstractRepositoryConnector>(
TasksUi.getRepositoryManager().getRepositoryConnectors());
Collections.sort(connectors, new Comparator<AbstractRepositoryConnector>() {
public int compare(AbstractRepositoryConnector o1, AbstractRepositoryConnector o2) {
return o1.getLabel().compareToIgnoreCase(o2.getLabel());
}
});
for (AbstractRepositoryConnector connector : connectors) {
if (TasksUi.getRepositoryManager().getRepositories(connector.getConnectorKind()).isEmpty()) {
continue;
}
AbstractRepositoryConnectorUi connectorUi = TasksUi.getRepositoryConnectorUi(connector.getConnectorKind());
if (connectorUi != null) {
List<LegendElement> elements = connectorUi.getLegendElements();
if (elements != null && elements.size() > 0) {
legendElements.addAll(elements);
addLegendElements(composite.getBody(), connector, elements);
}
}
}
layout.numColumns = Math.max(composite.getBody().getChildren().length, 1);
// show 3 columns by default
Point w = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
data.maxWidth = (w.x / layout.numColumns) * 3;
}
private void addLegendElements(Composite composite, AbstractRepositoryConnector connector,
List<LegendElement> elements) {
Section connectorSection = toolkit.createSection(composite, ExpandableComposite.TITLE_BAR);
connectorSection.setLayout(new TableWrapLayout());
connectorSection.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
String label = connector.getLabel();
int parenIndex = label.indexOf('(');
if (parenIndex != -1) {
label = label.substring(0, parenIndex);
}
connectorSection.setText(label);
TableWrapLayout clientLayout = new TableWrapLayout();
clientLayout.numColumns = 2;
clientLayout.makeColumnsEqualWidth = false;
clientLayout.verticalSpacing = 1;
clientLayout.topMargin = 1;
clientLayout.bottomMargin = 1;
Composite connectorClient = toolkit.createComposite(connectorSection);
connectorClient.setLayout(clientLayout);
connectorClient.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
connectorSection.setClient(connectorClient);
Label imageLabel;
for (LegendElement element : elements) {
imageLabel = toolkit.createLabel(connectorClient, ""); //$NON-NLS-1$
imageLabel.setImage(element.getImage());
toolkit.createLabel(connectorClient, element.getLabel());
}
if (elements.size() < 4) {
imageLabel = toolkit.createLabel(connectorClient, ""); //$NON-NLS-1$
toolkit.createLabel(connectorClient, ""); //$NON-NLS-1$
}
}
private void createGettingStartedSection(Composite parent) {
TableWrapLayout layout = new TableWrapLayout();
layout.verticalSpacing = 0;
layout.leftMargin = 0;
layout.rightMargin = 0;
layout.topMargin = 0;
layout.bottomMargin = 0;
Composite hyperlinkClient = toolkit.createComposite(parent);
hyperlinkClient.setLayout(layout);
hyperlinkClient.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
Hyperlink gettingStartedLink = toolkit.createHyperlink(hyperlinkClient,
Messages.UiLegendControl_Also_see_the_Getting_Started_documentation_online, SWT.WRAP);
gettingStartedLink.addHyperlinkListener(new IHyperlinkListener() {
public void linkActivated(HyperlinkEvent e) {
close();
TasksUiUtil.openUrl(Messages.UiLegendControl_http_www_eclipse_org_mylyn_start);
}
public void linkEntered(HyperlinkEvent e) {
// ignore
}
public void linkExited(HyperlinkEvent e) {
// ignore
}
});
}
}