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/gui/mappaint
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 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.