Mercurial > projects > dwt2
diff org.eclipse.jface/src/org/eclipse/jface/preference/PreferenceNode.d @ 12:bc29606a740c
Added dwt-addons in original directory structure of eclipse.org
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 14 Mar 2009 18:23:29 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/org.eclipse.jface/src/org/eclipse/jface/preference/PreferenceNode.d Sat Mar 14 18:23:29 2009 +0100 @@ -0,0 +1,290 @@ +/******************************************************************************* + * 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 + * Port to the D programming language: + * Frank Benoit <benoit@tionex.de> + *******************************************************************************/ +module org.eclipse.jface.preference.PreferenceNode; + +import org.eclipse.jface.preference.IPreferenceNode; +import org.eclipse.jface.preference.IPreferencePage; + + +// import java.util.List; + +import org.eclipse.swt.graphics.Image; +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.resource.ImageDescriptor; + +import java.lang.all; +import java.util.List; +import java.util.ArrayList; +import java.util.Set; + +/** + * A concrete implementation of a node in a preference dialog tree. This class + * also supports lazy creation of the node's preference page. + */ +public class PreferenceNode : IPreferenceNode { + /** + * Preference page, or <code>null</code> if not yet loaded. + */ + private IPreferencePage page; + + /** + * The list of subnodes (immediate children) of this node (element type: + * <code>IPreferenceNode</code>). + */ + private List subNodes; + + /** + * Name of a class that implements <code>IPreferencePage</code>, or + * <code>null</code> if none. + */ + private String classname; + + /** + * The id of this node. + */ + private String id; + + /** + * Text label for this node. Note that this field is only used prior to the + * creation of the preference page. + */ + private String label; + + /** + * Image descriptor for this node, or <code>null</code> if none. + */ + private ImageDescriptor imageDescriptor; + + /** + * Cached image, or <code>null</code> if none. + */ + private Image image; + + /** + * Creates a new preference node with the given id. The new node has no + * subnodes. + * + * @param id + * the node id + */ + public this(String id) { + Assert.isNotNull(id); + this.id = id; + } + + /** + * Creates a preference node with the given id, label, and image, and + * lazily-loaded preference page. The preference node assumes (sole) + * responsibility for disposing of the image; this will happen when the node + * is disposed. + * + * @param id + * the node id + * @param label + * the label used to display the node in the preference dialog's + * tree + * @param image + * the image displayed left of the label in the preference + * dialog's tree, or <code>null</code> if none + * @param className + * the class name of the preference page; this class must + * implement <code>IPreferencePage</code> + */ + public this(String id, String label, ImageDescriptor image, + String className) { + this(id); + this.imageDescriptor = image; + Assert.isNotNull(label); + this.label = label; + this.classname = className; + } + + /** + * Creates a preference node with the given id and preference page. The + * title of the preference page is used for the node label. The node will + * not have an image. + * + * @param id + * the node id + * @param preferencePage + * the preference page + */ + public this(String id, IPreferencePage preferencePage) { + this(id); + Assert.isNotNull(cast(Object)preferencePage); + page = preferencePage; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public void add(IPreferenceNode node) { + if (subNodes is null) { + subNodes = new ArrayList(); + } + subNodes.add(cast(Object)node); + } + + /** + * Creates a new instance of the given class <code>className</code>. + * + * @param className + * @return new Object or <code>null</code> in case of failures. + */ + private Object createObject(String className) { + Assert.isNotNull(className); +// try { + ClassInfo cl = ClassInfo.find(className); + if (cl !is null) { + return cl.create(); + } +// } catch (ClassNotFoundException e) { +// return null; +// } catch (InstantiationException e) { +// return null; +// } catch (IllegalAccessException e) { +// return null; +// } catch (NoSuchMethodError e) { +// return null; +// } + return null; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public void createPage() { + page = cast(IPreferencePage) createObject(classname); + if (getLabelImage() !is null) { + page.setImageDescriptor(imageDescriptor); + } + page.setTitle(label); + } + + /** + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public void disposeResources() { + if (image !is null) { + image.dispose(); + image = null; + } + if (page !is null) { + page.dispose(); + page = null; + } + } + + /* + * (non-Javadoc) Method declared on IContributionNode. + */ + public IPreferenceNode findSubNode(String id) { + Assert.isNotNull(id); + Assert.isTrue(id.length > 0); + if (subNodes is null) { + return null; + } + int size = subNodes.size(); + for (int i = 0; i < size; i++) { + IPreferenceNode node = cast(IPreferenceNode) subNodes.get(i); + if (id.equals(node.getId())) { + return node; + } + } + return null; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public String getId() { + return this.id; + } + + /** + * Returns the image descriptor for this node. + * + * @return the image descriptor + */ + protected ImageDescriptor getImageDescriptor() { + return imageDescriptor; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public Image getLabelImage() { + if (image is null && imageDescriptor !is null) { + image = imageDescriptor.createImage(); + } + return image; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public String getLabelText() { + if (page !is null) { + return page.getTitle(); + } + return label; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public IPreferencePage getPage() { + return page; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public IPreferenceNode[] getSubNodes() { + if (subNodes is null) { + return new IPreferenceNode[0]; + } + return arraycast!(IPreferenceNode)( subNodes + .toArray()); + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public IPreferenceNode remove(String id) { + IPreferenceNode node = findSubNode(id); + if (node !is null) { + remove(node); + } + return node; + } + + /* + * (non-Javadoc) Method declared on IPreferenceNode. + */ + public bool remove(IPreferenceNode node) { + if (subNodes is null) { + return false; + } + return subNodes.remove(cast(Object)node); + } + + /** + * Set the current page to be newPage. + * + * @param newPage + */ + public void setPage(IPreferencePage newPage) { + page = newPage; + } +}