package magic.ui.theme;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
import java.util.Locale;
import javax.swing.ImageIcon;
import magic.data.MagicIcon;
import magic.ui.MagicImages;
import magic.ui.FontsAndBorders;
public abstract class AbstractTheme implements Theme {
// Prevents horizontal scroll-bar appearing in the user action panel
// for custom themes with a VALUE_SPACING less than 5.
private static final int MIN_VALUE_SPACING = 5;
private final String name;
private final Map<String,Object> themeMap;
AbstractTheme(final String name) {
this.name=name;
themeMap=new HashMap<>();
addToTheme(ICON_SMALL_BATTLEFIELD,MagicImages.getIcon(MagicIcon.ALL));
addToTheme(ICON_SMALL_COMBAT,MagicImages.getIcon(MagicIcon.COMBAT));
addToTheme(ICON_SMALL_HAND,MagicImages.getIcon(MagicIcon.HAND));
addToTheme(ICON_SMALL_GRAVEYARD,MagicImages.getIcon(MagicIcon.GRAVEYARD));
addToTheme(ICON_SMALL_EXILE,MagicImages.getIcon(MagicIcon.EXILE));
addToTheme(COLOR_TITLE_FOREGROUND,Color.WHITE);
addToTheme(COLOR_TITLE_BACKGROUND,new Color(0x23,0x6B,0x8E));
addToTheme(COLOR_ICON_BACKGROUND,FontsAndBorders.GRAY3);
addToTheme(COLOR_CHOICE_FOREGROUND,Color.BLUE);
addToTheme(COLOR_COMMON_FOREGROUND,Color.BLACK);
addToTheme(COLOR_UNCOMMON_FOREGROUND,new Color(0x8C,0x78,0x53));
addToTheme(COLOR_RARE_FOREGROUND,new Color(0xCD,0x7F,0x32));
addToTheme(OPTION_USE_OVERLAY,false);
addToTheme(COLOR_CHOICE,new Color(0,250,0,70));
addToTheme(COLOR_COMBAT_CHOICE,new Color(250,100,0,90));
addToTheme(COLOR_CHOICE_BORDER,new Color(0,250,0,70));
addToTheme(COLOR_COMBAT_CHOICE_BORDER,new Color(250,0,0,125));
addToTheme(COLOR_GAME_BORDER,Color.BLACK);
addToTheme(VALUE_SPACING, MIN_VALUE_SPACING);
addToTheme(VALUE_BACKGROUND_STRETCH,0);
addToTheme(VALUE_GAME_LAYOUT,1);
addToTheme(VALUE_GAME_STRETCH,0);
addToTheme(VALUE_GAME_OFFSET,0);
addToTheme(VALUE_GAME_BORDER,0);
}
final void addToTheme(final String aName, final Object value) {
if (VALUE_SPACING.equals(aName) && (int) value < MIN_VALUE_SPACING) {
themeMap.put(aName, MIN_VALUE_SPACING);
} else {
themeMap.put(aName,value);
}
}
@Override
public void load() {
}
@Override
public String getName() {
return name;
}
@Override
public BufferedImage getTexture(final String aName) {
final Object value=themeMap.get(aName);
return value==null?MagicImages.MISSING_BIG:(BufferedImage)value;
}
@Override
public Boolean getOptionUseOverlay() {
final Object value = themeMap.get(OPTION_USE_OVERLAY);
return (Boolean)value;
}
@Override
public ImageIcon getIcon(final String aName) {
final Object value=themeMap.get(aName);
return value==null?MagicImages.getIcon(MagicIcon.MISSING):(ImageIcon)value;
}
@Override
public Color getColor(final String aName) {
final Object value=themeMap.get(aName);
return value==null?Color.BLACK:(Color)value;
}
@Override
public Color getTextColor() {
return getColor(COLOR_TEXT_FOREGROUND);
}
@Override
public Color getChoiceColor() {
return getColor(COLOR_CHOICE);
}
@Override
public int getValue(final String aName) {
final Object value=themeMap.get(aName);
return value==null?0:(Integer)value;
}
@Override
public ImageIcon getAvatarIcon(final int index,final int size) {
return AvatarImages.getInstance().getAvatarIcon(index,size);
}
@Override
public ImageIcon getAbilityIcon(AbilityIcon ability) {
final String key = "icon_" + ability.name().toLowerCase(Locale.ENGLISH);
final Object value = themeMap.get(key);
return value == null ? null : (ImageIcon)value;
}
@Override
public BufferedImage getBackgroundImage() {
return getTexture(Theme.TEXTURE_BACKGROUND);
}
@Override
public boolean hasValue(String name) {
return themeMap.containsKey(name) && themeMap.get(name) != null;
}
protected String getStringValue(String name) {
return (String)themeMap.get(name);
}
}