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