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 }