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 }