Changeset 987 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2008-09-18T13:22:53+02:00 (16 years ago)
Author:
stoecker
Message:

added internal support for multiple styles

Location:
trunk/src/org/openstreetmap/josm
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java

    r976 r987  
    3131import org.openstreetmap.josm.gui.mappaint.AreaElemStyle;
    3232import org.openstreetmap.josm.gui.mappaint.ElemStyle;
     33import org.openstreetmap.josm.gui.mappaint.ElemStyles;
    3334import org.openstreetmap.josm.gui.mappaint.IconElemStyle;
    3435import org.openstreetmap.josm.gui.mappaint.LineElemStyle;
     
    4647        protected Stroke currentStroke = null;
    4748        protected static final Font orderFont = new Font("Helvetica", Font.PLAIN, 8);
     49        protected ElemStyles styles;
     50        protected double circum;
    4851
    4952        protected boolean isZoomOk(ElemStyle e) {
    5053                if (!zoomLevelDisplay) /* show everything if the user wishes so */
    5154                        return true;
    52 
    53                 double circum = Main.map.mapView.getScale()*100*Main.proj.scaleFactor()*40041455; // circumference of the earth in meter
    5455
    5556                if(e == null) /* the default for things that don't have a rule (show, if scale is smaller than 1500m) */
     
    7172         */
    7273        public void visit(Node n) {
    73                 IconElemStyle nodeStyle = MapPaintStyles.getStyles().get(n);
     74                IconElemStyle nodeStyle = styles.get(n);
    7475                if (nodeStyle != null && isZoomOk(nodeStyle))
    7576                        drawNode(n, nodeStyle.icon, nodeStyle.annotate);
    76                 else {
    77                         if (n.selected)
    78                                 drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
    79                         else if (n.tagged)
    80                                 drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
    81                         else
    82                                 drawNode(n, nodeColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
    83                 }
     77                else if (n.selected)
     78                        drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
     79                else if (n.tagged)
     80                        drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
     81                else
     82                        drawNode(n, nodeColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
    8483        }
    8584
     
    8988         */
    9089        public void visit(Way w) {
    91                 double circum = Main.map.mapView.getScale()*100*Main.proj.scaleFactor()*40041455; // circumference of the earth in meter
     90                if(w.nodes.size() < 2)
     91                        return;
    9292                // show direction arrows, if draw.segment.relevant_directions_only is not set, the way is tagged with a direction key
    9393                // (even if the tag is negated as in oneway=false) or the way is selected
     
    9696
    9797                Color color = untaggedColor;
    98                 Color areacolor = untaggedColor;
    9998                int width = defaultSegmentWidth;
    10099                int realWidth = 0; //the real width of the element in meters
    101100                boolean dashed = false;
    102                 boolean area = false;
    103                 ElemStyle wayStyle = MapPaintStyles.getStyles().get(w);
     101                ElemStyle wayStyle = styles.get(w);
    104102
    105103                if(!isZoomOk(wayStyle))
    106104                        return;
    107                 if(w.nodes.size() < 2)
    108                         return;
    109105
    110106                LineElemStyle l = null;
    111107                if(wayStyle!=null)
    112108                {
     109                        Color areacolor = untaggedColor;
     110                        boolean area = false;
    113111                        if(wayStyle instanceof LineElemStyle)
    114112                                l = (LineElemStyle)wayStyle;
     
    127125                                dashed = l.dashed;
    128126                        }
    129                 }
    130 
    131                 if (area && fillAreas)
    132                         drawWayAsArea(w, areacolor);
     127                        if (area && fillAreas)
     128                                drawWayAsArea(w, areacolor);
     129                }
     130
    133131                if (realWidth > 0 && useRealWidth && !showDirection)
    134132                {
     
    194192                        }
    195193                }
     194                displaySegments();
    196195        }
    197196
     
    317316                fillAreas = Main.pref.getBoolean("mappaint.fillareas", true);
    318317                fillAlpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.fillalpha", 50))));
    319 
    320                 Collection<Way> noAreaWays = new LinkedList<Way>();
    321 
    322                 for (final OsmPrimitive osm : data.ways)
    323                         if (!osm.incomplete && !osm.deleted && MapPaintStyles.getStyles().isArea((Way)osm))
     318                circum = Main.map.mapView.getScale()*100*Main.proj.scaleFactor()*40041455; // circumference of the earth in meter
     319                styles = MapPaintStyles.getStyles();
     320
     321                if(styles.hasAreas())
     322                {
     323                        Collection<Way> noAreaWays = new LinkedList<Way>();
     324
     325                        for (final OsmPrimitive osm : data.ways)
     326                                if (!osm.incomplete && !osm.deleted && styles.isArea((Way)osm))
     327                                        osm.visit(this);
     328                                else if (!osm.deleted && !osm.incomplete)
     329                                        noAreaWays.add((Way)osm);
     330
     331                        for (final OsmPrimitive osm : noAreaWays)
    324332                                osm.visit(this);
    325                         else if (!osm.deleted && !osm.incomplete)
    326                                 noAreaWays.add((Way)osm);
    327 
    328                 for (final OsmPrimitive osm : noAreaWays)
    329                         osm.visit(this);
     333                }
     334                else
     335                {
     336                        for (final OsmPrimitive osm : data.ways)
     337                                if (!osm.incomplete && !osm.deleted)
     338                                        osm.visit(this);
     339                }
    330340
    331341                for (final OsmPrimitive osm : data.getSelected())
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java

    r976 r987  
    7272        protected int selectedNodeSize;
    7373        protected int unselectedNodeSize;
    74         protected int defaultSegmentWidth = 2;
     74        protected int defaultSegmentWidth;
    7575        protected int virtualNodeSize;
    7676        protected int virtualNodeSpace;
  • trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java

    r885 r987  
    1414        boolean hadLine, hadLineMod, hadIcon, hadArea;
    1515        ElemStyles styles;
     16        String styleName;
    1617        RuleElem rule = new RuleElem();
    1718
     
    3839        };
    3940
    40         public ElemStyleHandler() {
     41        public ElemStyleHandler(String name) {
     42                styleName = name;
    4143                inDoc=inRule=inCondition=inElemStyle=inLine=inIcon=inArea=false;
    4244                rule.init();
     
    174176                {
    175177                        if(hadLine)
    176                                 styles.add(rule.key, rule.value, rule.boolValue,
     178                                styles.add(styleName, rule.key, rule.value, rule.boolValue,
    177179                                new LineElemStyle(rule.line, rule.scaleMax, rule.scaleMin));
    178180                        if(hadLineMod)
    179                                 styles.addModifier(rule.key, rule.value, rule.boolValue,
     181                                styles.addModifier(styleName, rule.key, rule.value, rule.boolValue,
    180182                                new LineElemStyle(rule.line, rule.scaleMax, rule.scaleMin));
    181183                        if(hadIcon)
    182                                 styles.add(rule.key, rule.value, rule.boolValue,
     184                                styles.add(styleName, rule.key, rule.value, rule.boolValue,
    183185                                new IconElemStyle(rule.icon, rule.scaleMax, rule.scaleMin));
    184186                        if(hadArea)
    185                                 styles.add(rule.key, rule.value, rule.boolValue,
     187                                styles.add(styleName, rule.key, rule.value, rule.boolValue,
    186188                                new AreaElemStyle(rule.area, rule.scaleMax, rule.scaleMin));
    187189                        inRule = false;
  • trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java

    r947 r987  
    1111import org.openstreetmap.josm.data.osm.OsmUtils;
    1212import org.openstreetmap.josm.data.osm.Way;
     13import org.openstreetmap.josm.Main;
    1314
    1415public class ElemStyles
    1516{
    16         private HashMap<String, IconElemStyle> icons;
    17         private HashMap<String, LineElemStyle> lines;
    18         private HashMap<String, AreaElemStyle> areas;
    19         private HashMap<String, LineElemStyle> modifiers;
     17        private class StyleSet {
     18                HashMap<String, IconElemStyle> icons;
     19                HashMap<String, LineElemStyle> lines;
     20                HashMap<String, AreaElemStyle> areas;
     21                HashMap<String, LineElemStyle> modifiers;
     22                public StyleSet()
     23                {
     24                        icons = new HashMap<String, IconElemStyle>();
     25                        lines = new HashMap<String, LineElemStyle>();
     26                        modifiers = new HashMap<String, LineElemStyle>();
     27                        areas = new HashMap<String, AreaElemStyle>();
     28                }
     29        }
     30        HashMap<String, StyleSet> styleSet;
    2031
    2132        public ElemStyles()
    2233        {
    23                 icons = new HashMap<String, IconElemStyle>();
    24                 lines = new HashMap<String, LineElemStyle>();
    25                 modifiers = new HashMap<String, LineElemStyle>();
    26                 areas = new HashMap<String, AreaElemStyle>();
     34                styleSet = new HashMap<String, StyleSet>();
    2735        }
    2836
     
    3745        }
    3846
    39         public void add(String k, String v, String b, LineElemStyle style)
     47        public void add(String name, String k, String v, String b, LineElemStyle style)
    4048        {
    41                 lines.put(getKey(k,v,b), style);
     49                getStyleSet(name, true).lines.put(getKey(k,v,b), style);
    4250        }
    4351
    44         public void addModifier(String k, String v, String b, LineElemStyle style)
     52        public void addModifier(String name, String k, String v, String b, LineElemStyle style)
    4553        {
    46                 modifiers.put(getKey(k,v,b), style);
     54                getStyleSet(name, true).modifiers.put(getKey(k,v,b), style);
    4755        }
    4856
    49         public void add(String k, String v, String b, AreaElemStyle style)
     57        public void add(String name, String k, String v, String b, AreaElemStyle style)
    5058        {
    51                 areas.put(getKey(k,v,b), style);
     59                getStyleSet(name, true).areas.put(getKey(k,v,b), style);
    5260        }
    5361
    54         public void add(String k, String v, String b, IconElemStyle style)
     62        public void add(String name, String k, String v, String b, IconElemStyle style)
    5563        {
    56                 icons.put(getKey(k,v,b), style);
     64                getStyleSet(name, true).icons.put(getKey(k,v,b), style);
     65        }
     66
     67        private StyleSet getStyleSet(String name, boolean create)
     68        {
     69                if(name == null)
     70                        name = Main.pref.get("mappaint.style", "standard");
     71                StyleSet s = styleSet.get(name);
     72                if(create && s == null)
     73                {
     74                        s = new StyleSet();
     75                        styleSet.put(name, s);
     76                }
     77                return s;
    5778        }
    5879
    5980        public IconElemStyle get(Node n)
    6081        {
     82                StyleSet ss = getStyleSet(null, false);
    6183                IconElemStyle ret = null;
    62                 if(n.keys != null)
     84                if(ss != null && n.keys != null)
    6385                {
    6486                        Iterator<String> iterator = n.keys.keySet().iterator();
     
    6890                                String val = n.keys.get(key);
    6991                                IconElemStyle style;
    70                                 if((style = icons.get("n" + key + "=" + val)) != null)
     92                                if((style = ss.icons.get("n" + key + "=" + val)) != null)
    7193                                {
    7294                                        if(ret == null || style.priority > ret.priority)
    7395                                                ret = style;
    7496                                }
    75                                 if((style = icons.get("b" + key + "=" + OsmUtils.getNamedOsmBoolean(val))) != null)
     97                                if((style = ss.icons.get("b" + key + "=" + OsmUtils.getNamedOsmBoolean(val))) != null)
    7698                                {
    7799                                        if(ret == null || style.priority > ret.priority)
    78100                                                ret = style;
    79101                                }
    80                                 if((style = icons.get("x" + key)) != null)
     102                                if((style = ss.icons.get("x" + key)) != null)
    81103                                {
    82104                                        if(ret == null || style.priority > ret.priority)
     
    90112        public ElemStyle get(Way w)
    91113        {
     114                StyleSet ss = getStyleSet(null, false);
     115                if(ss == null || w.keys == null)
     116                        return null;
    92117                AreaElemStyle retArea = null;
    93118                LineElemStyle retLine = null;
    94119                List<LineElemStyle> over = new LinkedList<LineElemStyle>();
    95                 if(w.keys != null)
     120                Iterator<String> iterator = w.keys.keySet().iterator();
     121                while(iterator.hasNext())
    96122                {
    97                         Iterator<String> iterator = w.keys.keySet().iterator();
    98                         while(iterator.hasNext())
    99                         {
    100                                 String key = iterator.next();
    101                                 String val = w.keys.get(key);
    102                                 AreaElemStyle styleArea;
    103                                 LineElemStyle styleLine;
    104                                 String idx = "n" + key + "=" + val;
    105                                 if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
    106                                         retArea = styleArea;
    107                                 if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
    108                                         retLine = styleLine;
    109                                 if((styleLine = modifiers.get(idx)) != null)
    110                                         over.add(styleLine);
    111                                 idx = "b" + key + "=" + OsmUtils.getNamedOsmBoolean(val);
    112                                 if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
    113                                         retArea = styleArea;
    114                                 if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
    115                                         retLine = styleLine;
    116                                 if((styleLine = modifiers.get(idx)) != null)
    117                                         over.add(styleLine);
    118                                 idx = "x" + key;
    119                                 if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
    120                                         retArea = styleArea;
    121                                 if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
    122                                         retLine = styleLine;
    123                                 if((styleLine = modifiers.get(idx)) != null)
    124                                         over.add(styleLine);
    125                         }
     123                        String key = iterator.next();
     124                        String val = w.keys.get(key);
     125                        AreaElemStyle styleArea;
     126                        LineElemStyle styleLine;
     127                        String idx = "n" + key + "=" + val;
     128                        if((styleArea = ss.areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
     129                                retArea = styleArea;
     130                        if((styleLine = ss.lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
     131                                retLine = styleLine;
     132                        if((styleLine = ss.modifiers.get(idx)) != null)
     133                                over.add(styleLine);
     134                        idx = "b" + key + "=" + OsmUtils.getNamedOsmBoolean(val);
     135                        if((styleArea = ss.areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
     136                                retArea = styleArea;
     137                        if((styleLine = ss.lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
     138                                retLine = styleLine;
     139                        if((styleLine = ss.modifiers.get(idx)) != null)
     140                                over.add(styleLine);
     141                        idx = "x" + key;
     142                        if((styleArea = ss.areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
     143                                retArea = styleArea;
     144                        if((styleLine = ss.lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
     145                                retLine = styleLine;
     146                        if((styleLine = ss.modifiers.get(idx)) != null)
     147                                over.add(styleLine);
    126148                }
    127149                if(over.size() != 0 && retLine != null)
     
    142164        public boolean isArea(Way w)
    143165        {
    144                 if(w.keys != null)
     166                StyleSet ss = getStyleSet(null, false);
     167                if(ss != null && w.keys != null)
    145168                {
    146169                        Iterator<String> iterator = w.keys.keySet().iterator();
     
    149172                                String key = iterator.next();
    150173                                String val = w.keys.get(key);
    151                                 if(areas.containsKey("n" + key + "=" + val)
    152                                 || areas.containsKey("n" + key + "=" + OsmUtils.getNamedOsmBoolean(val))
    153                                 || areas.containsKey("x" + key))
     174                                if(ss.areas.containsKey("n" + key + "=" + val)
     175                                || ss.areas.containsKey("n" + key + "=" + OsmUtils.getNamedOsmBoolean(val))
     176                                || ss.areas.containsKey("x" + key))
    154177                                        return true;
    155178                        }
     
    157180                return false;
    158181        }
     182        public boolean hasAreas()
     183        {
     184                StyleSet ss = getStyleSet(null, false);
     185                return ss != null && ss.areas.size() > 0;
     186        }
    159187}
  • trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java

    r935 r987  
    8080//                              System.out.println("mappaint: Using style file: \"" + f + "\"");
    8181                                XMLReader xmlReader = XMLReaderFactory.createXMLReader();
    82                                 ElemStyleHandler handler = new ElemStyleHandler();
     82                                ElemStyleHandler handler = new ElemStyleHandler(styleName);
    8383                                xmlReader.setContentHandler(handler);
    8484                                xmlReader.setErrorHandler(handler);
     
    101101                                {
    102102                                        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
    103                                         ElemStyleHandler handler = new ElemStyleHandler();
     103                                        ElemStyleHandler handler = new ElemStyleHandler(internalStyleName);
    104104                                        xmlReader.setContentHandler(handler);
    105105                                        xmlReader.setErrorHandler(handler);
Note: See TracChangeset for help on using the changeset viewer.