/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * @author Fabio Zadrozny */ package org.python.pydev.shared_ui.field_editors; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Link; import org.python.pydev.shared_ui.tooltips.presenter.ToolTipPresenterHandler; /** * Helper class to provide a field that can be used as a link. * * @note: to actually create a text that can be linked, it must be written as html with <a>text</a>. * * @author Fabio */ public class LinkFieldEditor extends FieldEditor { /** * Link class */ private Link link; /** * The selection listener that will do some action when the link is selected */ private final SelectionListener selectionListener; private final String tooltip; private final ToolTipPresenterHandler tooltipPresenter; public LinkFieldEditor(String name, String linkText, Composite parent, SelectionListener selectionListener) { this(name, linkText, parent, selectionListener, null, null); } /** * @param name the name of the property * @param linkText the text that'll appear to the user * @param parent the parent composite * @param selectionListener a listener that'll be executed when the linked text is clicked */ public LinkFieldEditor(String name, String linkText, Composite parent, SelectionListener selectionListener, String tooltip, ToolTipPresenterHandler tooltipPresenter) { this.tooltip = tooltip; init(name, linkText); this.selectionListener = selectionListener; this.tooltipPresenter = tooltipPresenter; createControl(parent); } @Override protected void adjustForNumColumns(int numColumns) { GridData gd = (GridData) link.getLayoutData(); gd.horizontalSpan = numColumns; } @Override protected void doFillIntoGrid(Composite parent, int numColumns) { Link link = getLinkControl(parent); GridData gd = new GridData(); gd.horizontalSpan = numColumns; gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; link.setLayoutData(gd); } /** * Returns this field editor's link component. * <p> * The link is created if it does not already exist * </p> * * @param parent the parent * @return the label control */ public Link getLinkControl(Composite parent) { if (link == null) { link = new Link(parent, SWT.NONE); link.setFont(parent.getFont()); String text = getLabelText(); if (text != null) { link.setText(text); } if (tooltip != null) { if (tooltipPresenter != null) { link.setData(ToolTipPresenterHandler.TIP_DATA, tooltip); tooltipPresenter.install(link); } else { link.setToolTipText(tooltip); } } link.addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent event) { link = null; } }); link.addSelectionListener(getSelectionListener()); } else { checkParent(link, parent); } return link; } public Link getLink() { return link; } private SelectionListener getSelectionListener() { return selectionListener; } @Override protected void doLoad() { } @Override protected void doLoadDefault() { } @Override protected void doStore() { } @Override public int getNumberOfControls() { return 1; } @Override public void setEnabled(boolean enabled, Composite parent) { //super.setEnabled(enabled, parent); -- don't call super! link.setEnabled(enabled); } }