source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java@ 8836

Last change on this file since 8836 was 8836, checked in by Don-vip, 9 years ago

fix Checkstyle issues

  • Property svn:eol-style set to native
File size: 5.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences.projection;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.GridBagLayout;
7import java.awt.event.ActionListener;
8import java.util.ArrayList;
9import java.util.Arrays;
10import java.util.Collection;
11import java.util.List;
12
13import javax.swing.ButtonGroup;
14import javax.swing.JLabel;
15import javax.swing.JPanel;
16import javax.swing.JRadioButton;
17
18import org.openstreetmap.josm.Main;
19import org.openstreetmap.josm.tools.GBC;
20
21public class UTMProjectionChoice extends ListProjectionChoice {
22
23 /** Earth emispheres **/
24 public enum Hemisphere {
25 /** North emisphere */
26 North,
27 /** South emisphere */
28 South
29 }
30
31 private static final Hemisphere DEFAULT_HEMISPHERE = Hemisphere.North;
32
33 private Hemisphere hemisphere;
34
35 private static final List<String> cbEntries = new ArrayList<>();
36 static {
37 for (int i = 1; i <= 60; i++) {
38 cbEntries.add(Integer.toString(i));
39 }
40 }
41
42 /**
43 * Constructs a new {@code UTMProjectionChoice}.
44 */
45 public UTMProjectionChoice() {
46 super(tr("UTM"), /* NO-ICON */ "core:utm", cbEntries.toArray(new String[0]), tr("UTM Zone"));
47 }
48
49 private class UTMPanel extends CBPanel {
50
51 public JRadioButton north, south;
52
53 UTMPanel(String[] entries, int initialIndex, String label, ActionListener listener) {
54 super(entries, initialIndex, label, listener);
55
56 north = new JRadioButton();
57 north.setSelected(hemisphere == Hemisphere.North);
58 south = new JRadioButton();
59 south.setSelected(hemisphere == Hemisphere.South);
60
61 ButtonGroup group = new ButtonGroup();
62 group.add(north);
63 group.add(south);
64
65 JPanel bPanel = new JPanel();
66 bPanel.setLayout(new GridBagLayout());
67
68 bPanel.add(new JLabel(tr("North")), GBC.std().insets(5, 5, 0, 5));
69 bPanel.add(north, GBC.std().fill(GBC.HORIZONTAL));
70 bPanel.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
71 bPanel.add(new JLabel(tr("South")), GBC.std().insets(5, 5, 0, 5));
72 bPanel.add(south, GBC.std().fill(GBC.HORIZONTAL));
73 bPanel.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
74
75 this.add(new JLabel(tr("Hemisphere")), GBC.std().insets(5, 5, 0, 5));
76 this.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
77 this.add(bPanel, GBC.eop().fill(GBC.HORIZONTAL));
78 this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
79
80 if (listener != null) {
81 north.addActionListener(listener);
82 south.addActionListener(listener);
83 }
84 }
85 }
86
87 @Override
88 public JPanel getPreferencePanel(ActionListener listener) {
89 return new UTMPanel(entries, index, label, listener);
90 }
91
92 @Override
93 public String getCurrentCode() {
94 int zone = index + 1;
95 int code = 32600 + zone + (hemisphere == Hemisphere.South ? 100 : 0);
96 return "EPSG:" + Integer.toString(code);
97 }
98
99 @Override
100 public String getProjectionName() {
101 return tr("UTM");
102 }
103
104 @Override
105 public Collection<String> getPreferences(JPanel panel) {
106 if (!(panel instanceof UTMPanel)) {
107 throw new IllegalArgumentException("Unsupported panel: "+panel);
108 }
109 UTMPanel p = (UTMPanel) panel;
110 int idx = p.prefcb.getSelectedIndex();
111 Hemisphere hem = p.south.isSelected() ? Hemisphere.South : Hemisphere.North;
112 return Arrays.asList(indexToZone(idx), hem.toString());
113 }
114
115 @Override
116 public String[] allCodes() {
117 List<String> projections = new ArrayList<>(60*4);
118 for (int zone = 1; zone <= 60; zone++) {
119 for (Hemisphere hem : Hemisphere.values()) {
120 projections.add("EPSG:" + (32600 + zone + (hem == Hemisphere.South ? 100 : 0)));
121 }
122 }
123 return projections.toArray(new String[projections.size()]);
124 }
125
126 @Override
127 public Collection<String> getPreferencesFromCode(String code) {
128
129 if (code.startsWith("EPSG:326") || code.startsWith("EPSG:327")) {
130 try {
131 Hemisphere hem = code.charAt(7) == '6' ? Hemisphere.North : Hemisphere.South;
132 String zonestring = code.substring(8);
133 int zoneval = Integer.parseInt(zonestring);
134 if (zoneval > 0 && zoneval <= 60)
135 return Arrays.asList(zonestring, hem.toString());
136 } catch (NumberFormatException e) {
137 Main.warn(e);
138 }
139 }
140 return null;
141 }
142
143 @Override
144 public void setPreferences(Collection<String> args) {
145 super.setPreferences(args);
146 Hemisphere hem = DEFAULT_HEMISPHERE;
147
148 if (args != null) {
149 String[] array = args.toArray(new String[args.size()]);
150
151 if (array.length > 1) {
152 hem = Hemisphere.valueOf(array[1]);
153 }
154 }
155 this.hemisphere = hem;
156 }
157
158 @Override
159 protected String indexToZone(int idx) {
160 return Integer.toString(idx + 1);
161 }
162
163 @Override
164 protected int zoneToIndex(String zone) {
165 try {
166 return Integer.parseInt(zone) - 1;
167 } catch (NumberFormatException e) {
168 Main.warn(e);
169 }
170 return defaultIndex;
171 }
172}
Note: See TracBrowser for help on using the repository browser.