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 }