/******************************************************************************* * Copyright (c) 2000, 2005 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.gef.palette; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import org.eclipse.jface.resource.ImageDescriptor; /** * Root class (statically) for the palette model. * * @author Pratik Shah */ public class PaletteEntry { /** * Property name for the entry's small icon */ public static final String PROPERTY_SMALL_ICON = "Small Icon"; //$NON-NLS-1$ /** * Property name for the entry's type */ public static final String PROPERTY_TYPE = "Type"; //$NON-NLS-1$ /** * Property name for the entry's large icon */ public static final String PROPERTY_LARGE_ICON = "Large Icon"; //$NON-NLS-1$ /** * Property name for the entry's label (name) */ public static final String PROPERTY_LABEL = "Name"; //$NON-NLS-1$ /** * Property name for the entry's description */ public static final String PROPERTY_DESCRIPTION = "Description"; //$NON-NLS-1$ /** * Property name for the entry's hidden status */ public static final String PROPERTY_VISIBLE = "Visible"; //$NON-NLS-1$ /** * Property name for the entry's default staus */ public static final String PROPERTY_DEFAULT = "Default"; //$NON-NLS-1$ /** * Property name for the entry's parent */ public static final String PROPERTY_PARENT = "Parent"; //$NON-NLS-1$ /** * Type unknown */ public static final String PALETTE_TYPE_UNKNOWN = "Palette_type_Unknown";//$NON-NLS-1$ /** * No changes can be made to a PaletteEntry with this permission level. */ public static final int PERMISSION_NO_MODIFICATION = 1; /** * Entries with this permission level can only be hidden/shown. */ public static final int PERMISSION_HIDE_ONLY = 3; /** * Any property of entries with this level of permission can be changed; however, they * cannot be deleted from the palette. The children PaletteContainers with this * permission level can be reordered within that container (however, cross-container * moving is not allowed). * */ public static final int PERMISSION_LIMITED_MODIFICATION = 7; /** * All modifications allowed. */ public static final int PERMISSION_FULL_MODIFICATION = 15; /** * PropertyChangeSupport */ protected PropertyChangeSupport listeners = new PropertyChangeSupport(this); private PaletteContainer parent; private String label, id; private String shortDescription; private ImageDescriptor iconSmall; private ImageDescriptor iconLarge; private boolean visible = true; private int permission = PERMISSION_FULL_MODIFICATION; private Object type = PaletteEntry.PALETTE_TYPE_UNKNOWN; /** * Constructor * <p> * Any parameter can be <code>null</code> * </p> * * @param label The entry's name * @param shortDescription The entry's description */ public PaletteEntry(String label, String shortDescription) { this(label, shortDescription, null, null, null); } /** * Constructor * <p> * Any parameter can be <code>null</code> * </p> * * @param label The entry's name * @param shortDescription The entry's description * @param type The entry's type */ public PaletteEntry(String label, String shortDescription, Object type) { this(label, shortDescription, null, null, type); } /** * Constructor * <p> * Any parameter can be <code>null</code> * </p> * * @param label The entry's name * @param shortDescription The entry's description * @param iconSmall The small icon to represent this entry * @param iconLarge The large icon to represent this entry */ public PaletteEntry(String label, String shortDescription, ImageDescriptor iconSmall, ImageDescriptor iconLarge) { this(label, shortDescription, iconSmall, iconLarge, null); } /** * Constructor * <p> * Any parameter can be <code>null</code> * </p> * @param label The entry's name * @param shortDescription The entry's description * @param iconSmall The small icon to represent this entry * @param iconLarge The large icon to represent this entry * @param type The entry's type */ public PaletteEntry(String label, String shortDescription, ImageDescriptor iconSmall, ImageDescriptor iconLarge, Object type) { this(label, shortDescription, iconSmall, iconLarge, type, null); } /** * Constructor * <p> * Any parameter can be <code>null</code> * </p> * @param label The entry's name * @param shortDescription The entry's description * @param smallIcon The small icon to represent this entry * @param largeIcon The large icon to represent this entry * @param type The entry's type * @param id The entry's id (preferrably unique) */ public PaletteEntry(String label, String shortDescription, ImageDescriptor smallIcon, ImageDescriptor largeIcon, Object type, String id) { setLabel(label); setDescription(shortDescription); setSmallIcon(smallIcon); setLargeIcon(largeIcon); setType(type); setId(id); } /** * A listener can only be added once. Adding it more than once will do nothing. * @param listener the PropertyChangeListener that is to be notified of changes * @see java.beans.PropertyChangeSupport#addPropertyChangeListener( * java.beans.PropertyChangeListener) */ public void addPropertyChangeListener(PropertyChangeListener listener) { listeners.removePropertyChangeListener(listener); listeners.addPropertyChangeListener(listener); } /** * @return a short desecription describing this entry. */ public String getDescription() { return shortDescription; } /** * Returns the id. If no ID has been set (or it is <code>null</code>), an empty String * will be returned. * @return String id */ public String getId() { if (id == null) return ""; //$NON-NLS-1$ return id; } /** * @return the label for this entry. */ public String getLabel() { return label; } /** * @return a large icon representing this entry. */ public ImageDescriptor getLargeIcon() { return iconLarge; } /** * @return the parent container of this entry */ public PaletteContainer getParent() { return parent; } /** * @return a small icon representing the entry. */ public ImageDescriptor getSmallIcon() { return iconSmall; } /** * @return the type of this entry. Useful for different interpretations * of the palette model. */ public Object getType() { return type; } /** * Returned values are from amongst the following: * <UL> * <LI>PERMISSION_NO_MODIFICATION</LI> * <LI>PERMISSION_HIDE_ONLY</LI> * <LI>PERMISSION_LIMITED_MODIFICATION</LI> * <LI>PERMISSION_FULL_MODIFICATION</LI> * </UL> * * @return the permission level for this entry. * @see #setUserModificationPermission(int) */ public int getUserModificationPermission() { return permission; } /** * @return whether or not this entry is visible. An entry that is not visible is not * shown on the palette. */ public boolean isVisible() { return visible; } /** * @param listener the PropertyChangeListener that is not to be notified anymore * @see java.beans.PropertyChangeSupport#removePropertyChangeListener( * java.beans.PropertyChangeListener) */ public void removePropertyChangeListener(PropertyChangeListener listener) { listeners.removePropertyChangeListener(listener); } /** * Mutator method for description * @param s The new description */ public void setDescription(String s) { if (s == null && shortDescription == null) { return; } if (s == null || !s.equals(shortDescription)) { String oldDescrption = shortDescription; shortDescription = s; listeners.firePropertyChange(PROPERTY_DESCRIPTION, oldDescrption, shortDescription); } } /** * Sets the id. Can be <code>null</code>. * @param id The new id to be set */ public void setId(String id) { this.id = id; } /** * Mutator method for label * @param s The new name */ public void setLabel(String s) { if (s == null && label == null) { return; } if (s == null || !s.equals(label)) { String oldLabel = label; label = s; listeners.firePropertyChange(PROPERTY_LABEL, oldLabel, label); } } /** * Mutator method for large icon * @param icon The large icon to represent this entry */ public void setLargeIcon(ImageDescriptor icon) { if (icon != iconLarge) { ImageDescriptor oldIcon = iconLarge; iconLarge = icon; listeners.firePropertyChange(PROPERTY_LARGE_ICON, oldIcon, iconLarge); } } /** * Sets the parent of this entry * * @param newParent The parent PaletteContainer */ public void setParent(PaletteContainer newParent) { if (parent != newParent) { PaletteContainer oldParent = parent; parent = newParent; listeners.firePropertyChange(PROPERTY_PARENT, oldParent, parent); } } /** * Mutator method for small icon * * @param icon The new small icon to represent this entry */ public void setSmallIcon(ImageDescriptor icon) { if (icon != iconSmall) { ImageDescriptor oldIcon = iconSmall; iconSmall = icon; listeners.firePropertyChange(PROPERTY_SMALL_ICON, oldIcon, icon); } } /** * Mutator method for type * @param newType The new type */ public void setType(Object newType) { if (newType == null && type == null) { return; } if (type == null || !type.equals(newType)) { Object oldType = type; type = newType; listeners.firePropertyChange(PROPERTY_TYPE, oldType, type); } } /** * Permissions are not checked before making modifications. Clients should check the * permission before invoking a modification. Sub-classes may extend the set of * permissions. Current set has: * <UL> * <LI>PERMISSION_NO_MODIFICATION</LI> * <LI>PERMISSION_HIDE_ONLY</LI> * <LI>PERMISSION_LIMITED_MODIFICATION</LI> * <LI>PERMISSION_FULL_MODIFICATION</LI> * </UL> * Default is <code>PERMISSION_FULL_MODIFICATION</code> * * @param permission One of the above-specified permission levels */ public void setUserModificationPermission(int permission) { this.permission = permission; } /** * Makes this entry visible or invisible. An invisible entry does not show up on the * palette. * * @param newVal The new boolean indicating whether the entry is visible or not */ public void setVisible(boolean newVal) { if (newVal != visible) { visible = newVal; listeners.firePropertyChange(PROPERTY_VISIBLE, !visible, visible); } } /** * @see java.lang.Object#toString() */ public String toString() { return "Palette Entry (" + (label != null ? label : "") //$NON-NLS-2$//$NON-NLS-1$ + ")"; //$NON-NLS-1$ } }