001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.data.osm.visitor.paint;
003    
004    import java.awt.Color;
005    
006    import org.openstreetmap.josm.Main;
007    import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
008    import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
009    
010    public class MapPaintSettings implements PreferenceChangedListener {
011    
012        public static final MapPaintSettings INSTANCE = new MapPaintSettings();
013    
014        private boolean useRealWidth;
015        /** Preference: should directional arrows be displayed */
016        private boolean showDirectionArrow;
017        /** Preference: should arrows for oneways be displayed */
018        private boolean showOnewayArrow;
019        private int defaultSegmentWidth;
020        /** Preference: should the segement numbers of ways be displayed */
021        private boolean showOrderNumber;
022        /** Preference: should only the last arrow of a way be displayed */
023        private boolean showHeadArrowOnly;
024        private int showNamesDistance;
025        private int useStrokesDistance;
026        private int showIconsDistance;
027        /** Preference: size of selected nodes */
028        private int selectedNodeSize;
029        /** Preference: size of multiply connected nodes */
030        private int connectionNodeSize;
031        /** Preference: size of unselected nodes */
032        private int unselectedNodeSize;
033        /** Preference: size of tagged nodes */
034        private int taggedNodeSize;
035        /** Preference: should selected nodes be filled */
036        private boolean fillSelectedNode;
037        /** Preference: should unselected nodes be filled */
038        private boolean fillUnselectedNode;
039        /** Preference: should tagged nodes be filled */
040        private boolean fillTaggedNode;
041        /** Preference: should multiply connected nodes be filled */
042        private boolean fillConnectionNode;
043        private boolean outlineOnly;
044        /** Color Preference for selected objects */
045        private Color selectedColor;
046        private Color relationSelectedColor;
047        /** Color Preference for hightlighted objects */
048        private Color highlightColor;
049        /** Color Preference for inactive objects */
050        private Color inactiveColor;
051        /** Color Preference for nodes */
052        private Color nodeColor;
053        /** Color Preference for tagged nodes */
054        private Color taggedColor;
055        /** Color Preference for multiply connected nodes */
056        private Color connectionColor;
057        /** Color Preference for tagged and multiply connected nodes */
058        private Color taggedConnectionColor;
059    
060        private MapPaintSettings() {
061            load();
062            Main.pref.addPreferenceChangeListener(this);
063        }
064    
065        private void load() {
066            showDirectionArrow = Main.pref.getBoolean("draw.segment.direction", false);
067            showOnewayArrow = Main.pref.getBoolean("draw.oneway", true);
068            useRealWidth = Main.pref.getBoolean("mappaint.useRealWidth", false);
069            defaultSegmentWidth = Main.pref.getInteger("mappaint.segment.default-width", 2);
070    
071            selectedColor = PaintColors.SELECTED.get();
072            relationSelectedColor = PaintColors.RELATIONSELECTED.get();
073            highlightColor = PaintColors.HIGHLIGHT.get();
074            inactiveColor = PaintColors.INACTIVE.get();
075            nodeColor = PaintColors.NODE.get();
076            taggedColor = PaintColors.TAGGED.get();
077            connectionColor = PaintColors.CONNECTION.get();
078            if (taggedColor != nodeColor) {
079                taggedConnectionColor = taggedColor;
080            } else {
081                taggedConnectionColor = connectionColor;
082            }
083    
084    
085            showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false);
086            showHeadArrowOnly = Main.pref.getBoolean("draw.segment.head_only", false);
087    
088            showNamesDistance = Main.pref.getInteger("mappaint.shownames", 10000000);
089            useStrokesDistance = Main.pref.getInteger("mappaint.strokes", 10000000);
090            showIconsDistance = Main.pref.getInteger("mappaint.showicons", 10000000);
091    
092            selectedNodeSize = Main.pref.getInteger("mappaint.node.selected-size", 5);
093            unselectedNodeSize = Main.pref.getInteger("mappaint.node.unselected-size", 3);
094            connectionNodeSize = Main.pref.getInteger("mappaint.node.connection-size", 5);
095            taggedNodeSize = Main.pref.getInteger("mappaint.node.tagged-size", 3);
096            fillSelectedNode = Main.pref.getBoolean("mappaint.node.fill-selected", true);
097            fillUnselectedNode = Main.pref.getBoolean("mappaint.node.fill-unselected", false);
098            fillTaggedNode = Main.pref.getBoolean("mappaint.node.fill-tagged", true);
099            fillConnectionNode = Main.pref.getBoolean("mappaint.node.fill-connection", false);
100    
101            outlineOnly = Main.pref.getBoolean("draw.data.area_outline_only", false);
102    
103        }
104    
105        public void preferenceChanged(PreferenceChangeEvent e) {
106            load();
107        }
108    
109        public boolean isUseRealWidth() {
110            return useRealWidth;
111        }
112    
113        public boolean isShowDirectionArrow() {
114            return showDirectionArrow;
115        }
116    
117        public boolean isShowOnewayArrow() {
118            return showOnewayArrow;
119        }
120    
121        public Color getSelectedColor() {
122            return selectedColor;
123        }
124    
125        public int getDefaultSegmentWidth() {
126            return defaultSegmentWidth;
127        }
128    
129        public Color getSelectedColor(int alpha) {
130            return new Color(selectedColor.getRGB() & 0x00ffffff | (alpha << 24), true);
131        }
132    
133        public Color getRelationSelectedColor() {
134            return relationSelectedColor;
135        }
136    
137        public Color getRelationSelectedColor(int alpha) {
138            return new Color(relationSelectedColor.getRGB() & 0x00ffffff | (alpha << 24), true);
139        }
140    
141        public Color getHighlightColor() {
142            return highlightColor;
143        }
144    
145        public Color getInactiveColor() {
146            return inactiveColor;
147        }
148    
149        public Color getNodeColor() {
150            return nodeColor;
151        }
152    
153        public Color getTaggedColor() {
154            return taggedColor;
155        }
156    
157        public Color getConnectionColor() {
158            return connectionColor;
159        }
160    
161        public Color getTaggedConnectionColor() {
162            return taggedConnectionColor;
163        }
164    
165        public boolean isShowOrderNumber() {
166            return showOrderNumber;
167        }
168    
169        public void setShowHeadArrowOnly(boolean showHeadArrowOnly) {
170            this.showHeadArrowOnly = showHeadArrowOnly;
171        }
172    
173        public boolean isShowHeadArrowOnly() {
174            return showHeadArrowOnly;
175        }
176    
177        public int getShowNamesDistance() {
178            return showNamesDistance;
179        }
180    
181        public int getUseStrokesDistance() {
182            return useStrokesDistance;
183        }
184    
185        public int getShowIconsDistance() {
186            return showIconsDistance;
187        }
188    
189        public int getSelectedNodeSize() {
190            return selectedNodeSize;
191        }
192    
193        public int getConnectionNodeSize() {
194            return connectionNodeSize;
195        }
196    
197        public int getUnselectedNodeSize() {
198            return unselectedNodeSize;
199        }
200    
201        public int getTaggedNodeSize() {
202            return taggedNodeSize;
203        }
204    
205        public boolean isFillSelectedNode() {
206            return fillSelectedNode;
207        }
208    
209        public boolean isFillUnselectedNode() {
210            return fillUnselectedNode;
211        }
212    
213        public boolean isFillConnectionNode() {
214            return fillConnectionNode;
215        }
216    
217        public boolean isFillTaggedNode() {
218            return fillTaggedNode;
219        }
220    
221        public boolean isOutlineOnly() {
222            return outlineOnly;
223        }
224    }