package be.nikiroo.jvcard.tui;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException;
+import java.util.Properties;
-import be.nikiroo.jvcard.resources.bundles.ColorBundle;
-import be.nikiroo.jvcard.resources.enums.ColorOption;
+import be.nikiroo.jvcard.resources.ColorBundle;
+import be.nikiroo.jvcard.resources.ColorOption;
import com.googlecode.lanterna.TextColor;
+import com.googlecode.lanterna.graphics.PropertiesTheme;
+import com.googlecode.lanterna.graphics.Theme;
+import com.googlecode.lanterna.gui2.AbstractTextGUI;
import com.googlecode.lanterna.gui2.Label;
/**
* @author niki
*
*/
-public class UiColors extends ColorBundle {
+public class UiColors {
static private Object lock = new Object();
static private UiColors instance = null;
private Map<String, TextColor> colorMap = null;
+ private ColorBundle bundle;
private UiColors() {
- super();
+ bundle = new ColorBundle();
colorMap = new HashMap<String, TextColor>();
}
/**
- * Create a new {@link Label} with the colours of the given {@link ColorOption}.
+ * Return a {@link Theme} following the colours defined in
+ * colors.properties.
+ *
+ * @return the {@link Theme}
+ */
+ static public Theme getCustomTheme() {
+ // Create a properties-theme with our own custom values for some of it
+ Properties properties = new Properties();
+ try {
+ ClassLoader classLoader = AbstractTextGUI.class.getClassLoader();
+ InputStream resourceAsStream = classLoader
+ .getResourceAsStream("default-theme.properties");
+ if (resourceAsStream == null) {
+ resourceAsStream = new FileInputStream(
+ "src/main/resources/default-theme.properties");
+ }
+ properties.load(resourceAsStream);
+ resourceAsStream.close();
+ } catch (IOException e) {
+ }
+
+ // default colours:
+ String fg = getForegroundColor(ColorOption.DEFAULT).toString();
+ String bg = getBackgroundColor(ColorOption.DEFAULT).toString();
+ for (String def : new String[] { "com.googlecode.lanterna",
+ "com.googlecode.lanterna.gui2.TextBox",
+ "com.googlecode.lanterna.gui2.AbstractListBox",
+ "com.googlecode.lanterna.gui2.Borders$StandardBorder" }) {
+ properties.put(def + ".foreground", fg);
+ properties.put(def + ".background", bg);
+ }
+
+ // no bold on borders prelight:
+ properties
+ .put("com.googlecode.lanterna.gui2.Borders$StandardBorder.sgr[PRELIGHT]",
+ "");
+
+ // line answers:
+ fg = getForegroundColor(ColorOption.LINE_MESSAGE_ANS).toString();
+ bg = getBackgroundColor(ColorOption.LINE_MESSAGE_ANS).toString();
+ String prop = "com.googlecode.lanterna.gui2.TextBox";
+ properties.put(prop + ".foreground[ACTIVE]", fg);
+ properties.put(prop + ".background[ACTIVE]", bg);
+
+ PropertiesTheme theme = new PropertiesTheme(properties);
+ return theme;
+ }
+
+ /**
+ * Create a new {@link Label} with the colours of the given
+ * {@link ColorOption}.
*
* @param el
* the {@link ColorOption}
if (!getInstance().colorMap.containsKey(el.name() + "_BG")) {
String value = null;
try {
- value = getInstance().map.getString(el.name() + "_BG");
+ value = getInstance().bundle.getStringX(el, "BG");
} catch (MissingResourceException mre) {
value = null;
}
if (!getInstance().colorMap.containsKey(el.name() + "_FG")) {
String value = null;
try {
- value = getInstance().map.getString(el.name() + "_FG");
+ value = getInstance().bundle.getStringX(el, "FG");
} catch (MissingResourceException mre) {
value = null;
}