package com.intellij.designer.model; import com.intellij.designer.palette.PaletteItem; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; import org.jdom.Element; import org.jetbrains.annotations.Nullable; import javax.swing.*; /** * Implementation of a {@link PaletteItem} which delegates to another {@linkplain PaletteItem} * but which possibly overrides the title, icon and or creation properties. */ public class VariationPaletteItem implements PaletteItem { private final PaletteItem myDefaultItem; private final String myTitle; private final String myIconPath; private final String myTooltip; private final String myCreation; private Icon myIcon; private MetaModel myModel; protected VariationPaletteItem(PaletteItem defaultItem, MetaModel model, Element element) { myDefaultItem = defaultItem; myModel = model; String title = element.getAttributeValue("title"); if (StringUtil.isEmpty(title)) { title = myDefaultItem.getTitle(); } myTitle = title; String iconPath = element.getAttributeValue("icon"); if (StringUtil.isEmpty(iconPath)) { myIcon = myDefaultItem.getIcon(); } myIconPath = iconPath; String tooltip = element.getAttributeValue("tooltip"); if (StringUtil.isEmpty(tooltip)) { tooltip = myDefaultItem.getTooltip(); } myTooltip = tooltip; Element creation = element.getChild("creation"); if (creation != null) { myCreation = creation.getTextTrim(); } else { myCreation = myModel.getCreation(); } } @Override public String getTitle() { return myTitle; } @Override public Icon getIcon() { if (myIcon == null) { assert myIconPath != null; myIcon = IconLoader.findIcon(myIconPath, myModel.getModel()); } return myIcon; } @Override public String getTooltip() { return myTooltip; } @Override public String getVersion() { return myDefaultItem.getVersion(); } @Override public boolean isEnabled() { return myDefaultItem.isEnabled(); } @Override public String getCreation() { return myCreation; } @Override public MetaModel getMetaModel() { return myModel; } @Override public void setMetaModel(MetaModel metaModel) { myModel = metaModel; } @Nullable @Override public String getDeprecatedIn() { return myDefaultItem.getDeprecatedIn(); } @Nullable @Override public String getDeprecatedHint() { return myDefaultItem.getDeprecatedHint(); } }