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