001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm.visitor.paint;
003
004import java.awt.Color;
005
006import org.openstreetmap.josm.Main;
007import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
008import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
009
010public final 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    @Override
106    public void preferenceChanged(PreferenceChangeEvent e) {
107        load();
108    }
109
110    public boolean isUseRealWidth() {
111        return useRealWidth;
112    }
113
114    public boolean isShowDirectionArrow() {
115        return showDirectionArrow;
116    }
117
118    public boolean isShowOnewayArrow() {
119        return showOnewayArrow;
120    }
121
122    public Color getSelectedColor() {
123        return selectedColor;
124    }
125
126    public int getDefaultSegmentWidth() {
127        return defaultSegmentWidth;
128    }
129
130    public Color getSelectedColor(int alpha) {
131        return new Color(selectedColor.getRGB() & 0x00ffffff | (alpha << 24), true);
132    }
133
134    public Color getRelationSelectedColor() {
135        return relationSelectedColor;
136    }
137
138    public Color getRelationSelectedColor(int alpha) {
139        return new Color(relationSelectedColor.getRGB() & 0x00ffffff | (alpha << 24), true);
140    }
141
142    public Color getHighlightColor() {
143        return highlightColor;
144    }
145
146    public Color getInactiveColor() {
147        return inactiveColor;
148    }
149
150    public Color getNodeColor() {
151        return nodeColor;
152    }
153
154    public Color getTaggedColor() {
155        return taggedColor;
156    }
157
158    public Color getConnectionColor() {
159        return connectionColor;
160    }
161
162    public Color getTaggedConnectionColor() {
163        return taggedConnectionColor;
164    }
165
166    public boolean isShowOrderNumber() {
167        return showOrderNumber;
168    }
169
170    public void setShowHeadArrowOnly(boolean showHeadArrowOnly) {
171        this.showHeadArrowOnly = showHeadArrowOnly;
172    }
173
174    public boolean isShowHeadArrowOnly() {
175        return showHeadArrowOnly;
176    }
177
178    public int getShowNamesDistance() {
179        return showNamesDistance;
180    }
181
182    public int getUseStrokesDistance() {
183        return useStrokesDistance;
184    }
185
186    public int getShowIconsDistance() {
187        return showIconsDistance;
188    }
189
190    public int getSelectedNodeSize() {
191        return selectedNodeSize;
192    }
193
194    public int getConnectionNodeSize() {
195        return connectionNodeSize;
196    }
197
198    public int getUnselectedNodeSize() {
199        return unselectedNodeSize;
200    }
201
202    public int getTaggedNodeSize() {
203        return taggedNodeSize;
204    }
205
206    public boolean isFillSelectedNode() {
207        return fillSelectedNode;
208    }
209
210    public boolean isFillUnselectedNode() {
211        return fillUnselectedNode;
212    }
213
214    public boolean isFillConnectionNode() {
215        return fillConnectionNode;
216    }
217
218    public boolean isFillTaggedNode() {
219        return fillTaggedNode;
220    }
221
222    public boolean isOutlineOnly() {
223        return outlineOnly;
224    }
225}