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.Lambert; 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 LambertProjectionChoice extends ListProjectionChoice implements Alias { 019 020 public static String[] lambert4zones = { 021 tr("{0} ({1} to {2} degrees)", 1,"51.30","48.15"), 022 tr("{0} ({1} to {2} degrees)", 2,"48.15","45.45"), 023 tr("{0} ({1} to {2} degrees)", 3,"45.45","42.76"), 024 tr("{0} (Corsica)", 4) 025 }; 026 027 public LambertProjectionChoice() { 028 super("core:lambert", tr("Lambert 4 Zones (France)"), lambert4zones, tr("Lambert CC Zone")); 029 } 030 031 private class LambertCBPanel extends CBPanel { 032 public LambertCBPanel(Object[] entries, int initialIndex, String label, ActionListener listener) { 033 super(entries, initialIndex, label, listener); 034 this.add(new JLabel(ImageProvider.get("data/projection", "Departements_Lambert4Zones.png")), GBC.eol().fill(GBC.HORIZONTAL)); 035 this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH)); 036 } 037 } 038 039 @Override 040 public JPanel getPreferencePanel(ActionListener listener) { 041 return new LambertCBPanel(entries, index, label, listener); 042 } 043 044 @Override 045 public Projection getProjection() { 046 return new Lambert(index); 047 } 048 049 @Override 050 public String[] allCodes() { 051 String[] codes = new String[4]; 052 for (int zone = 0; zone < 4; zone++) { 053 codes[zone] = "EPSG:"+(27561+zone); 054 } 055 return codes; 056 } 057 058 @Override 059 public Collection<String> getPreferencesFromCode(String code) { 060 if (code.startsWith("EPSG:2756") && code.length() == 10) { 061 try { 062 String zonestring = code.substring(9); 063 int zoneval = Integer.parseInt(zonestring); 064 if(zoneval >= 1 && zoneval <= 4) 065 return Collections.singleton(zonestring); 066 } catch(NumberFormatException e) {} 067 } 068 return null; 069 } 070 071 @Override 072 protected String indexToZone(int index) { 073 return Integer.toString(index + 1); 074 } 075 076 @Override 077 protected int zoneToIndex(String zone) { 078 try { 079 return Integer.parseInt(zone) - 1; 080 } catch(NumberFormatException e) {} 081 return defaultIndex; 082 } 083 084 @Override 085 public String getAlias() { 086 return Lambert.class.getName(); 087 } 088 089 }