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.tools.GBC;
014 import org.openstreetmap.josm.tools.ImageProvider;
015
016 public 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 public LambertCC9ZonesProjectionChoice() {
031 super(tr("Lambert CC9 Zone (France)"), "core:lambertcc9", lambert9zones, tr("Lambert CC Zone"));
032 }
033
034 private class LambertCC9CBPanel extends CBPanel {
035 public LambertCC9CBPanel(Object[] entries, int initialIndex, String label, ActionListener listener) {
036 super(entries, initialIndex, label, listener);
037 this.add(new JLabel(ImageProvider.get("data/projection", "LambertCC9Zones.png")), GBC.eol().fill(GBC.HORIZONTAL));
038 this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
039 }
040 }
041
042 @Override
043 public JPanel getPreferencePanel(ActionListener listener) {
044 return new LambertCC9CBPanel(entries, index, label, listener);
045 }
046
047 @Override
048 public String getCurrentCode() {
049 return "EPSG:" + Integer.toString(3942+index); //CC42 is EPSG:3942 (up to EPSG:3950 for CC50)
050 }
051
052 @Override
053 public String getProjectionName() {
054 return tr("Lambert CC9 Zone (France)");
055 }
056
057 @Override
058 public String[] allCodes() {
059 String[] codes = new String[9];
060 for (int zone = 0; zone < 9; zone++) {
061 codes[zone] = "EPSG:" + (3942 + zone);
062 }
063 return codes;
064 }
065
066 @Override
067 public Collection<String> getPreferencesFromCode(String code) {
068 //zone 1=CC42=EPSG:3942 up to zone 9=CC50=EPSG:3950
069 if (code.startsWith("EPSG:39") && code.length() == 9) {
070 try {
071 String zonestring = code.substring(5,9);
072 int zoneval = Integer.parseInt(zonestring)-3942;
073 if(zoneval >= 0 && zoneval <= 8)
074 return Collections.singleton(String.valueOf(zoneval+1));
075 } catch(NumberFormatException ex) {}
076 }
077 return null;
078 }
079
080 @Override
081 protected String indexToZone(int index) {
082 return Integer.toString(index + 1);
083 }
084
085 @Override
086 protected int zoneToIndex(String zone) {
087 try {
088 return Integer.parseInt(zone) - 1;
089 } catch(NumberFormatException e) {}
090 return defaultIndex;
091 }
092
093 }