blob: 5652706a317805be3248de2362f60f2f890e3c56 [file] [log] [blame]
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;
}
}