source: josm/trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java @ 12841

Last change on this file since 12841 was 12841, checked in by bastiK, 5 weeks ago

see #15229 - fix deprecations caused by [12840]

  • Property svn:eol-style set to native
File size: 12.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm.visitor.paint;
3
4import java.awt.Color;
5
6import org.openstreetmap.josm.Main;
7import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
8import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
9
10/**
11 * Global mappaint settings.
12 * @since 2675
13 */
14public final class MapPaintSettings implements PreferenceChangedListener {
15
16    /** The unique instance **/
17    public static final MapPaintSettings INSTANCE = new MapPaintSettings();
18
19    private boolean useRealWidth;
20    /** Preference: should directional arrows be displayed */
21    private boolean showDirectionArrow;
22    /** Preference: should arrows for oneways be displayed */
23    private boolean showOnewayArrow;
24    /** Preference: default width for ways segments */
25    private int defaultSegmentWidth;
26    /** Preference: should the segment numbers of ways be displayed */
27    private boolean showOrderNumber;
28    /** Preference: should the segment numbers of ways be displayed on selected way */
29    private boolean showOrderNumberOnSelectedWay;
30    /** Preference: should only the last arrow of a way be displayed */
31    private boolean showHeadArrowOnly;
32    private int showNamesDistance;
33    private int useStrokesDistance;
34    private int showIconsDistance;
35    /** Preference: size of selected nodes */
36    private int selectedNodeSize;
37    /** Preference: size of multiply connected nodes */
38    private int connectionNodeSize;
39    /** Preference: size of unselected nodes */
40    private int unselectedNodeSize;
41    /** Preference: size of tagged nodes */
42    private int taggedNodeSize;
43    /** Preference: should selected nodes be filled */
44    private boolean fillSelectedNode;
45    /** Preference: should unselected nodes be filled */
46    private boolean fillUnselectedNode;
47    /** Preference: should tagged nodes be filled */
48    private boolean fillTaggedNode;
49    /** Preference: should multiply connected nodes be filled */
50    private boolean fillConnectionNode;
51    /** Preference: should only the data area outline be drawn */
52    private boolean outlineOnly;
53    /** Color Preference for selected objects */
54    private Color selectedColor;
55    private Color relationSelectedColor;
56    /** Color Preference for hightlighted objects */
57    private Color highlightColor;
58    /** Color Preference for inactive objects */
59    private Color inactiveColor;
60    /** Color Preference for nodes */
61    private Color nodeColor;
62    /** Color Preference for tagged nodes */
63    private Color taggedColor;
64    /** Color Preference for multiply connected nodes */
65    private Color connectionColor;
66    /** Color Preference for tagged and multiply connected nodes */
67    private Color taggedConnectionColor;
68
69    private MapPaintSettings() {
70        load();
71        Main.pref.addPreferenceChangeListener(this);
72    }
73
74    private void load() {
75        showDirectionArrow = Main.pref.getBoolean("draw.segment.direction", false);
76        showOnewayArrow = Main.pref.getBoolean("draw.oneway", true);
77        useRealWidth = Main.pref.getBoolean("mappaint.useRealWidth", false);
78        defaultSegmentWidth = Main.pref.getInt("mappaint.segment.default-width", 2);
79
80        selectedColor = PaintColors.SELECTED.get();
81        relationSelectedColor = PaintColors.RELATIONSELECTED.get();
82        highlightColor = PaintColors.HIGHLIGHT.get();
83        inactiveColor = PaintColors.INACTIVE.get();
84        nodeColor = PaintColors.NODE.get();
85        taggedColor = PaintColors.TAGGED.get();
86        connectionColor = PaintColors.CONNECTION.get();
87        if (taggedColor != nodeColor) {
88            taggedConnectionColor = taggedColor;
89        } else {
90            taggedConnectionColor = connectionColor;
91        }
92
93        showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false);
94        showOrderNumberOnSelectedWay = Main.pref.getBoolean("draw.segment.order_number.on_selected", false);
95        showHeadArrowOnly = Main.pref.getBoolean("draw.segment.head_only", false);
96
97        showNamesDistance = Main.pref.getInt("mappaint.shownames", 10_000_000);
98        useStrokesDistance = Main.pref.getInt("mappaint.strokes", 10_000_000);
99        showIconsDistance = Main.pref.getInt("mappaint.showicons", 10_000_000);
100
101        selectedNodeSize = Main.pref.getInt("mappaint.node.selected-size", 5);
102        unselectedNodeSize = Main.pref.getInt("mappaint.node.unselected-size", 3);
103        connectionNodeSize = Main.pref.getInt("mappaint.node.connection-size", 5);
104        taggedNodeSize = Main.pref.getInt("mappaint.node.tagged-size", 3);
105        fillSelectedNode = Main.pref.getBoolean("mappaint.node.fill-selected", true);
106        fillUnselectedNode = Main.pref.getBoolean("mappaint.node.fill-unselected", false);
107        fillTaggedNode = Main.pref.getBoolean("mappaint.node.fill-tagged", true);
108        fillConnectionNode = Main.pref.getBoolean("mappaint.node.fill-connection", false);
109
110        outlineOnly = Main.pref.getBoolean("draw.data.area_outline_only", false);
111    }
112
113    @Override
114    public void preferenceChanged(PreferenceChangeEvent e) {
115        load();
116    }
117
118    /**
119     * Determines if the real width of ways should be used
120     * @return {@code true} if the real width of ways should be used
121     */
122    public boolean isUseRealWidth() {
123        return useRealWidth;
124    }
125
126    /**
127     * Determines if directional arrows should be displayed
128     * @return {@code true} if directional arrows should be displayed
129     */
130    public boolean isShowDirectionArrow() {
131        return showDirectionArrow;
132    }
133
134    /**
135     * Determines if arrows for oneways should be displayed
136     * @return {@code true} if arrows for oneways should be displayed
137     */
138    public boolean isShowOnewayArrow() {
139        return showOnewayArrow;
140    }
141
142    /**
143     * Returns color for selected objects (nodes and ways)
144     * @return color for selected objects
145     */
146    public Color getSelectedColor() {
147        return selectedColor;
148    }
149
150    /**
151     * Returns color for selected objects (nodes and ways) with a given alpha
152     * @param alpha alpha component in the range 0-255
153     * @return color for selected objects
154     */
155    public Color getSelectedColor(int alpha) {
156        return new Color((selectedColor.getRGB() & 0x00ffffff) | (alpha << 24), true);
157    }
158
159    /**
160     * Returns default width for ways segments
161     * @return default width for ways segments
162     */
163    public int getDefaultSegmentWidth() {
164        return defaultSegmentWidth;
165    }
166
167    /**
168     * Returns color for selected relations
169     * @return color for selected relations
170     */
171    public Color getRelationSelectedColor() {
172        return relationSelectedColor;
173    }
174
175    /**
176     * Returns color for selected relations with a given alpha
177     * @param alpha alpha component in the range 0-255
178     * @return color for selected relations
179     */
180    public Color getRelationSelectedColor(int alpha) {
181        return new Color((relationSelectedColor.getRGB() & 0x00ffffff) | (alpha << 24), true);
182    }
183
184    /**
185     * Returns color for hightlighted objects
186     * @return color for hightlighted objects
187     */
188    public Color getHighlightColor() {
189        return highlightColor;
190    }
191
192    /**
193     * Returns color for inactive objects
194     * @return color for inactive objects
195     */
196    public Color getInactiveColor() {
197        return inactiveColor;
198    }
199
200    /**
201     * Returns color for nodes
202     * @return color for nodes
203     */
204    public Color getNodeColor() {
205        return nodeColor;
206    }
207
208    /**
209     * Returns color for tagged nodes
210     * @return color for tagged nodes
211     */
212    public Color getTaggedColor() {
213        return taggedColor;
214    }
215
216    /**
217     * Returns color for multiply connected nodes
218     * @return color for multiply connected nodes
219     */
220    public Color getConnectionColor() {
221        return connectionColor;
222    }
223
224    /**
225     * Returns color for tagged and multiply connected nodes
226     * @return color for tagged and multiply connected nodes
227     */
228    public Color getTaggedConnectionColor() {
229        return taggedConnectionColor;
230    }
231
232    /**
233     * Determines if the segment numbers of ways should be displayed
234     * @return {@code true} if the segment numbers of ways should be displayed
235     */
236    public boolean isShowOrderNumber() {
237        return showOrderNumber;
238    }
239
240    /**
241     * Determines if the segment numbers of the selected way should be displayed
242     * @return {@code true} if the segment numbers of the selected way should be displayed
243     */
244    public boolean isShowOrderNumberOnSelectedWay() {
245        return showOrderNumberOnSelectedWay;
246    }
247
248    /**
249     * Specifies if only the last arrow of a way should be displayed
250     * @param showHeadArrowOnly {@code true} if only the last arrow of a way should be displayed
251     */
252    public void setShowHeadArrowOnly(boolean showHeadArrowOnly) {
253        this.showHeadArrowOnly = showHeadArrowOnly;
254    }
255
256    /**
257     * Determines if only the last arrow of a way should be displayed
258     * @return {@code true} if only the last arrow of a way should be displayed
259     */
260    public boolean isShowHeadArrowOnly() {
261        return showHeadArrowOnly;
262    }
263
264    /**
265     * Returns the distance at which names should be drawn
266     * @return the distance at which names should be drawn
267     */
268    public int getShowNamesDistance() {
269        return showNamesDistance;
270    }
271
272    /**
273     * Returns the distance at which strokes should be used
274     * @return the distance at which strokes should be used
275     */
276    public int getUseStrokesDistance() {
277        return useStrokesDistance;
278    }
279
280    /**
281     * Returns the distance at which icons should be drawn
282     * @return the distance at which icons should be drawn
283     */
284    public int getShowIconsDistance() {
285        return showIconsDistance;
286    }
287
288    /**
289     * Returns the size of selected nodes
290     * @return the size of selected nodes
291     */
292    public int getSelectedNodeSize() {
293        return selectedNodeSize;
294    }
295
296    /**
297     * Returns the size of multiply connected nodes
298     * @return the size of multiply connected nodes
299     */
300    public int getConnectionNodeSize() {
301        return connectionNodeSize;
302    }
303
304    /**
305     * Returns the size of unselected nodes
306     * @return the size of unselected nodes
307     */
308    public int getUnselectedNodeSize() {
309        return unselectedNodeSize;
310    }
311
312    /**
313     * Returns the size of tagged nodes
314     * @return the size of tagged nodes
315     */
316    public int getTaggedNodeSize() {
317        return taggedNodeSize;
318    }
319
320    /**
321     * Determines if selected nodes should be filled
322     * @return {@code true} if selected nodes should be filled
323     */
324    public boolean isFillSelectedNode() {
325        return fillSelectedNode;
326    }
327
328    /**
329     * Determines if unselected nodes should be filled
330     * @return {@code true} if unselected nodes should be filled
331     */
332    public boolean isFillUnselectedNode() {
333        return fillUnselectedNode;
334    }
335
336    /**
337     * Determines if multiply connected nodes should be filled
338     * @return {@code true} if multiply connected nodes should be filled
339     */
340    public boolean isFillConnectionNode() {
341        return fillConnectionNode;
342    }
343
344    /**
345     * Determines if tagged nodes should be filled
346     * @return {@code true} if tagged nodes should be filled
347     */
348    public boolean isFillTaggedNode() {
349        return fillTaggedNode;
350    }
351
352    /**
353     * Determines if only the data area outline should be drawn
354     * @return {@code true} if only the data area outline should be drawn
355     */
356    public boolean isOutlineOnly() {
357        return outlineOnly;
358    }
359
360    @Override
361    public String toString() {
362        // This is used for debugging exceptions.
363        return "MapPaintSettings [useRealWidth=" + useRealWidth + ", showDirectionArrow=" + showDirectionArrow
364                + ", showOnewayArrow=" + showOnewayArrow + ", defaultSegmentWidth=" + defaultSegmentWidth
365                + ", showOrderNumber=" + showOrderNumber + ", showHeadArrowOnly=" + showHeadArrowOnly
366                + ", showNamesDistance=" + showNamesDistance + ", useStrokesDistance=" + useStrokesDistance
367                + ", showIconsDistance=" + showIconsDistance + ", selectedNodeSize=" + selectedNodeSize
368                + ", connectionNodeSize=" + connectionNodeSize + ", unselectedNodeSize=" + unselectedNodeSize
369                + ", taggedNodeSize=" + taggedNodeSize + ", fillSelectedNode=" + fillSelectedNode
370                + ", fillUnselectedNode=" + fillUnselectedNode + ", fillTaggedNode=" + fillTaggedNode
371                + ", fillConnectionNode=" + fillConnectionNode + ", outlineOnly=" + outlineOnly + ", selectedColor="
372                + selectedColor + ", relationSelectedColor=" + relationSelectedColor + ", highlightColor="
373                + highlightColor + ", inactiveColor=" + inactiveColor + ", nodeColor=" + nodeColor + ", taggedColor="
374                + taggedColor + ", connectionColor=" + connectionColor + ", taggedConnectionColor="
375                + taggedConnectionColor + "]";
376    }
377
378}
Note: See TracBrowser for help on using the repository browser.