// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.preferences.projection; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionListener; import java.util.Collection; import java.util.Collections; import javax.swing.JLabel; import javax.swing.JPanel; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.tools.GBC; import org.openstreetmap.josm.tools.ImageProvider; public class LambertProjectionChoice extends ListProjectionChoice { private static final String[] lambert4zones = { tr("{0} ({1} to {2} degrees)", 1, "51.30", "48.15"), tr("{0} ({1} to {2} degrees)", 2, "48.15", "45.45"), tr("{0} ({1} to {2} degrees)", 3, "45.45", "42.76"), tr("{0} (Corsica)", 4) }; /** * Constructs a new {@code LambertProjectionChoice}. */ public LambertProjectionChoice() { super(tr("Lambert 4 Zones (France)"), /* NO-ICON */ "core:lambert", lambert4zones, tr("Lambert CC Zone")); } private static class LambertCBPanel extends CBPanel { LambertCBPanel(String[] entries, int initialIndex, String label, ActionListener listener) { super(entries, initialIndex, label, listener); this.add(new JLabel(ImageProvider.get("data/projection", "Departements_Lambert4Zones.png")), GBC.eol().fill(GBC.HORIZONTAL)); this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH)); } } @Override public JPanel getPreferencePanel(ActionListener listener) { return new LambertCBPanel(entries, index, label, listener); } @Override public String getCurrentCode() { return "EPSG:" + Integer.toString(27561+index); } @Override public String getProjectionName() { return tr("Lambert 4 Zones (France)"); } @Override public String[] allCodes() { String[] codes = new String[4]; for (int zone = 0; zone < 4; zone++) { codes[zone] = "EPSG:"+(27561+zone); } return codes; } @Override public Collection<String> getPreferencesFromCode(String code) { if (code.startsWith("EPSG:2756") && code.length() == 10) { try { String zonestring = code.substring(9); int zoneval = Integer.parseInt(zonestring); if (zoneval >= 1 && zoneval <= 4) return Collections.singleton(zonestring); } catch (NumberFormatException e) { Main.warn(e); } } return null; } @Override protected String indexToZone(int idx) { return Integer.toString(idx + 1); } @Override protected int zoneToIndex(String zone) { try { return Integer.parseInt(zone) - 1; } catch (NumberFormatException e) { Main.warn(e); } return defaultIndex; } }