001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.preferences.projection;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionListener;
007import java.util.Collection;
008import java.util.Collections;
009
010import javax.swing.JLabel;
011import javax.swing.JPanel;
012
013import org.openstreetmap.josm.tools.GBC;
014import org.openstreetmap.josm.tools.ImageProvider;
015
016public class LambertCC9ZonesProjectionChoice extends ListProjectionChoice {
017
018    private static String[] lambert9zones = {
019        tr("{0} ({1} to {2} degrees)", 1,41,43),
020        tr("{0} ({1} to {2} degrees)", 2,42,44),
021        tr("{0} ({1} to {2} degrees)", 3,43,45),
022        tr("{0} ({1} to {2} degrees)", 4,44,46),
023        tr("{0} ({1} to {2} degrees)", 5,45,47),
024        tr("{0} ({1} to {2} degrees)", 6,46,48),
025        tr("{0} ({1} to {2} degrees)", 7,47,49),
026        tr("{0} ({1} to {2} degrees)", 8,48,50),
027        tr("{0} ({1} to {2} degrees)", 9,49,51)
028    };
029
030    /**
031     * Constructs a new {@code LambertCC9ZonesProjectionChoice}.
032     */
033    public LambertCC9ZonesProjectionChoice() {
034        super(tr("Lambert CC9 Zone (France)"), "core:lambertcc9", lambert9zones, tr("Lambert CC Zone"));
035    }
036
037    private class LambertCC9CBPanel extends CBPanel {
038        public LambertCC9CBPanel(Object[] entries, int initialIndex, String label, ActionListener listener) {
039            super(entries, initialIndex, label, listener);
040            this.add(new JLabel(ImageProvider.get("data/projection", "LambertCC9Zones.png")), GBC.eol().fill(GBC.HORIZONTAL));
041            this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
042        }
043    }
044
045    @Override
046    public JPanel getPreferencePanel(ActionListener listener) {
047        return new LambertCC9CBPanel(entries, index, label, listener);
048    }
049
050    @Override
051    public String getCurrentCode() {
052        return "EPSG:" + Integer.toString(3942+index); //CC42 is EPSG:3942 (up to EPSG:3950 for CC50)
053    }
054
055    @Override
056    public String getProjectionName() {
057        return tr("Lambert CC9 Zone (France)");
058    }
059
060    @Override
061    public String[] allCodes() {
062        String[] codes = new String[9];
063        for (int zone = 0; zone < 9; zone++) {
064            codes[zone] = "EPSG:" + (3942 + zone);
065        }
066        return codes;
067    }
068
069    @Override
070    public Collection<String> getPreferencesFromCode(String code) {
071        //zone 1=CC42=EPSG:3942 up to zone 9=CC50=EPSG:3950
072        if (code.startsWith("EPSG:39") && code.length() == 9) {
073            try {
074                String zonestring = code.substring(5,9);
075                int zoneval = Integer.parseInt(zonestring)-3942;
076                if(zoneval >= 0 && zoneval <= 8)
077                    return Collections.singleton(String.valueOf(zoneval+1));
078            } catch(NumberFormatException ex) {}
079        }
080        return null;
081    }
082
083    @Override
084    protected String indexToZone(int index) {
085        return Integer.toString(index + 1);
086    }
087
088    @Override
089    protected int zoneToIndex(String zone) {
090        try {
091            return Integer.parseInt(zone) - 1;
092        } catch(NumberFormatException e) {}
093        return defaultIndex;
094    }
095
096}