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}