Changeset 4713 in josm


Ignore:
Timestamp:
2011-12-26T21:48:25+01:00 (9 years ago)
Author:
simon04
Message:

see #7182 - Individual Icons for Imagery Background

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/data/maps.xsd

    r4493 r4713  
    624624                                                <!-- The ISO 3166 country code -->
    625625                                                <xs:element name="country-code" minOccurs="0" maxOccurs="1" type="tns:iso3166" />
     626                                                <!-- A base64-encoded image that is displayed as menu/toolbar icon -->
     627                                                <xs:element name="icon" minOccurs="0" maxOccurs="1" type="xs:string" />
    626628                                        </xs:all>
    627629                                </xs:complexType>
  • trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java

    r4531 r4713  
    55
    66import java.awt.event.ActionEvent;
    7 
     7import javax.swing.Action;
     8import javax.swing.ImageIcon;
    89import javax.swing.JOptionPane;
    9 
    1010import org.openstreetmap.josm.Main;
    1111import org.openstreetmap.josm.data.imagery.ImageryInfo;
    1212import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    1313import org.openstreetmap.josm.gui.layer.ImageryLayer;
     14import org.openstreetmap.josm.tools.ImageRequest;
    1415
    1516public class AddImageryLayerAction extends JosmAction implements AdaptableAction {
    1617
     18    private static final int MAX_ICON_SIZE = 24;
    1719    private final ImageryInfo info;
    1820
     
    2224        this.info = info;
    2325        installAdapters();
     26
     27        // change toolbar icon from if specified
     28        try {
     29            if (info.getIcon() != null) {
     30                ImageIcon i = new ImageRequest().setName(info.getIcon()).setMaxHeight(MAX_ICON_SIZE).setMaxWidth(MAX_ICON_SIZE).get();
     31                putValue(Action.SMALL_ICON, i);
     32            }
     33        } catch (Exception ex) {
     34            throw new RuntimeException(ex.getMessage(), ex);
     35        }
    2436    }
    2537
  • trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java

    r4506 r4713  
    8585    private String termsOfUseURL;
    8686    private String countryCode = "";
     87    private String icon;
    8788
    8889    /** auxiliary class to save an ImageryInfo object in the preferences */
     
    106107        @pref String shapes;
    107108        @pref String projections;
     109        @pref String icon;
    108110
    109111        public ImageryPreferenceEntry() {
     
    126128            min_zoom = i.defaultMinZoom;
    127129            cookies = i.cookies;
     130            icon = i.icon;
    128131            if (i.bounds != null) {
    129132                bounds = i.bounds.encodeAsString(",");
     
    219222        termsOfUseURL = e.terms_of_use_url;
    220223        countryCode = e.country_code;
     224        icon = e.icon;
    221225    }
    222226
     
    285289        this.termsOfUseURL = i.termsOfUseURL;
    286290        this.serverProjections = i.serverProjections;
     291        this.icon = i.icon;
    287292    }
    288293
     
    515520    }
    516521
     522    public String getIcon() {
     523        return icon;
     524    }
     525
     526    public void setIcon(String icon) {
     527        this.icon = icon;
     528    }
     529
    517530    /**
    518531     * Get the projections supported by the server. Only relevant for
  • trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java

    r4492 r4713  
    55import static org.openstreetmap.josm.tools.Utils.equal;
    66
    7 import java.io.BufferedReader;
    87import java.io.IOException;
    98import java.io.InputStream;
    10 import java.io.InputStreamReader;
    11 import java.io.UnsupportedEncodingException;
    129import java.util.ArrayList;
    1310import java.util.Arrays;
     
    1815import javax.xml.parsers.SAXParserFactory;
    1916
    20 import org.openstreetmap.josm.Main;
    2117import org.openstreetmap.josm.data.imagery.ImageryInfo;
    2218import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryBounds;
     
    2521import org.openstreetmap.josm.io.MirroredInputStream;
    2622import org.openstreetmap.josm.io.UTFInputStreamReader;
    27 import org.openstreetmap.josm.tools.Utils;
    2823import org.xml.sax.Attributes;
    2924import org.xml.sax.InputSource;
     
    130125                        "terms-of-use-url",
    131126                        "country-code",
     127                        "icon",
    132128                    }).contains(qName)) {
    133129                        newState = State.ENTRY_ATTRIBUTE;
     
    260256                    } else if (qName.equals("country-code")) {
    261257                        entry.setCountryCode(accumulator.toString());
     258                    } else if (qName.equals("icon")) {
     259                        entry.setIcon(accumulator.toString());
    262260                    } else {
    263261                    }
  • trunk/src/org/openstreetmap/josm/tools/ImageProvider.java

    r4712 r4713  
    2121import java.io.IOException;
    2222import java.io.InputStream;
     23import java.io.StringReader;
     24import java.io.UnsupportedEncodingException;
    2325import java.net.MalformedURLException;
    2426import java.net.URI;
    2527import java.net.URL;
     28import java.net.URLDecoder;
    2629import java.util.Arrays;
    2730import java.util.Collection;
    2831import java.util.HashMap;
    2932import java.util.Map;
     33import java.util.regex.Matcher;
     34import java.util.regex.Pattern;
    3035import java.util.zip.ZipEntry;
    3136import java.util.zip.ZipFile;
    3237import javax.swing.Icon;
    3338import javax.swing.ImageIcon;
    34 
     39import org.apache.commons.codec.binary.Base64;
    3540import org.openstreetmap.josm.Main;
    3641import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    3742import org.openstreetmap.josm.io.MirroredInputStream;
    3843import org.openstreetmap.josm.plugins.PluginHandler;
    39 import org.openstreetmap.josm.tools.Utils;
    4044import org.xml.sax.Attributes;
    4145import org.xml.sax.EntityResolver;
     
    4549import org.xml.sax.helpers.DefaultHandler;
    4650import org.xml.sax.helpers.XMLReaderFactory;
    47 
    4851import com.kitfox.svg.SVGDiagram;
    4952import com.kitfox.svg.SVGException;
     
    167170    }
    168171
     172    /**
     173     * {@code data:[<mediatype>][;base64],<data>}
     174     * @see RFC2397
     175     */
     176    private static final Pattern dataUrlPattern = Pattern.compile(
     177            "^data:([a-zA-Z]+/[a-zA-Z+]+)?(;base64)?,(.+)$");
     178
    169179    static ImageResource getIfAvailableImpl(Collection<String> dirs, String id, String subdir, String name, File archive) {
    170180        if (name == null)
    171181            return null;
     182
     183        try {
     184            if (name.startsWith("data:")) {
     185                Matcher m = dataUrlPattern.matcher(name);
     186                if (m.matches()) {
     187                    String mediatype = m.group(1);
     188                    String base64 = m.group(2);
     189                    String data = m.group(3);
     190                    byte[] bytes = ";base64".equals(base64)
     191                            ? Base64.decodeBase64(data)
     192                            : URLDecoder.decode(data, "utf-8").getBytes();
     193                    if (mediatype != null && mediatype.contains("image/svg+xml")) {
     194                        URI uri = getSvgUniverse().loadSVG(new StringReader(new String(bytes)), name);
     195                        SVGDiagram svg = getSvgUniverse().getDiagram(uri);
     196                        return new ImageResource(svg);
     197                    } else {
     198                        return new ImageResource(new ImageIcon(bytes).getImage(), true);
     199                    }
     200                }
     201            }
     202        } catch (UnsupportedEncodingException ex) {
     203            throw new RuntimeException(ex.getMessage(), ex);
     204        } catch (IOException ex) {
     205            throw new RuntimeException(ex.getMessage(), ex);
     206        }
     207
    172208        ImageType type = name.toLowerCase().endsWith(".svg") ? ImageType.SVG : ImageType.OTHER;
    173209
Note: See TracChangeset for help on using the changeset viewer.