package com.revivius.nb.darcula;
import javax.swing.*;
import java.awt.*;
/**
* ------------------------------------------------------------
* Copy paste from o.n.swing.plaf because it is module private.
* ------------------------------------------------------------
*
* A simple mechanism for guaranteeing the presence of a value in UIDefaults.
* Some look and feels (GTK/Synth) don't necessarily provide these colors,
* resulting in null pointer exceptions. Since we want to make it easy to
* write maintainable components, it is preferable to centralize guaranteeing
* the value here, rather than have the codebase littered with null tests and
* fallbacks for null colors.
*
* It will either take on the existing value if present, or used the passed
* value if not present. If passed an array of UIManager keys, it will try
* them in order, and use the first value that returns non-null from
* <code>UIManager.get()</code>.
*
* Usage:
* <pre>
* UIManager.put (new GuaranteedValue("controlShadow", Color.LIGHT_GRAY));
* or
* UIManager.put (new GuaranteedValue(new String[] {"Tree.foreground",
* List.foreground", "textText"}, Color.BLACK));
* </pre>
*
* It can also be used to ensure a value matches another value, with a fallback
* if it is not present:
* <pre>
* UIManager.put("TextArea.font", new GuaranteedValue ("Label.font", new Font("Dialog", Font.PLAIN, 11)))
*
* @author Tim Boudreau
*/
public class GuaranteedValue implements UIDefaults.LazyValue {
private Object value;
/** Creates a new instance of GuaranteedValue */
public GuaranteedValue(String key, Object fallback) {
//Be fail fast, so no random exceptions from random components later
if (key == null || fallback == null) {
throw new NullPointerException ("Null parameters: " + key + ',' + fallback);
}
value = UIManager.get(key);
if (value == null) {
value = fallback;
}
}
public GuaranteedValue(String[] keys, Object fallback) {
//Be fail fast, so no random exceptions from random components later
if (keys == null || fallback == null) {
throw new NullPointerException ("Null parameters: " + keys + ',' + fallback);
}
for (int i=0; i < keys.length; i++) {
value = UIManager.get(keys[i]);
if (value != null) {
break;
}
}
if (value == null) {
value = fallback;
}
}
public Object createValue(UIDefaults table) {
return value;
}
/** Convenience getter of the value as a color - returns null if this
* instance was used for some other type */
public Color getColor() {
Object o = createValue(null);
if (o instanceof Color) {
return (Color) o;
} else {
return null;
}
}
public Font getFont() {
Object o = createValue(null);
if (o instanceof Font) {
return (Font) o;
} else {
return null;
}
}
}