/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * 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: * Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation *****************************************************************************/ package org.eclipse.papyrus.customization.palette.dialog; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; import org.eclipse.gef.palette.PaletteDrawer; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.gef.palette.PaletteSeparator; import org.eclipse.gef.palette.PaletteStack; import org.eclipse.gef.palette.ToolEntry; import org.eclipse.papyrus.customization.palette.dialog.LocalPaletteContentPage.EntryType; import org.eclipse.papyrus.uml.diagram.common.Activator; import org.eclipse.papyrus.uml.diagram.common.service.AspectCreationEntry; import org.eclipse.papyrus.uml.diagram.common.service.palette.IPaletteEntryProxy; import org.eclipse.swt.graphics.Image; /** * Proxy class for palette entries */ public class PaletteEntryProxy implements IPaletteEntryProxy { /** key for the property : the icon path has changed */ public static final String PROPERTY_ICON_PATH = "ICON_PATH"; /** key for the property : a child has been added */ public static final String PROPERTY_ADD_CHILDREN = "PROPERTY_ADD_CHILDREN"; /** key for the property : a child has been removed */ public static final String PROPERTY_REMOVE_CHILDREN = "PROPERTY_REMOVE_CHILDREN"; /** proxy palette entry */ private final PaletteEntry entry; /** parent of this proxy */ private PaletteContainerProxy parent; /** PropertyChangeSupport */ protected PropertyChangeSupport listeners = new PropertyChangeSupport(this); /** proxy type */ private EntryType type; public PaletteEntryProxy(PaletteEntry entry) { this.entry = entry; setType(initType()); } /** * 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); } /** * @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); } /** * Returns the entry cached by this class * * @return the palette entry */ public PaletteEntry getEntry() { return entry; } /** * Inits the entry type for this proxy * * @return the entry type for this proxy */ protected EntryType initType() { if(entry instanceof PaletteDrawer) { return EntryType.DRAWER; } else if(entry instanceof PaletteSeparator) { return EntryType.SEPARATOR; } else if(entry instanceof PaletteStack) { return EntryType.STACK; } else if(entry instanceof AspectCreationEntry) { return EntryType.ASPECT_TOOL; } else if(entry instanceof ToolEntry) { return EntryType.TOOL; } return EntryType.TOOL; } /** * returns the label of the cached entry * * @return the label of the cached entry */ public String getLabel() { return entry.getLabel(); } /** * returns the id of the cached entry * * @return the id of the cached entry */ public String getId() { return entry.getId(); } /** * returns the small icon of the cached entry * * @return the small icon of the cached entry */ public Image getImage() { return Activator.getPluginIconImage(Activator.ID, entry.getSmallIcon()); } /** * returns the description of this entry proxy * * @return the description of this entry proxy */ public String getDescription() { return (entry != null) ? entry.getDescription() : ""; } /** * returns the image path of this entry proxy * * @return the image path of this entry proxy */ public String getImagePath() { return ""; } /** * Sets the parent for this proxy * * @param newParent * the parent proxy */ public void setParent(PaletteContainerProxy newParent) { parent = newParent; } /** * Returns the parent of this proxy * * @return the parent of this proxy */ public PaletteContainerProxy getParent() { return parent; } /** * Returns the list of children for this entry. By default, entries do not have children. * * @return the list of children for this entry */ public List<PaletteEntryProxy> getChildren() { return null; } /** * Sets the king of tool it is. * * @param type * the type to set */ public void setType(EntryType type) { this.type = type; } /** * Returns the kind of entry * * @return the kind of entry */ public EntryType getType() { return type; } /** * Sets the description of the palette entry proxied by this element * * @param desc * the new description */ public void setDescription(String desc) { if(getEntry() == null) { return; } String oldDesc = getEntry().getDescription(); if(oldDesc == null && desc == null) { return; } if(desc == null || !desc.equals(oldDesc)) { getEntry().setDescription(desc); listeners.firePropertyChange(PaletteEntry.PROPERTY_DESCRIPTION, oldDesc, desc); } } /** * Sets the label of the palette entry proxied by this element * * @param label * the new label */ public void setLabel(String label) { if(getEntry() == null) { return; } String oldLabel = getEntry().getLabel(); if(oldLabel == null && label == null) { return; } if(label == null || !label.equals(oldLabel)) { getEntry().setLabel(label); listeners.firePropertyChange(PaletteEntry.PROPERTY_LABEL, oldLabel, label); } } /** * Sets the label of the palette entry proxied by this element * * @param label * the new label */ public void setIcon(String path) { if(!(getEntry() instanceof AspectCreationEntry)) { return; } String oldPath = ((AspectCreationEntry)getEntry()).getIconPath(); if(oldPath == null && path == null) { return; } if(path == null || !path.equals(oldPath)) { ((AspectCreationEntry)getEntry()).setIconPath(path); listeners.firePropertyChange(PROPERTY_ICON_PATH, oldPath, path); } } /** * Method to add a child proxy to this proxy * * @param entry * the entry to add */ protected void addChild(PaletteEntryProxy entry) { listeners.firePropertyChange(PROPERTY_ADD_CHILDREN, null, entry); } /** * Method to add a child proxy to this proxy, before the given element * * @param entry * the entry to add * @param nextElement * the element that should be just after the entry */ protected void addChild(PaletteEntryProxy entry, PaletteEntryProxy nextElement) { listeners.firePropertyChange(PROPERTY_ADD_CHILDREN, null, entry); } /** * Remove the specified children from its parent * * @param proxy * the proxy to remove */ public void removeChild(PaletteEntryProxy proxy) { listeners.firePropertyChange(PROPERTY_REMOVE_CHILDREN, proxy, null); } }