| package org.eclipse.dltk.ui.dialogs; |
| |
| import java.util.Iterator; |
| |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.jface.preference.IPreferenceNode; |
| import org.eclipse.jface.preference.PreferenceManager; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Link; |
| import org.eclipse.ui.internal.WorkbenchMessages; |
| import org.eclipse.ui.internal.dialogs.PropertyPageContributorManager; |
| import org.eclipse.ui.internal.dialogs.PropertyPageManager; |
| import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; |
| |
| public class PropertyLinkArea { |
| |
| private Link pageLink; |
| private IAdaptable element; |
| |
| public PropertyLinkArea(Composite parent, int style, final String pageId, |
| IAdaptable element, String message, |
| final IWorkbenchPreferenceContainer pageContainer) { |
| this.element = element; |
| pageLink = new Link(parent, style); |
| |
| IPreferenceNode node = getPreferenceNode(pageId); |
| String text = null; |
| if (node == null) { |
| text = NLS.bind(WorkbenchMessages.PreferenceNode_NotFound, pageId); |
| } else { |
| text = NLS.bind(message, node.getLabelText()); |
| } |
| |
| pageLink.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| pageContainer.openPage(pageId, null); |
| } |
| }); |
| |
| pageLink.setText(text); |
| } |
| |
| /** |
| * Returns the property link control |
| */ |
| public Control getControl() { |
| return pageLink; |
| } |
| |
| private IPreferenceNode getPreferenceNode(String pageId) { |
| /* |
| * code pulled from org.eclipse.ui.internal.dialogs.PropertyDialog - i'm |
| * not sure why this type of class doesn't already exist for property |
| * pages like it does for preference pages since it seems it would be |
| * very useful - guess we're breaking new ground :) |
| */ |
| PropertyPageManager pageManager = new PropertyPageManager(); |
| PropertyPageContributorManager.getManager().contribute(pageManager, |
| element); |
| |
| Iterator pages = pageManager.getElements(PreferenceManager.PRE_ORDER) |
| .iterator(); |
| |
| while (pages.hasNext()) { |
| IPreferenceNode node = (IPreferenceNode) pages.next(); |
| if (node.getId().equals(pageId)) { |
| return node; |
| } |
| } |
| |
| return null; |
| } |
| } |