blob: 2cfb5c425518fd3cbefd6981a07a1b07333b55d6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.dialogs;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.internal.misc.StatusUtil;
import org.eclipse.ui.internal.preferences.WorkbenchPreferenceExtensionNode;
import org.eclipse.ui.statushandlers.StatusManager;
/**
* Property page node allows us to achieve presence in the property page dialog
* without loading the page itself, thus loading the contributing plugin.
* Only when the user selects the page will it be loaded.
*/
public class PropertyPageNode extends WorkbenchPreferenceExtensionNode {
private RegistryPageContributor contributor;
private IWorkbenchPropertyPage page;
private Image icon;
private Object element;
/**
* Create a new instance of the receiver.
* @param contributor
* @param element
*/
public PropertyPageNode(RegistryPageContributor contributor,
Object element) {
super(contributor.getPageId(), contributor.getConfigurationElement());
this.contributor = contributor;
this.element = element;
}
/**
* Creates the preference page this node stands for. If the page is null,
* it will be created by loading the class. If loading fails,
* empty filler page will be created instead.
*/
public void createPage() {
try {
page = contributor.createPage(element);
} catch (CoreException e) {
// Just inform the user about the error. The details are
// written to the log by now.
IStatus errStatus = StatusUtil.newStatus(e.getStatus(), WorkbenchMessages.PropertyPageNode_errorMessage);
StatusManager.getManager().handle(errStatus, StatusManager.SHOW);
page = new EmptyPropertyPage();
}
setPage(page);
}
/** (non-Javadoc)
* Method declared on IPreferenceNode.
*/
public void disposeResources() {
if (page != null) {
page.dispose();
page = null;
}
if (icon != null) {
icon.dispose();
icon = null;
}
}
/**
* Returns page icon, if defined.
*/
public Image getLabelImage() {
if (icon == null) {
ImageDescriptor desc = contributor.getPageIcon();
if (desc != null) {
icon = desc.createImage();
}
}
return icon;
}
/**
* Returns page label as defined in the registry.
*/
public String getLabelText() {
return contributor.getPageName();
}
}