001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.preferences.projection;
003    
004    import static org.openstreetmap.josm.tools.I18n.tr;
005    
006    import java.awt.event.ActionListener;
007    import java.util.Collection;
008    import java.util.Collections;
009    
010    import javax.swing.JLabel;
011    import javax.swing.JPanel;
012    
013    import org.openstreetmap.josm.data.projection.Lambert;
014    import org.openstreetmap.josm.data.projection.Projection;
015    import org.openstreetmap.josm.tools.GBC;
016    import org.openstreetmap.josm.tools.ImageProvider;
017    
018    public class LambertProjectionChoice extends ListProjectionChoice implements Alias {
019    
020        public static String[] lambert4zones = {
021            tr("{0} ({1} to {2} degrees)", 1,"51.30","48.15"),
022            tr("{0} ({1} to {2} degrees)", 2,"48.15","45.45"),
023            tr("{0} ({1} to {2} degrees)", 3,"45.45","42.76"),
024            tr("{0} (Corsica)", 4)
025        };
026    
027        public LambertProjectionChoice() {
028            super("core:lambert", tr("Lambert 4 Zones (France)"), lambert4zones, tr("Lambert CC Zone"));
029        }
030    
031        private class LambertCBPanel extends CBPanel {
032            public LambertCBPanel(Object[] entries, int initialIndex, String label, ActionListener listener) {
033                super(entries, initialIndex, label, listener);
034                this.add(new JLabel(ImageProvider.get("data/projection", "Departements_Lambert4Zones.png")), GBC.eol().fill(GBC.HORIZONTAL));
035                this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
036            }
037        }
038    
039        @Override
040        public JPanel getPreferencePanel(ActionListener listener) {
041            return new LambertCBPanel(entries, index, label, listener);
042        }
043    
044        @Override
045        public Projection getProjection() {
046            return new Lambert(index);
047        }
048    
049        @Override
050        public String[] allCodes() {
051            String[] codes = new String[4];
052            for (int zone = 0; zone < 4; zone++) {
053                codes[zone] = "EPSG:"+(27561+zone);
054            }
055            return codes;
056        }
057    
058        @Override
059        public Collection<String> getPreferencesFromCode(String code) {
060            if (code.startsWith("EPSG:2756") && code.length() == 10) {
061                try {
062                    String zonestring = code.substring(9);
063                    int zoneval = Integer.parseInt(zonestring);
064                    if(zoneval >= 1 && zoneval <= 4)
065                        return Collections.singleton(zonestring);
066                } catch(NumberFormatException e) {}
067            }
068            return null;
069        }
070    
071        @Override
072        protected String indexToZone(int index) {
073            return Integer.toString(index + 1);
074        }
075    
076        @Override
077        protected int zoneToIndex(String zone) {
078            try {
079                return Integer.parseInt(zone) - 1;
080            } catch(NumberFormatException e) {}
081            return defaultIndex;
082        }
083    
084        @Override
085        public String getAlias() {
086            return Lambert.class.getName();
087        }
088    
089    }