blob: 782fd8589b6bce6d229ce5a1fbbbf680c722dbab [file] [log] [blame]
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();
}
}