Changeset 3843 in josm


Ignore:
Timestamp:
Feb 1, 2011 10:15:06 PM (2 years ago)
Author:
bastiK
Message:

first version of mapstyle dialog; still hidden because its unfinished (set mappaintdialog.show=true in advanced pref to show it). switching styles on/off and reload from file is supported at the moment.

Location:
trunk
Files:
4 added
6 edited

Legend:

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

    r3836 r3843  
    300300     *--------*/ 
    301301    public StyleCache mappaintStyle = null; 
     302    public int mappaintCacheIdx; 
    302303 
    303304    /* This should not be called from outside. Fixing the UI to add relevant 
  • trunk/src/org/openstreetmap/josm/gui/MapFrame.java

    r3669 r3843  
    5151import org.openstreetmap.josm.gui.dialogs.HistoryDialog; 
    5252import org.openstreetmap.josm.gui.dialogs.LayerListDialog; 
     53import org.openstreetmap.josm.gui.dialogs.MapPaintDialog; 
    5354import org.openstreetmap.josm.gui.dialogs.RelationListDialog; 
    5455import org.openstreetmap.josm.gui.dialogs.SelectionListDialog; 
     
    185186        addToggleDialog(filterDialog = new FilterDialog()); 
    186187        addToggleDialog(new ChangesetDialog(this)); 
     188        if (Main.pref.getBoolean("mappaintdialog.show", false)) { 
     189            addToggleDialog(new MapPaintDialog()); 
     190        } 
    187191 
    188192        // status line below the map 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java

    r3836 r3843  
    1919import org.openstreetmap.josm.gui.NavigatableComponent; 
    2020import org.openstreetmap.josm.gui.mappaint.StyleCache.StyleList; 
    21 import org.openstreetmap.josm.gui.mappaint.xml.XmlStyleSource; 
    2221import org.openstreetmap.josm.tools.FilteredCollection; 
    2322import org.openstreetmap.josm.tools.Pair; 
     
    2625 
    2726public class ElemStyles { 
    28     private List<XmlStyleSource> styleSources; 
     27    private List<StyleSource> styleSources; 
    2928    private boolean drawMultipolygon; 
     29 
     30    public static int cacheIdx; 
    3031 
    3132    public ElemStyles() 
    3233    { 
    33         styleSources = new ArrayList<XmlStyleSource>(); 
    34     } 
    35  
    36     public void add(XmlStyleSource style) { 
     34        styleSources = new ArrayList<StyleSource>(); 
     35    } 
     36 
     37    public void add(StyleSource style) { 
    3738        styleSources.add(style); 
    3839    } 
    3940 
    40     public Collection<XmlStyleSource> getStyleSources() { 
    41         return new FilteredCollection<XmlStyleSource>(styleSources, new Predicate<XmlStyleSource>() { 
     41    public Collection<StyleSource> getStyleSources() { 
     42        return new FilteredCollection<StyleSource>(styleSources, new Predicate<StyleSource>() { 
    4243 
    4344            String name = Main.pref.get("mappaint.style", "standard"); 
    4445 
    4546            @Override 
    46             public boolean evaluate(XmlStyleSource s) { 
     47            public boolean evaluate(StyleSource s) { 
    4748                return Utils.equal(s.getPrefName(), name); 
    4849            } 
     
    5455        Set<String> names = new HashSet<String>(); 
    5556        names.add("standard"); 
    56         for (XmlStyleSource s : styleSources) { 
     57        for (StyleSource s : styleSources) { 
    5758            if (s.name != null) { 
    5859                names.add(s.name); 
     
    6768 
    6869    public Pair<StyleList, Range> getStyleCacheWithRange(OsmPrimitive osm, double scale, NavigatableComponent nc) { 
    69         if (osm.mappaintStyle == null) { 
     70        if (osm.mappaintStyle == null || osm.mappaintCacheIdx != cacheIdx) { 
    7071            osm.mappaintStyle = StyleCache.EMPTY_STYLECACHE; 
    7172        } else { 
     
    8384        } 
    8485        osm.mappaintStyle = osm.mappaintStyle.put(p.a, p.b); 
     86        osm.mappaintCacheIdx = cacheIdx; 
    8587        return p; 
    8688    } 
     
    9092        { 
    9193            return generateStyles(osm, scale, null, false); 
    92         }  
     94        } 
    9395        else if (osm instanceof Way) 
    9496        { 
     
    178180            } 
    179181            return p; 
    180         }  
     182        } 
    181183        else if (osm instanceof Relation) 
    182184        { 
     
    216218        MultiCascade mc = new MultiCascade(); 
    217219 
    218         for (XmlStyleSource s : styleSources) { 
    219             s.apply(mc, osm, scale, multipolyOuterWay, pretendWayIsClosed); 
     220        for (StyleSource s : styleSources) { 
     221            if (s.active) { 
     222                s.apply(mc, osm, scale, multipolyOuterWay, pretendWayIsClosed); 
     223            } 
    220224        } 
    221225 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java

    r3827 r3843  
    22package org.openstreetmap.josm.gui.mappaint; 
    33 
    4 import org.openstreetmap.josm.gui.mappaint.xml.XmlStyleSource; 
    5 import org.openstreetmap.josm.gui.mappaint.xml.XmlStyleSourceHandler; 
    64import static org.openstreetmap.josm.tools.I18n.tr; 
    75 
    8 import java.io.File; 
    96import java.io.IOException; 
    107import java.io.InputStream; 
    11 import java.io.InputStreamReader; 
    128import java.util.Collection; 
    139import java.util.Collections; 
     
    1814 
    1915import org.openstreetmap.josm.Main; 
     16import org.openstreetmap.josm.gui.mappaint.xml.XmlStyleSource; 
    2017import org.openstreetmap.josm.gui.preferences.SourceEntry; 
    2118import org.openstreetmap.josm.gui.preferences.MapPaintPreference.MapPaintPrefMigration; 
    2219import org.openstreetmap.josm.io.MirroredInputStream; 
    2320import org.openstreetmap.josm.tools.ImageProvider; 
    24 import org.openstreetmap.josm.tools.XmlObjectParser; 
    25 import org.openstreetmap.josm.tools.Utils; 
    26 import org.xml.sax.SAXException; 
    27 import org.xml.sax.SAXParseException; 
    2821 
    2922public class MapPaintStyles { 
     
    9083 
    9184        for (SourceEntry entry : sourceEntries) { 
    92             XmlStyleSource style = new XmlStyleSource(entry); 
     85            StyleSource style = new XmlStyleSource(entry); 
    9386            try { 
    94                 XmlObjectParser parser = new XmlObjectParser(new XmlStyleSourceHandler(style)); 
    9587                MirroredInputStream in = new MirroredInputStream(entry.url); 
    9688                InputStream zip = in.getZipEntry("xml","style"); 
    97                 InputStreamReader ins; 
    98                 if(zip != null) 
    99                 { 
     89                if (zip != null) { 
    10090                    style.zipIcons = in.getFile(); 
    101                     ins = new InputStreamReader(zip); 
    102                 } else { 
    103                     ins = new InputStreamReader(in); 
    104                 } 
    105                 parser.startWithValidation(ins, "http://josm.openstreetmap.de/mappaint-style-1.0", 
    106                 "resource://data/mappaint-style.xsd"); 
    107                 while(parser.hasNext()) { 
    108                 } 
     91                }  
    10992            } catch(IOException e) { 
    11093                System.err.println(tr("Warning: failed to load Mappaint styles from ''{0}''. Exception was: {1}", entry.url, e.toString())); 
    111                 e.printStackTrace(); 
    112                 style.hasError = true; 
    113             } catch(SAXParseException e) { 
    114                 System.err.println(tr("Warning: failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}", entry.url, e.getLineNumber(), e.getColumnNumber(), e.getMessage())); 
    115                 e.printStackTrace(); 
    116                 style.hasError = true; 
    117             } catch(SAXException e) { 
    118                 System.err.println(tr("Warning: failed to parse Mappaint styles from ''{0}''. Error was: {1}", entry.url, e.getMessage())); 
    11994                e.printStackTrace(); 
    12095                style.hasError = true; 
     
    12297            styles.add(style); 
    12398        } 
     99        for (StyleSource s : styles.getStyleSources()) { 
     100            s.loadStyleSource(); 
     101        } 
    124102    } 
    125103} 
  • trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java

    r3836 r3843  
    22package org.openstreetmap.josm.gui.mappaint.xml; 
    33 
    4 import java.io.File; 
     4import static org.openstreetmap.josm.tools.I18n.tr; 
     5 
     6import java.io.InputStream; 
     7import java.io.InputStreamReader; 
     8import java.io.IOException; 
    59import java.util.Collection; 
    610import java.util.Collections; 
    711import java.util.HashMap; 
    8 import java.util.Iterator; 
    912import java.util.LinkedList; 
    1013import java.util.List; 
     
    1922import org.openstreetmap.josm.gui.mappaint.MultiCascade; 
    2023import org.openstreetmap.josm.gui.mappaint.Range; 
     24import org.openstreetmap.josm.gui.mappaint.StyleSource; 
    2125import org.openstreetmap.josm.gui.preferences.SourceEntry; 
     26import org.openstreetmap.josm.io.MirroredInputStream; 
    2227import org.openstreetmap.josm.tools.Utils; 
    23  
    24 public class XmlStyleSource extends SourceEntry { 
     28import org.openstreetmap.josm.tools.XmlObjectParser; 
     29import org.xml.sax.SAXException; 
     30import org.xml.sax.SAXParseException; 
     31 
     32public class XmlStyleSource extends StyleSource { 
    2533 
    2634    public final HashMap<String, IconPrototype> icons = new HashMap<String, IconPrototype>(); 
     
    3341    public final LinkedList<AreaPrototype> areasList = new LinkedList<AreaPrototype>(); 
    3442 
    35     public boolean hasError = false; 
    36     public File zipIcons; 
    37  
    3843    public XmlStyleSource(String url, String name, String shortdescription) { 
    39         super(url, name, shortdescription, true); 
     44        super(url, name, shortdescription); 
    4045    } 
    4146 
    4247    public XmlStyleSource(SourceEntry entry) { 
    43         super(entry.url, entry.name, entry.shortdescription, entry.active); 
     48        super(entry); 
     49    } 
     50 
     51    @Override 
     52    public void loadStyleSource() { 
     53        try { 
     54            MirroredInputStream in = new MirroredInputStream(url); 
     55            InputStream zip = in.getZipEntry("xml", "style"); 
     56            InputStreamReader reader = null; 
     57            if (zip != null) { 
     58                reader = new InputStreamReader(zip); 
     59            } else { 
     60                reader = new InputStreamReader(in); 
     61            } 
     62 
     63            XmlObjectParser parser = new XmlObjectParser(new XmlStyleSourceHandler(this)); 
     64            parser.startWithValidation(reader, 
     65                    "http://josm.openstreetmap.de/mappaint-style-1.0", 
     66                    "resource://data/mappaint-style.xsd"); 
     67            while(parser.hasNext()) { 
     68            } 
     69             
     70        } catch(IOException e) { 
     71            System.err.println(tr("Warning: failed to load Mappaint styles from ''{0}''. Exception was: {1}", url, e.toString())); 
     72            e.printStackTrace(); 
     73            hasError = true; 
     74        } catch(SAXParseException e) { 
     75            System.err.println(tr("Warning: failed to parse Mappaint styles from ''{0}''. Error was: [{1}:{2}] {3}", url, e.getLineNumber(), e.getColumnNumber(), e.getMessage())); 
     76            e.printStackTrace(); 
     77            hasError = true; 
     78        } catch(SAXException e) { 
     79            System.err.println(tr("Warning: failed to parse Mappaint styles from ''{0}''. Error was: {1}", url, e.getMessage())); 
     80            e.printStackTrace(); 
     81            hasError = true; 
     82        } 
    4483    } 
    4584 
     
    220259     } 
    221260 
     261    @Override 
    222262    public void apply(MultiCascade mc, OsmPrimitive osm, double scale, OsmPrimitive multipolyOuterWay, boolean pretendWayIsClosed) { 
    223263        Cascade def = mc.getCascade("default"); 
  • trunk/src/org/openstreetmap/josm/gui/preferences/SourceEntry.java

    r3827 r3843  
    104104        return name == null ? "standard" : name; 
    105105    } 
     106 
     107    public boolean isLocal() { 
     108        if (url.startsWith("http://") || url.startsWith("resource://")) 
     109            return false; 
     110        return true; 
     111    } 
    106112} 
Note: See TracChangeset for help on using the changeset viewer.