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    }