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 }