001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.data.osm.visitor.paint;
003
004 import static org.openstreetmap.josm.tools.I18n.marktr;
005
006 import java.awt.Color;
007 import java.util.List;
008
009 import org.openstreetmap.josm.Main;
010 import org.openstreetmap.josm.data.Preferences.ColorKey;
011 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
012 import org.openstreetmap.josm.gui.mappaint.StyleSource;
013 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateListener;
014
015 public enum PaintColors implements ColorKey {
016
017 INACTIVE(marktr("inactive"), Color.darkGray),
018 SELECTED(marktr("selected"), Color.red),
019 RELATIONSELECTED(marktr("Relation: selected"), Color.magenta),
020 NODE(marktr("Node: standard"), Color.yellow),
021 CONNECTION(marktr("Node: connection"), Color.yellow),
022 TAGGED(marktr("Node: tagged"), new Color(204, 255, 255)), // light cyan
023 DEFAULT_WAY(marktr("way"), new Color(0,0,128)), // dark blue
024 RELATION(marktr("relation"), new Color(0,128,128)), // teal
025 UNTAGGED_WAY(marktr("untagged way"), new Color(0,128,0)), // dark green
026 BACKGROUND(marktr("background"), Color.BLACK),
027 HIGHLIGHT(marktr("highlight"), SELECTED.get()),
028 HIGHLIGHT_WIREFRAME(marktr("highlight wireframe"), Color.orange),
029
030 UNTAGGED(marktr("untagged"),Color.GRAY),
031 TEXT(marktr("text"), Color.WHITE),
032 AREA_TEXT(marktr("areatext"), Color.LIGHT_GRAY);
033
034 private final String name;
035 private final Color defaultColor;
036
037 private static Color backgroundColorCache = null;
038
039 private static final MapPaintSylesUpdateListener styleOverrideListener = new MapPaintSylesUpdateListener() {
040
041 public void mapPaintStylesUpdated() {
042 backgroundColorCache = null;
043 }
044
045 public void mapPaintStyleEntryUpdated(int idx) {
046 mapPaintStylesUpdated();
047 }
048 };
049
050 static {
051 MapPaintStyles.addMapPaintSylesUpdateListener(styleOverrideListener);
052 }
053
054 private PaintColors(String name, Color defaultColor) {
055 this.name = name;
056 this.defaultColor = defaultColor;
057 }
058
059 @Override
060 public String getColorName() {
061 return name;
062 }
063
064 @Override
065 public Color getDefaultValue() {
066 return defaultColor;
067 }
068
069 @Override
070 public String getSpecialName() {
071 return null;
072 }
073
074 public Color get() {
075 return Main.pref.getColor(this);
076 }
077
078 public static void getColors() {
079 for (PaintColors c:values()) {
080 c.get();
081 }
082 }
083
084 public static Color getBackgroundColor() {
085 if (backgroundColorCache != null)
086 return backgroundColorCache;
087 List<StyleSource> sources = MapPaintStyles.getStyles().getStyleSources();
088 for (StyleSource s : sources) {
089 if (!s.active) {
090 continue;
091 }
092 Color backgroundColorOverride = s.getBackgroundColorOverride();
093 if (backgroundColorOverride != null) {
094 backgroundColorCache = backgroundColorOverride;
095 }
096 }
097 if (backgroundColorCache == null) {
098 backgroundColorCache = BACKGROUND.get();
099 }
100 return backgroundColorCache;
101 }
102 }