Changeset 18355 in osm


Ignore:
Timestamp:
2009-10-29T00:00:08+01:00 (15 years ago)
Author:
dhansen
Message:

Fix some auto-download bugs.

Re-add the feature to allow custom map sources. You must edit
your preferences file manually for now, but this should be
a power users thing only anyway

Location:
applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap/SlippyMapLayer.java

    r18354 r18355  
    6363
    6464    protected MemoryTileCache tileCache;
    65     protected TileSource tileSource = new OsmTileSource.Mapnik();
     65    protected TileSource tileSource;
    6666    protected TileLoader tileLoader;
    6767    JobDispatcher jobDispatcher = JobDispatcher.getInstance();
     
    8181        return tileCache;
    8282    }
    83     void clearTileStorage()
    84     {
    85         out("clearing tile storage");
     83    void clearTileCache()
     84    {
     85        if (debug)
     86            out("clearing tile storage");
    8687        tileCache = new MemoryTileCache();
    8788        tileCache.setCacheSize(2000);
     
    109110    }
    110111
     112    void newTileStorage()
     113    {
     114        int origZoom = currentZoomLevel;
     115        tileSource = SlippyMapPreferences.getMapSource();
     116        // The minimum should also take care of integer parsing
     117        // errors which would leave us with a zoom of -1 otherwise
     118        if (tileSource.getMaxZoom() < currentZoomLevel)
     119            currentZoomLevel = tileSource.getMaxZoom();
     120        if (tileSource.getMinZoom() > currentZoomLevel)
     121            currentZoomLevel = tileSource.getMinZoom();
     122        if (currentZoomLevel != origZoom) {
     123            out("changed currentZoomLevel loading new tile store from " + origZoom + " to " + currentZoomLevel);
     124            out("tileSource.getMinZoom(): " + tileSource.getMinZoom());
     125            out("tileSource.getMaxZoom(): " + tileSource.getMaxZoom());
     126            SlippyMapPreferences.setLastZoom(currentZoomLevel);
     127        }
     128        clearTileCache();
     129        //tileLoader = new OsmTileLoader(this);
     130        tileLoader = new OsmFileCacheTileLoader(this);
     131    }
     132
    111133    @SuppressWarnings("serial")
    112134    public SlippyMapLayer() {
     
    117139
    118140        currentZoomLevel = SlippyMapPreferences.getLastZoom();
    119         if (currentZoomLevel <= 0)
    120             currentZoomLevel = SlippyMapPreferences.getMinZoomLvl();
    121         clearTileStorage();
    122         //tileLoader = new OsmTileLoader(this);
    123         tileLoader = new OsmFileCacheTileLoader(this);
     141        newTileStorage();
    124142
    125143        tileOptionMenu = new JPopupMenu();
     
    168186                tr("Load All Tiles")) {
    169187            public void actionPerformed(ActionEvent ae) {
    170                 loadAllTiles();
     188                loadAllTiles(true);
    171189                redraw();
    172190            }
     
    191209
    192210        tileOptionMenu.add(new JMenuItem(
     211                new AbstractAction(tr("Snap to tile size")) {
     212                    public void actionPerformed(ActionEvent ae) {
     213                        double new_factor = Math.sqrt(lastImageScale);
     214                        if (debug)
     215                            out("tile snap: scale was: " + lastImageScale + ", new factor: " + new_factor);
     216                        Main.map.mapView.zoomToFactor(new_factor);
     217                        redraw();
     218                    }
     219                }));
     220        // end of adding menu commands
     221
     222        tileOptionMenu.add(new JMenuItem(
    193223                new AbstractAction(tr("Flush Tile Cache")) {
    194224                    public void actionPerformed(ActionEvent ae) {
    195225                        System.out.print("flushing all tiles...");
    196                         clearTileStorage();
     226                        clearTileCache();
    197227                        System.out.println("done");
    198228                    }
     
    238268        SlippyMapPreferences.setLastZoom(currentZoomLevel);
    239269    }
     270
     271    int getMaxZoomLvl()
     272    {
     273        int ret = SlippyMapPreferences.getMaxZoomLvl();
     274        if (tileSource.getMaxZoom() < ret)
     275            ret = tileSource.getMaxZoom();
     276        return ret;
     277    }
     278
     279    int getMinZoomLvl()
     280    {
     281        int ret = SlippyMapPreferences.getMinZoomLvl();
     282        if (tileSource.getMinZoom() > ret)
     283            ret = tileSource.getMinZoom();
     284        return ret;
     285    }
     286
    240287    /**
    241288     * Zoom in, go closer to map.
     
    245292    public boolean zoomIncreaseAllowed()
    246293    {
    247         boolean zia = currentZoomLevel < SlippyMapPreferences.getMaxZoomLvl();
     294        boolean zia = currentZoomLevel < this.getMaxZoomLvl();
    248295        if (debug)
    249             out("zoomIncreaseAllowed(): " + zia + " " + currentZoomLevel + " vs. " + SlippyMapPreferences.getMaxZoomLvl() );
     296            out("zoomIncreaseAllowed(): " + zia + " " + currentZoomLevel + " vs. " + this.getMaxZoomLvl() );
    250297        return zia;
    251298    }
     
    260307        } else {
    261308            System.err.println("current zoom lvl ("+currentZoomLevel+") couldnt be increased. "+
    262                              "MaxZoomLvl ("+SlippyMapPreferences.getMaxZoomLvl()+") reached.");
     309                             "MaxZoomLvl ("+this.getMaxZoomLvl()+") reached.");
    263310            return false;
    264311        }
     
    273320    public boolean zoomDecreaseAllowed()
    274321    {
    275         return currentZoomLevel > SlippyMapPreferences.getMinZoomLvl();
     322        return currentZoomLevel > this.getMinZoomLvl();
    276323    }
    277324    public boolean decreaseZoomLevel() {
    278         int minZoom = SlippyMapPreferences.getMinZoomLvl();
     325        int minZoom = this.getMinZoomLvl();
    279326        lastImageScale = null;
    280327        if (zoomDecreaseAllowed()) {
     
    315362    {
    316363        if (tile == null)
     364            return false;
     365        if (tile.hasError())
    317366            return false;
    318367        if (tile.isLoaded())
     
    328377    }
    329378
    330     void loadAllTiles() {
     379    void loadAllTiles(boolean force) {
    331380        MapView mv = Main.map.mapView;
    332381        LatLon topLeft = mv.getLatLon(0, 0);
     
    341390            return;
    342391        }
    343         ts.loadAllTiles();
     392        ts.loadAllTiles(force);
    344393    }
    345394
     
    422471        LatLon topLeft  = tileLatLon(topLeftTile);
    423472        LatLon botRight = tileLatLon(botRightTile);
     473
     474        if (!autoZoomEnabled())
     475            return 0;
     476        if (!SlippyMapPreferences.getAutoloadTiles())
     477            return 0;
    424478
    425479        /*
     
    437491        for (int zoomOff : otherZooms) {
    438492            int zoom = currentZoomLevel + zoomOff;
    439             if ((zoom < SlippyMapPreferences.getMinZoomLvl()) ||
    440                 (zoom > SlippyMapPreferences.getMaxZoomLvl())) {
     493            if ((zoom < this.getMinZoomLvl()) ||
     494                (zoom > this.getMaxZoomLvl())) {
    441495                continue;
    442496            }
     
    612666            return ret;
    613667        }
    614         void loadAllTiles()
     668        void loadAllTiles(boolean force)
    615669        {
    616670            List<Tile> tiles = this.allTiles(true);
     671            boolean autoload = SlippyMapPreferences.getAutoloadTiles();
     672            if (!autoload && !force)
     673               return;
    617674            int nr_queued = 0;
    618675            for (Tile t : tiles) {
     
    697754            return;
    698755
    699         ts.loadAllTiles();
     756        ts.loadAllTiles(false);
    700757
    701758        int fontHeight = g.getFontMetrics().getHeight();
     
    736793                        out("autozoom increase: scale: " + lastImageScale);
    737794                    increaseZoomLevel();
     795                    this.paint(oldg, mv);
    738796                }
    739                 this.paint(oldg, mv);
    740797            // If each source image pixel is being squished into > 0.32
    741798            // of a drawn pixels, zoom out.
     
    745802                        out("autozoom decrease: scale: " + lastImageScale);
    746803                    decreaseZoomLevel();
     804                    this.paint(oldg, mv);
    747805                }
    748                 this.paint(oldg, mv);
    749806            }
    750807        }
     
    767824        TileSet ts = new TileSet(topLeft, botRight, z);
    768825
    769         ts.loadAllTiles(); // make sure there are tile objects for all tiles
     826        ts.loadAllTiles(false); // make sure there are tile objects for all tiles
    770827        Tile clickedTile = null;
    771828        Point p1 = null, p2 = null;
     
    866923                autoZoomPopup.setSelected(SlippyMapPreferences.getAutozoom());
    867924            }
     925            if (key.equals(SlippyMapPreferences.PREFERENCE_TILE_SOURCE)) {
     926                newTileStorage();
     927            }
    868928            redraw();
    869929        }
  • applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap/SlippyMapPreferenceSetting.java

    r14730 r18355  
    1010import javax.swing.JSlider;
    1111import javax.swing.JSpinner;
     12import javax.swing.SpinnerNumberModel;
     13import java.util.Collection;
     14
     15import org.openstreetmap.gui.jmapviewer.*;
     16import org.openstreetmap.gui.jmapviewer.interfaces.*;
    1217
    1318import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
     
    2934    private JCheckBox autozoomActive = new JCheckBox(tr("autozoom"));
    3035    private JCheckBox autoloadTiles = new JCheckBox(tr("autoload tiles"));
    31     private JSpinner maxZoomLvl = new JSpinner();
     36    private JSpinner maxZoomLvl;
     37    private JSpinner minZoomLvl = new JSpinner();
    3238    private JSlider fadeBackground = new JSlider(0, 100);
    3339   
    3440    public void addGui(PreferenceDialog gui)
    3541    {
     42        minZoomLvl = new JSpinner(new SpinnerNumberModel(SlippyMapPreferences.DEFAULT_MIN_ZOOM, SlippyMapPreferences.MIN_ZOOM, SlippyMapPreferences.MAX_ZOOM, 1));
     43        maxZoomLvl = new JSpinner(new SpinnerNumberModel(SlippyMapPreferences.DEFAULT_MAX_ZOOM, SlippyMapPreferences.MIN_ZOOM, SlippyMapPreferences.MAX_ZOOM, 1));
    3644        //String description = tr("A plugin that adds to JOSM new layer. This layer could render external tiles.");
    3745        JPanel slippymapTab = gui.createPreferenceTab("slippymap.png", tr("SlippyMap"), tr("Settings for the SlippyMap plugin."));
    38         String[] allMapUrls = SlippyMapPreferences.getAllMapUrls();
    39         tileSourceCombo = new JComboBox(allMapUrls);
    40         tileSourceCombo.setEditable(true);
    41         String source = SlippyMapPreferences.getMapUrl();
    42         tileSourceCombo.setSelectedItem(source);
     46        Collection<TileSource> allSources = SlippyMapPreferences.getAllMapSources();
     47        //Collection<String> allSources = SlippyMapPreferences.getAllMapNames();
     48        tileSourceCombo = new JComboBox(allSources.toArray());
     49        //tileSourceCombo.setEditable(true);
     50        tileSourceCombo.setSelectedItem(SlippyMapPreferences.getMapSource());
    4351        slippymapTab.add(new JLabel(tr("Tile Sources")), GBC.std());
    4452        slippymapTab.add(GBC.glue(5, 0), GBC.std());
     
    5361        slippymapTab.add(autoloadTiles, GBC.eol().fill(GBC.HORIZONTAL));
    5462       
     63        slippymapTab.add(new JLabel(tr("Min zoom lvl: ")), GBC.std());
     64        slippymapTab.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
     65        slippymapTab.add(this.minZoomLvl, GBC.eol().fill(GBC.HORIZONTAL));
     66       
    5567        slippymapTab.add(new JLabel(tr("Max zoom lvl: ")), GBC.std());
    5668        slippymapTab.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
    5769        slippymapTab.add(this.maxZoomLvl, GBC.eol().fill(GBC.HORIZONTAL));
    58        
     70
    5971        slippymapTab.add(new JLabel(tr("Fade background: ")), GBC.std());
    6072        slippymapTab.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
     
    7587     *  <li>autoload - {@link #autoloadTiles} - {@link SlippyMapPreferences#getAutoloadTiles()}</li>
    7688     *  <li>maxZoomLvl - {@link #maxZoomLvl} - {@link SlippyMapPreferences#getMaxZoomLvl()}</li>
     89     *  <li>minZoomLvl - {@link #minZoomLvl} - {@link SlippyMapPreferences#getMaxZoomLvl()}</li>
    7790     * </ul>
    7891     * </p>
     
    8295        this.autoloadTiles.setSelected(SlippyMapPreferences.getAutoloadTiles());
    8396        this.maxZoomLvl.setValue(SlippyMapPreferences.getMaxZoomLvl());
     97        this.minZoomLvl.setValue(SlippyMapPreferences.getMinZoomLvl());
    8498        this.fadeBackground.setValue(Math.round(SlippyMapPreferences.getFadeBackground()*100f));
    8599    }
     
    95109    public boolean ok()
    96110    {
    97         SlippyMapPreferences.setMapUrl(this.tileSourceCombo.getSelectedItem().toString());
     111        SlippyMapPreferences.setMapSource((TileSource)this.tileSourceCombo.getSelectedItem());
    98112        SlippyMapPreferences.setAutozoom(this.autozoomActive.isSelected());
    99113        SlippyMapPreferences.setAutoloadTiles(this.autoloadTiles.isSelected());
    100114        SlippyMapPreferences.setMaxZoomLvl((Integer)this.maxZoomLvl.getValue());
     115        SlippyMapPreferences.setMinZoomLvl((Integer)this.minZoomLvl.getValue());
    101116        SlippyMapPreferences.setFadeBackground(this.fadeBackground.getValue()/100f);
    102117        //restart isn't required
  • applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap/SlippyMapPreferences.java

    r18354 r18355  
    22
    33import org.openstreetmap.josm.Main;
     4import java.util.List;
     5import java.util.ArrayList;
     6import java.util.Collection;
     7import java.util.Map;
     8import org.openstreetmap.gui.jmapviewer.*;
     9import org.openstreetmap.gui.jmapviewer.interfaces.*;
    410
    511/**
    612 * Preferences for Slippy Map Tiles
    7  * 
     13 *
    814 * @author Hakan Tandogan <hakan@gurkensalat.com>
    915 * @author LuVar <lubomir.varga@freemap.sk>
    10  * 
     16 *
    1117 */
    1218public class SlippyMapPreferences
     
    1420    public static final String PREFERENCE_PREFIX   = "slippymap";
    1521
    16     public static final String PREFERENCE_TILE_URL = PREFERENCE_PREFIX + ".tile_url";
     22    public static final String PREFERENCE_TILE_CUSTOM_SOURCE = PREFERENCE_PREFIX + ".custom_tile_source_";
     23    public static final String PREFERENCE_TILE_SOURCE = PREFERENCE_PREFIX + ".tile_source";
    1724    public static final String PREFERENCE_AUTOZOOM = PREFERENCE_PREFIX + ".autozoom";
    1825    public static final String PREFERENCE_AUTOLOADTILES = PREFERENCE_PREFIX + ".autoload_tiles";
     
    2229    public static final String PREFERENCE_FADE_BACKGROUND = PREFERENCE_PREFIX + ".fade_background";
    2330    public static final String PREFERENCE_DRAW_DEBUG = PREFERENCE_PREFIX + ".draw_debug";
    24    
    25     public static String getMapUrl()
    26     {
    27         String url = Main.pref.get(PREFERENCE_TILE_URL);
    28 
    29         if (url == null || "".equals(url))
    30         {
    31             url = "http://tah.openstreetmap.org/Tiles/tile"; // t@h
    32             Main.pref.put(PREFERENCE_TILE_URL, url);
    33         }
    34 
    35         return url;
    36     }
    37    
    38     public static void setMapUrl(String mapUrl) {
    39         Main.pref.put(SlippyMapPreferences.PREFERENCE_TILE_URL, mapUrl);
    40     }
    41    
     31
     32    public static final int MAX_ZOOM = 30;
     33    public static final int MIN_ZOOM = 2;
     34    public static final int DEFAULT_MAX_ZOOM = 20;
     35    public static final int DEFAULT_MIN_ZOOM = 2;
     36
     37    public static TileSource getMapSource()
     38    {
     39        String name = Main.pref.get(PREFERENCE_TILE_SOURCE);
     40        List<TileSource> sources = SlippyMapPreferences.getAllMapSources();
     41        TileSource source = sources.get(0);
     42        if (name == null || "".equals(name)) {
     43            name = source.getName();
     44            Main.pref.put(PREFERENCE_TILE_SOURCE, name);
     45        }
     46        for (TileSource s : sources) {
     47            if (!name.equals(s.getName()))
     48                continue;
     49            source = s;
     50            break;
     51        }
     52        return source;
     53    }
     54
     55    public static void setMapSource(TileSource source) {
     56        Main.pref.put(SlippyMapPreferences.PREFERENCE_TILE_SOURCE, source.getName());
     57    }
     58
    4259    public static boolean getAutozoom()
    4360    {
     
    5269        return Boolean.parseBoolean(autozoom);
    5370    }
    54    
     71
    5572    public static void setAutozoom(boolean autozoom) {
    5673        Main.pref.put(SlippyMapPreferences.PREFERENCE_AUTOZOOM, autozoom);
    5774    }
    58    
     75
    5976    public static void setDrawDebug(boolean drawDebug) {
    6077        Main.pref.put(SlippyMapPreferences.PREFERENCE_DRAW_DEBUG, drawDebug);
    6178    }
    62    
     79
    6380    public static void setLastZoom(int zoom) {
    6481        Main.pref.put(SlippyMapPreferences.PREFERENCE_LAST_ZOOM, ""+zoom);
     
    86103        return Boolean.parseBoolean(drawDebug);
    87104    }
    88    
     105
    89106    public static boolean getAutoloadTiles()
    90107    {
     
    99116        return Boolean.parseBoolean(autoloadTiles);
    100117    }
    101    
     118
    102119    public static void setFadeBackground(float fadeBackground) {
    103120        Main.pref.put(SlippyMapPreferences.PREFERENCE_FADE_BACKGROUND, fadeBackground + "");
     
    105122
    106123    /**
    107      * 
     124     *
    108125     * @return  number between 0 and 1, inclusive
    109126     */
     
    116133            Main.pref.put(PREFERENCE_FADE_BACKGROUND, fadeBackground);
    117134        }
    118        
     135
    119136        float parsed;
    120137        try {
     
    135152        return parsed;
    136153    }
    137    
     154
    138155    public static void setAutoloadTiles(boolean autoloadTiles) {
    139156        Main.pref.put(SlippyMapPreferences.PREFERENCE_AUTOLOADTILES, autoloadTiles);
    140157    }
    141    
     158
     159    private static int getIntPref(String prefName, int def)
     160    {
     161        int pref;
     162        try {
     163                //Should we use Main.pref.getInteger(str)?
     164                pref = Main.pref.getInteger(prefName, def);
     165        } catch (Exception ex) {
     166            String str = Main.pref.get(prefName);
     167            Main.pref.put(prefName, null);
     168                throw new RuntimeException("Problem while converting string to int. "
     169                                       + "Converting value of preferences "
     170                                       + prefName + ". Value=\"" + str
     171                                       + "\". Should be an integer. Error: "
     172                                       + ex.getMessage(), ex);
     173        }
     174        return pref;
     175    }
     176
     177    static int checkMaxZoomLvl(int maxZoomLvl)
     178    {
     179        if(maxZoomLvl > MAX_ZOOM) {
     180                System.err.println("MaxZoomLvl shouldnt be more than 30! Setting to 30.");
     181                maxZoomLvl = MAX_ZOOM;
     182        }
     183        if(maxZoomLvl < SlippyMapPreferences.__getMinZoomLvl()) {
     184                System.err.println("maxZoomLvl shouldnt be more than minZoomLvl! Setting to minZoomLvl.");
     185                maxZoomLvl = SlippyMapPreferences.__getMinZoomLvl();
     186        }
     187        return maxZoomLvl;
     188    }
     189
    142190    public static int getMaxZoomLvl()
    143191    {
    144         String maxZoomLvl = Main.pref.get(PREFERENCE_MAX_ZOOM_LVL);
    145 
    146         if (maxZoomLvl == null || "".equals(maxZoomLvl))
    147         {
    148                 maxZoomLvl = "17";
    149             Main.pref.put(PREFERENCE_MAX_ZOOM_LVL, maxZoomLvl);
    150         }
    151 
    152         int navrat;
    153         try {
    154                 navrat = Integer.parseInt(maxZoomLvl);
    155         } catch (Exception ex) {
    156                 throw new RuntimeException("Problem while converting string to int. Converting value of prefetrences " + PREFERENCE_MAX_ZOOM_LVL + ". Value=\"" + maxZoomLvl + "\". Should be an integer. Error: " + ex.getMessage(), ex);
    157         }
    158         if(navrat > 30) {
    159                 System.err.println("MaxZoomLvl shouldnt be more than 30! Setting to 30.");
    160                 navrat = 30;
    161         }
    162         //if(navrat < SlippyMapPreferences.getMinZoomLvl()) {
    163         //      System.err.println("maxZoomLvl shouldnt be more than minZoomLvl! Setting to minZoomLvl.");
    164         //      navrat = SlippyMapPreferences.getMinZoomLvl();
    165         //}
    166         return navrat;
    167     }
    168    
     192        int maxZoomLvl = getIntPref(PREFERENCE_MAX_ZOOM_LVL, DEFAULT_MAX_ZOOM);
     193        return checkMaxZoomLvl(maxZoomLvl);
     194    }
     195
    169196    public static void setMaxZoomLvl(int maxZoomLvl) {
    170         if(maxZoomLvl > 30) {
    171                 System.err.println("MaxZoomLvl shouldnt be more than 30! Setting to 30.");
    172                 maxZoomLvl = 30;
    173         }
    174         if(maxZoomLvl < SlippyMapPreferences.getMinZoomLvl()) {
    175                 System.err.println("maxZoomLvl shouldnt be more than minZoomLvl! Setting to minZoomLvl.");
    176                 maxZoomLvl = SlippyMapPreferences.getMinZoomLvl();
    177         }
     197        maxZoomLvl = checkMaxZoomLvl(maxZoomLvl);
    178198        Main.pref.put(SlippyMapPreferences.PREFERENCE_MAX_ZOOM_LVL, "" + maxZoomLvl);
    179199    }
    180    
    181     public static int getMinZoomLvl()
    182     {
    183         String minZoomLvl = Main.pref.get(PREFERENCE_MIN_ZOOM_LVL);
    184 
    185         if (minZoomLvl == null || "".equals(minZoomLvl))
    186         {
    187                 minZoomLvl = "" + (SlippyMapPreferences.getMaxZoomLvl() - 4);
    188             Main.pref.put(PREFERENCE_MIN_ZOOM_LVL, minZoomLvl);
    189         }
    190 
    191         int navrat;
    192         try {
    193                 navrat = Integer.parseInt(minZoomLvl);
    194         } catch (Exception ex) {
    195                 throw new RuntimeException("Problem while converting string to int. Converting value of prefetrences " + PREFERENCE_MIN_ZOOM_LVL + ". Value=\"" + minZoomLvl + "\". Should be an integer. Error: " + ex.getMessage(), ex);
    196         }
    197         if(navrat < 2) {
    198                 System.err.println("minZoomLvl shouldnt be lees than 2! Setting to 2.");
    199                 navrat = 2;
    200         }
    201         //if(navrat > SlippyMapPreferences.getMaxZoomLvl()) {
    202         //      System.err.println("minZoomLvl shouldnt be more than maxZoomLvl! Setting to maxZoomLvl.");
    203         //      navrat = SlippyMapPreferences.getMaxZoomLvl();
    204         //}
    205         return navrat;
    206     }
    207    
    208     public static void setMinZoomLvl(int minZoomLvl) {
    209         if(minZoomLvl < 2) {
    210                 System.err.println("minZoomLvl shouldnt be lees than 2! Setting to 2.");
    211                 minZoomLvl = 2;
     200
     201    static int checkMinZoomLvl(int minZoomLvl)
     202    {
     203        if(minZoomLvl < MIN_ZOOM) {
     204                System.err.println("minZoomLvl shouldnt be lees than "+MIN_ZOOM+"! Setting to that.");
     205                minZoomLvl = MIN_ZOOM;
    212206        }
    213207        if(minZoomLvl > SlippyMapPreferences.getMaxZoomLvl()) {
     
    215209                minZoomLvl = SlippyMapPreferences.getMaxZoomLvl();
    216210        }
     211        return minZoomLvl;
     212    }
     213
     214    private static int __getMinZoomLvl()
     215    {
     216        // We can use this internally
     217        return getIntPref(PREFERENCE_MIN_ZOOM_LVL, DEFAULT_MIN_ZOOM);
     218    }
     219    public static int getMinZoomLvl()
     220    {
     221        return checkMinZoomLvl(__getMinZoomLvl());
     222    }
     223
     224    public static void setMinZoomLvl(int minZoomLvl) {
     225        minZoomLvl = checkMinZoomLvl(minZoomLvl);
    217226        Main.pref.put(SlippyMapPreferences.PREFERENCE_MIN_ZOOM_LVL, "" + minZoomLvl);
    218227    }
    219    
    220     public static String[] getAllMapUrls()
    221     {
    222         String[] defaultTileSources = new String[]
    223         {
    224                 "http://tah.openstreetmap.org/Tiles/tile", // t@h
    225                 "http://tah.openstreetmap.org/Tiles/maplint", // maplint
    226                 "http://tile.openstreetmap.org", // mapnik
    227                 "http://hypercube.telascience.org/tiles/1.0.0/coastline", // coastline
    228                 "http://www.freemap.sk/layers/allinone/?", //freemapy.sk
    229                 "http://www.freemap.sk/layers/tiles/?", //freemapy.sk pokus 2
    230         };
    231         return defaultTileSources;
     228
     229    public static class Coastline extends OsmTileSource.AbstractOsmTileSource {
     230        public Coastline() {
     231            super("Coastline", "http://hypercube.telascience.org/tiles/1.0.0/coastline");
     232        }
     233        public TileUpdate getTileUpdate() {
     234            return TileUpdate.IfNoneMatch;
     235        }
     236    }
     237    public static class FreeMapySk extends OsmTileSource.AbstractOsmTileSource {
     238        public FreeMapySk() {
     239            super("freemapy.sk", "http://www.freemap.sk/layers/allinone/?");
     240        }
     241        public TileUpdate getTileUpdate() {
     242            return TileUpdate.IfNoneMatch;
     243        }
     244    }
     245    public static class FreeMapySkPokus extends OsmTileSource.AbstractOsmTileSource {
     246        public FreeMapySkPokus() {
     247            super("freemapy.sk pokus 2", "http://www.freemap.sk/layers/tiles/?");
     248        }
     249        public TileUpdate getTileUpdate() {
     250            return TileUpdate.IfNoneMatch;
     251        }
     252    }
     253
     254    public static class Custom extends OsmTileSource.AbstractOsmTileSource {
     255        public Custom(String name, String url) {
     256            super(name, url);
     257        }
     258        public Custom(String name, String url, String extension) {
     259            super(name, url);
     260            this.extension = extension;
     261        }
     262        String extension;
     263        @Override
     264        public String getExtension() {
     265            if (extension == null)
     266                return super.getExtension();
     267            return extension;
     268        }
     269        public TileUpdate getTileUpdate() {
     270            return TileUpdate.IfNoneMatch;
     271        }
     272    }
     273
     274    public static List<TileSource> getCustomSources()
     275    {
     276        List<TileSource> ret = new ArrayList<TileSource>();
     277        Map<String, String> customSources = Main.pref.getAllPrefix(PREFERENCE_TILE_CUSTOM_SOURCE);
     278        for (String key : customSources.keySet()) {
     279            String short_key = key.replaceFirst(PREFERENCE_TILE_CUSTOM_SOURCE, "");
     280            // slippymap.custom_tile_source_1.name=OOC layer
     281            // slippymap.custom_tile_source_1.url=http://a.ooc.openstreetmap.org/npe
     282            // slippymap.custom_tile_source_1.ext=png
     283
     284            if (!(short_key.endsWith("name")))
     285                continue;
     286            String url_key = short_key.replaceFirst("name","url");
     287            String ext_key = short_key.replaceFirst("name","ext");
     288            String name = customSources.get(key);
     289            String url = customSources.get(PREFERENCE_TILE_CUSTOM_SOURCE + url_key);
     290            String ext = customSources.get(PREFERENCE_TILE_CUSTOM_SOURCE + ext_key);
     291            // ext may be null, but that's OK
     292            System.out.println("found new tile source: '" +name+"' url:'"+url+"'"+"' ext:'"+ext+"'");
     293            ret.add(new Custom(name, url, ext));
     294        }
     295        return ret;
     296    }
     297
     298    public static ArrayList<TileSource> sources = null;
     299    public static List<TileSource> getAllMapSources()
     300    {
     301        if (sources != null)
     302            return sources;
     303        sources = new ArrayList<TileSource>();
     304        // first here is the default if the user does not set one
     305        sources.add(new OsmTileSource.Mapnik());
     306        sources.add(new OsmTileSource.CycleMap());
     307        sources.add(new OsmTileSource.TilesAtHome());
     308        sources.add(new Coastline());
     309        sources.add(new FreeMapySkPokus());
     310        sources.add(new FreeMapySk());
     311        sources.addAll(getCustomSources());
     312        // Probably need to either add these or let users add them somehow
     313        //      "http://hypercube.telascience.org/tiles/1.0.0/coastline", // coastline
     314        //      "http://www.freemap.sk/layers/allinone/?", //freemapy.sk
     315        //      "http://www.freemap.sk/layers/tiles/?", //freemapy.sk pokus 2
     316        return sources;
     317    }
     318
     319    public static TileSource getSourceNamed(String name)
     320    {
     321        for (TileSource s : getAllMapSources())
     322            if (s.getName().equals(name))
     323                return s;
     324        return null;
    232325    }
    233326}
Note: See TracChangeset for help on using the changeset viewer.