001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.osm.visitor.paint; 003 004import static org.openstreetmap.josm.tools.I18n.marktr; 005 006import java.awt.Color; 007import java.util.List; 008 009import org.openstreetmap.josm.Main; 010import org.openstreetmap.josm.data.Preferences.ColorKey; 011import org.openstreetmap.josm.gui.mappaint.MapPaintStyles; 012import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateListener; 013import org.openstreetmap.josm.gui.mappaint.StyleSource; 014 015public 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 volatile Color backgroundColorCache; 038 039 private static final MapPaintSylesUpdateListener styleOverrideListener = new MapPaintSylesUpdateListener() { 040 041 @Override 042 public void mapPaintStylesUpdated() { 043 backgroundColorCache = null; 044 } 045 046 @Override 047 public void mapPaintStyleEntryUpdated(int idx) { 048 mapPaintStylesUpdated(); 049 } 050 }; 051 052 static { 053 MapPaintStyles.addMapPaintSylesUpdateListener(styleOverrideListener); 054 } 055 056 PaintColors(String name, Color defaultColor) { 057 this.name = name; 058 this.defaultColor = defaultColor; 059 } 060 061 @Override 062 public String getColorName() { 063 return name; 064 } 065 066 @Override 067 public Color getDefaultValue() { 068 return defaultColor; 069 } 070 071 @Override 072 public String getSpecialName() { 073 return null; 074 } 075 076 public Color get() { 077 return Main.pref.getColor(this); 078 } 079 080 public static void getColors() { 081 for (PaintColors c:values()) { 082 c.get(); 083 } 084 } 085 086 public static Color getBackgroundColor() { 087 if (backgroundColorCache != null) 088 return backgroundColorCache; 089 List<StyleSource> sources = MapPaintStyles.getStyles().getStyleSources(); 090 for (StyleSource s : sources) { 091 if (!s.active) { 092 continue; 093 } 094 Color backgroundColorOverride = s.getBackgroundColorOverride(); 095 if (backgroundColorOverride != null) { 096 backgroundColorCache = backgroundColorOverride; 097 } 098 } 099 if (backgroundColorCache == null) { 100 backgroundColorCache = BACKGROUND.get(); 101 } 102 return backgroundColorCache; 103 } 104}