root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.gui / src / main / java / es / unex / sextante / gui / algorithm / AnalysisExtentPanel.java @ 338
History | View | Annotate | Download (23.4 KB)
1 |
package es.unex.sextante.gui.algorithm; |
---|---|
2 |
|
3 |
import info.clearthought.layout.TableLayout; |
4 |
import info.clearthought.layout.TableLayoutConstants; |
5 |
|
6 |
import java.awt.Dimension; |
7 |
import java.awt.event.ActionEvent; |
8 |
import java.awt.event.ActionListener; |
9 |
import java.awt.event.FocusAdapter; |
10 |
import java.awt.event.FocusEvent; |
11 |
import java.awt.event.KeyAdapter; |
12 |
import java.awt.event.KeyEvent; |
13 |
import java.awt.geom.Rectangle2D; |
14 |
|
15 |
import javax.swing.BorderFactory; |
16 |
import javax.swing.ButtonGroup; |
17 |
import javax.swing.ComboBoxModel; |
18 |
import javax.swing.DefaultComboBoxModel; |
19 |
import javax.swing.JButton; |
20 |
import javax.swing.JComboBox; |
21 |
import javax.swing.JLabel; |
22 |
import javax.swing.JPanel; |
23 |
import javax.swing.JRadioButton; |
24 |
import javax.swing.JTextField; |
25 |
|
26 |
import es.unex.sextante.core.AnalysisExtent; |
27 |
import es.unex.sextante.core.GeoAlgorithm; |
28 |
import es.unex.sextante.core.NamedExtent; |
29 |
import es.unex.sextante.core.Sextante; |
30 |
import es.unex.sextante.dataObjects.ILayer; |
31 |
import es.unex.sextante.dataObjects.IRasterLayer; |
32 |
import es.unex.sextante.exceptions.WrongAnalysisExtentException; |
33 |
import es.unex.sextante.gui.core.SextanteGUI; |
34 |
import es.unex.sextante.gui.exceptions.TooLargeGridExtentException; |
35 |
import es.unex.sextante.gui.grass.GrassAlgorithm; |
36 |
import es.unex.sextante.outputs.Output; |
37 |
import es.unex.sextante.outputs.OutputRasterLayer; |
38 |
|
39 |
/**
|
40 |
* A panel to select a extent to be used for generating output layers from a
|
41 |
* given algorithm
|
42 |
*
|
43 |
* @author volaya
|
44 |
*/
|
45 |
public class AnalysisExtentPanel extends javax.swing.JPanel { |
46 |
|
47 |
protected static final int BIG_SIZE = 10000000; |
48 |
|
49 |
private JTextField jTextFieldCols; |
50 |
|
51 |
private JTextField jTextFieldRows; |
52 |
|
53 |
protected JTextField jTextFieldCellSize; |
54 |
|
55 |
protected JTextField jTextFieldXMax; |
56 |
|
57 |
protected JTextField jTextFieldXMin; |
58 |
|
59 |
protected JTextField jTextFieldYMax; |
60 |
|
61 |
protected JTextField jTextFieldYMin; |
62 |
|
63 |
private JLabel jLabelRowsCols; |
64 |
|
65 |
private JLabel jLabelCellSize; |
66 |
|
67 |
private JLabel jLabelRangeY; |
68 |
|
69 |
private JLabel jLabelRangeX; |
70 |
|
71 |
protected JComboBox jComboBoxLayers; |
72 |
|
73 |
private JComboBox jComboBoxViews; |
74 |
|
75 |
protected JPanel jPanelAnalysisExtentValues; |
76 |
|
77 |
private JPanel jPanelAnalysisExtentOptions; |
78 |
|
79 |
private JRadioButton jRadioButtonAdjustToInputDataExtent; |
80 |
|
81 |
private JRadioButton jRadioButtonViewExtent; |
82 |
|
83 |
private JRadioButton jRadioButtonUserDefinedExtent; |
84 |
|
85 |
private JRadioButton jRadioButtonExtentFromLayer; |
86 |
|
87 |
private ButtonGroup jButtonGroup; |
88 |
|
89 |
protected final GeoAlgorithm m_Algorithm; |
90 |
|
91 |
protected final ILayer[] m_Layers; |
92 |
|
93 |
/**
|
94 |
* Creates a new panel
|
95 |
*
|
96 |
* @param algorithm the algorithm
|
97 |
*/
|
98 |
public AnalysisExtentPanel(final GeoAlgorithm algorithm) { |
99 |
|
100 |
super();
|
101 |
|
102 |
m_Layers = SextanteGUI.getInputFactory().getLayers(); |
103 |
m_Algorithm = algorithm; |
104 |
|
105 |
initGUI(); |
106 |
|
107 |
} |
108 |
|
109 |
private void initGUI() { |
110 |
|
111 |
final TableLayout jPanelParametersRasterLayout = new TableLayout( |
112 |
new double[][] { |
113 |
{ 1.0, TableLayoutConstants.FILL, 1.0 }, |
114 |
{ 1.0, TableLayoutConstants.MINIMUM, TableLayoutConstants.FILL, 1.0 } }); |
115 |
jPanelParametersRasterLayout.setHGap(5);
|
116 |
jPanelParametersRasterLayout.setVGap(5);
|
117 |
this.setLayout(jPanelParametersRasterLayout);
|
118 |
|
119 |
this.add(getJPanelAnalysisExtentOptions(), "1, 1"); |
120 |
this.add(getJPanelAnalysisExtentValues(), "1, 2"); |
121 |
if (m_Algorithm.canDefineOutputExtentFromInput()) {
|
122 |
getJPanelAnalysisExtentValues().setVisible(false);
|
123 |
} |
124 |
else {
|
125 |
getJPanelAnalysisExtentValues().setVisible(true);
|
126 |
} |
127 |
|
128 |
} |
129 |
|
130 |
/**
|
131 |
* Assigns the selected extent to the algorithm
|
132 |
*
|
133 |
* @throws TooLargeGridExtentException if the dimensions of the extent are too
|
134 |
* large (too many cells) and the user should be queried to make
|
135 |
* sure that the input values are correct
|
136 |
* @throws WrongAnalysisExtentException if the input values are not correct
|
137 |
*/
|
138 |
public void assignExtent() throws TooLargeGridExtentException, |
139 |
WrongAnalysisExtentException { |
140 |
|
141 |
m_Algorithm.setAnalysisExtent((AnalysisExtent) null);
|
142 |
|
143 |
if (getJRadioButtonAdjustToInputDataExtent().isSelected()) {
|
144 |
if (!m_Algorithm.adjustOutputExtent()) {
|
145 |
throw new WrongAnalysisExtentException( |
146 |
Sextante.getText("Wrong_or_missing_region"));
|
147 |
} |
148 |
else {
|
149 |
return;
|
150 |
} |
151 |
|
152 |
} |
153 |
|
154 |
final AnalysisExtent outputExtent = new AnalysisExtent(); |
155 |
boolean recalculateForCell = m_Algorithm.getRecalculateForCell();
|
156 |
try {
|
157 |
outputExtent |
158 |
.setCellSize(Double.parseDouble(jTextFieldCellSize.getText()));
|
159 |
outputExtent.setXRange(Double.parseDouble(jTextFieldXMin.getText()),
|
160 |
Double.parseDouble(jTextFieldXMax.getText()), recalculateForCell);
|
161 |
outputExtent.setYRange(Double.parseDouble(jTextFieldYMin.getText()),
|
162 |
Double.parseDouble(jTextFieldYMax.getText()), recalculateForCell);
|
163 |
m_Algorithm.setAnalysisExtent(outputExtent); |
164 |
} |
165 |
catch (final NumberFormatException e) { |
166 |
// Sextante.addErrorToLog(e);
|
167 |
if (m_Algorithm instanceof GrassAlgorithm) { |
168 |
// GRASS vector output modules can always fall back to a default extent
|
169 |
outputExtent.setXRange(0.0, 1.0, true); |
170 |
outputExtent.setYRange(0.0, 1.0, true); |
171 |
m_Algorithm.setAnalysisExtent(outputExtent); |
172 |
if (m_Algorithm.getName().contains("v.in.region")) { |
173 |
// we absolutely need a region for these commands!
|
174 |
throw new WrongAnalysisExtentException( |
175 |
Sextante.getText("Wrong_or_missing_region"));
|
176 |
} |
177 |
for (int i = 0; i < m_Algorithm.getNumberOfOutputObjects(); i++) { |
178 |
final Output out = m_Algorithm.getOutputObjects().getOutput(i);
|
179 |
// Raster import modules also do not need an extent setting
|
180 |
if ((out instanceof OutputRasterLayer) |
181 |
&& !m_Algorithm.getName().contains("r.in.")) {
|
182 |
// But if we have another raster output, then we need an extent!
|
183 |
throw new WrongAnalysisExtentException( |
184 |
Sextante.getText("Wrong_or_missing_region"));
|
185 |
} |
186 |
} |
187 |
} |
188 |
else {
|
189 |
throw new WrongAnalysisExtentException( |
190 |
Sextante.getText("Wrong_or_missing_raster_extent_definition"));
|
191 |
} |
192 |
} |
193 |
|
194 |
final int numCells = outputExtent.getNX() * outputExtent.getNY(); |
195 |
/*
|
196 |
* benducke: let's just assume the other knows what (s)he is doing... if
|
197 |
* ((numCells > BIG_SIZE) || (Integer.MAX_VALUE / outputExtent.getNY() <
|
198 |
* outputExtent.getNX())) { throw new
|
199 |
* TooLargeGridExtentException(Sextante.getText
|
200 |
* ("The_selected_grid_extent_seems_too_large") + "(" +
|
201 |
* Integer.toString(outputExtent.getNX()) + " X " +
|
202 |
* Integer.toString(outputExtent.getNY()) + ")\n" +
|
203 |
* Sextante.getText("Are_you_sure_you_want_to_use_it?")); }
|
204 |
*/
|
205 |
} |
206 |
|
207 |
private ButtonGroup getJButtonGroup() { |
208 |
|
209 |
if (jButtonGroup == null) { |
210 |
jButtonGroup = new ButtonGroup(); |
211 |
} |
212 |
return jButtonGroup;
|
213 |
|
214 |
} |
215 |
|
216 |
protected JRadioButton getJRadioButtonUserDefinedExtent() { |
217 |
|
218 |
if (jRadioButtonUserDefinedExtent == null) { |
219 |
jRadioButtonUserDefinedExtent = new JRadioButton(); |
220 |
jRadioButtonUserDefinedExtent.setText(Sextante.getText("User_defined"));
|
221 |
jRadioButtonUserDefinedExtent |
222 |
.addActionListener(new java.awt.event.ActionListener() {
|
223 |
|
224 |
public void actionPerformed(final java.awt.event.ActionEvent e) { |
225 |
setTextFieldsEnabled(true);
|
226 |
extentHasChanged(); |
227 |
} |
228 |
}); |
229 |
} |
230 |
|
231 |
return jRadioButtonUserDefinedExtent;
|
232 |
} |
233 |
|
234 |
protected JRadioButton getJRadioButtonAdjustToInputDataExtent() { |
235 |
|
236 |
if (jRadioButtonAdjustToInputDataExtent == null) { |
237 |
jRadioButtonAdjustToInputDataExtent = new JRadioButton(); |
238 |
jRadioButtonAdjustToInputDataExtent.setText(Sextante |
239 |
.getText("Fit_to_input_layers"));
|
240 |
jRadioButtonAdjustToInputDataExtent |
241 |
.addActionListener(new java.awt.event.ActionListener() {
|
242 |
|
243 |
public void actionPerformed(final java.awt.event.ActionEvent e) { |
244 |
getJPanelAnalysisExtentValues().setVisible(false);
|
245 |
} |
246 |
}); |
247 |
} |
248 |
|
249 |
return jRadioButtonAdjustToInputDataExtent;
|
250 |
} |
251 |
|
252 |
private JRadioButton getJRadioButtonViewExtent() { |
253 |
if (jRadioButtonViewExtent == null) { |
254 |
jRadioButtonViewExtent = new JRadioButton(); |
255 |
jRadioButtonViewExtent.setText(Sextante.getText("Use_extent_from_view"));
|
256 |
jRadioButtonViewExtent |
257 |
.addActionListener(new java.awt.event.ActionListener() {
|
258 |
|
259 |
public void actionPerformed(final java.awt.event.ActionEvent evt) { |
260 |
try {
|
261 |
getJComboBoxViews().setSelectedIndex( |
262 |
getJComboBoxViews().getSelectedIndex()); |
263 |
setTextFieldsEnabled(false);
|
264 |
} |
265 |
catch (final Exception e) {} |
266 |
} |
267 |
}); |
268 |
} |
269 |
return jRadioButtonViewExtent;
|
270 |
} |
271 |
|
272 |
JRadioButton getJRadioButtonExtentFromLayer() {
|
273 |
if (jRadioButtonExtentFromLayer == null) { |
274 |
jRadioButtonExtentFromLayer = new JRadioButton(); |
275 |
jRadioButtonExtentFromLayer.setText(Sextante |
276 |
.getText("Use_extent_from_layer"));
|
277 |
jRadioButtonExtentFromLayer |
278 |
.addActionListener(new java.awt.event.ActionListener() {
|
279 |
|
280 |
public void actionPerformed(final java.awt.event.ActionEvent e) { |
281 |
getJComboBoxLayers().setSelectedIndex( |
282 |
getJComboBoxLayers().getSelectedIndex()); |
283 |
setTextFieldsEnabled(false);
|
284 |
} |
285 |
}); |
286 |
} |
287 |
return jRadioButtonExtentFromLayer;
|
288 |
} |
289 |
|
290 |
protected JPanel getJPanelAnalysisExtentOptions() { |
291 |
if (jPanelAnalysisExtentOptions == null) { |
292 |
jPanelAnalysisExtentOptions = new JPanel(); |
293 |
final TableLayout jPanelRasterExtentOptionsLayout = new TableLayout( |
294 |
new double[][] { |
295 |
{ 253.0, TableLayoutConstants.FILL },
|
296 |
{ TableLayoutConstants.MINIMUM, TableLayoutConstants.MINIMUM, |
297 |
TableLayoutConstants.MINIMUM, TableLayoutConstants.MINIMUM } }); |
298 |
jPanelRasterExtentOptionsLayout.setHGap(5);
|
299 |
jPanelRasterExtentOptionsLayout.setVGap(5);
|
300 |
jPanelAnalysisExtentOptions.setLayout(jPanelRasterExtentOptionsLayout); |
301 |
jPanelAnalysisExtentOptions.setPreferredSize(new java.awt.Dimension(660, |
302 |
200));
|
303 |
jPanelAnalysisExtentOptions.setBorder(BorderFactory
|
304 |
.createTitledBorder(Sextante.getText("Extent_from")));
|
305 |
jPanelAnalysisExtentOptions.add(getJRadioButtonUserDefinedExtent(), |
306 |
"0, 1");
|
307 |
jPanelAnalysisExtentOptions.add(getJRadioButtonViewExtent(), "0, 2");
|
308 |
jPanelAnalysisExtentOptions.add(getJRadioButtonExtentFromLayer(), "0, 3");
|
309 |
getJButtonGroup().add(getJRadioButtonUserDefinedExtent()); |
310 |
getJButtonGroup().add(getJRadioButtonViewExtent()); |
311 |
getJButtonGroup().add(getJRadioButtonExtentFromLayer()); |
312 |
if (m_Algorithm.canDefineOutputExtentFromInput()) {
|
313 |
jPanelAnalysisExtentOptions.add( |
314 |
getJRadioButtonAdjustToInputDataExtent(), "0, 0");
|
315 |
getJButtonGroup().add(getJRadioButtonAdjustToInputDataExtent()); |
316 |
getJRadioButtonAdjustToInputDataExtent().setSelected(true);
|
317 |
} |
318 |
else {
|
319 |
getJRadioButtonUserDefinedExtent().setSelected(true);
|
320 |
} |
321 |
jPanelAnalysisExtentOptions.add(getJComboBoxViews(), "1, 2");
|
322 |
jPanelAnalysisExtentOptions.add(getJComboBoxLayers(), "1, 3");
|
323 |
|
324 |
} |
325 |
return jPanelAnalysisExtentOptions;
|
326 |
} |
327 |
|
328 |
protected JPanel getJPanelAnalysisExtentValues() { |
329 |
|
330 |
if (jPanelAnalysisExtentValues == null) { |
331 |
jPanelAnalysisExtentValues = new JPanel(); |
332 |
final TableLayout jPanelRasterExtentValuesLayout = new TableLayout( |
333 |
new double[][] { |
334 |
{ 255.0, TableLayoutConstants.FILL, TableLayoutConstants.FILL },
|
335 |
{ TableLayoutConstants.MINIMUM, TableLayoutConstants.MINIMUM, |
336 |
TableLayoutConstants.MINIMUM, TableLayoutConstants.MINIMUM, |
337 |
TableLayoutConstants.FILL } }); |
338 |
jPanelRasterExtentValuesLayout.setHGap(5);
|
339 |
jPanelRasterExtentValuesLayout.setVGap(5);
|
340 |
jPanelAnalysisExtentValues.setLayout(jPanelRasterExtentValuesLayout); |
341 |
jPanelAnalysisExtentValues.setBorder(BorderFactory
|
342 |
.createTitledBorder(Sextante.getText("Extent__values")));
|
343 |
jPanelAnalysisExtentValues.setPreferredSize(new java.awt.Dimension(660, |
344 |
145));
|
345 |
jPanelAnalysisExtentValues.add(getJLabelRangeX(), "0, 0");
|
346 |
jPanelAnalysisExtentValues.add(getJLabelCellSize(), "0, 2");
|
347 |
jPanelAnalysisExtentValues.add(getJTextFieldCellSize(), "1, 2");
|
348 |
jPanelAnalysisExtentValues.add(getJTextFieldXMin(), "1, 0");
|
349 |
jPanelAnalysisExtentValues.add(getJTextFieldXMax(), "2, 0");
|
350 |
jPanelAnalysisExtentValues.add(getJTextFieldYMin(), "1, 1");
|
351 |
jPanelAnalysisExtentValues.add(getJTextFieldYMax(), "2, 1");
|
352 |
jPanelAnalysisExtentValues.add(getJLabelRangeY(), "0, 1");
|
353 |
jPanelAnalysisExtentValues.add(getJLabelRowsCols(), "0, 3");
|
354 |
jPanelAnalysisExtentValues.add(getJTextFieldRows(), "1, 3");
|
355 |
jPanelAnalysisExtentValues.add(getJTextFieldCols(), "2, 3");
|
356 |
jPanelAnalysisExtentValues.add(getJButtonExtentFromPoints(), "2,2");
|
357 |
} |
358 |
return jPanelAnalysisExtentValues;
|
359 |
} |
360 |
|
361 |
private JButton getJButtonExtentFromPoints() { |
362 |
|
363 |
final JButton button = new JButton("..."); |
364 |
button.setSize(new Dimension(30, 30)); |
365 |
button.addActionListener(new ActionListener() { |
366 |
|
367 |
public void actionPerformed(final ActionEvent arg0) { |
368 |
final ExtentFromSavedPointsDialog dialog = new ExtentFromSavedPointsDialog(); |
369 |
dialog.pack(); |
370 |
dialog.setVisible(true);
|
371 |
final double[] ret = dialog.getPoints(); |
372 |
if (ret != null) { |
373 |
getJTextFieldXMin().setText(Double.toString(ret[0])); |
374 |
getJTextFieldYMin().setText(Double.toString(ret[1])); |
375 |
getJTextFieldXMax().setText(Double.toString(ret[2])); |
376 |
getJTextFieldYMax().setText(Double.toString(ret[3])); |
377 |
} |
378 |
} |
379 |
}); |
380 |
return button;
|
381 |
} |
382 |
|
383 |
protected JComboBox getJComboBoxLayers() { |
384 |
|
385 |
if (jComboBoxLayers == null) { |
386 |
getJRadioButtonExtentFromLayer().setEnabled(m_Layers.length > 0);
|
387 |
final ComboBoxModel jComboBoxLayersModel = new DefaultComboBoxModel( |
388 |
m_Layers); |
389 |
jComboBoxLayers = new JComboBox(); |
390 |
jComboBoxLayers.setModel(jComboBoxLayersModel); |
391 |
jComboBoxLayers.setEnabled(m_Layers.length > 0);
|
392 |
|
393 |
jComboBoxLayers.addActionListener(new java.awt.event.ActionListener() {
|
394 |
|
395 |
public void actionPerformed(final java.awt.event.ActionEvent evt) { |
396 |
double dCoord;
|
397 |
if (getJRadioButtonExtentFromLayer().isSelected()) {
|
398 |
try {
|
399 |
final ILayer layer = (ILayer) jComboBoxLayers.getSelectedItem();
|
400 |
Rectangle2D fullExtent = layer.getFullExtent();
|
401 |
dCoord = fullExtent.getMinX(); |
402 |
getJTextFieldXMin().setText(new Double(dCoord).toString()); |
403 |
dCoord = fullExtent.getMaxX(); |
404 |
getJTextFieldXMax().setText(new Double(dCoord).toString()); |
405 |
dCoord = fullExtent.getMinY(); |
406 |
getJTextFieldYMin().setText(new Double(dCoord).toString()); |
407 |
dCoord = fullExtent.getMaxY(); |
408 |
getJTextFieldYMax().setText(new Double(dCoord).toString()); |
409 |
if (layer instanceof IRasterLayer) { |
410 |
getJTextFieldCellSize().setText( |
411 |
new Double(((IRasterLayer) layer).getLayerCellSize()) |
412 |
.toString()); |
413 |
} |
414 |
extentHasChanged(); |
415 |
} |
416 |
catch (final Exception e) {} |
417 |
} |
418 |
} |
419 |
}); |
420 |
} |
421 |
return jComboBoxLayers;
|
422 |
} |
423 |
|
424 |
private JComboBox getJComboBoxViews() { |
425 |
|
426 |
if (jComboBoxViews == null) { |
427 |
NamedExtent[] predefinedExtents = SextanteGUI.getInputFactory()
|
428 |
.getPredefinedExtents(); |
429 |
boolean enabled = predefinedExtents.length > 1 || (predefinedExtents.length == 1 && predefinedExtents[0] != null); |
430 |
getJRadioButtonViewExtent().setEnabled(enabled); |
431 |
final ComboBoxModel jComboBoxViewsModel = new DefaultComboBoxModel( |
432 |
predefinedExtents); |
433 |
jComboBoxViews = new JComboBox(); |
434 |
jComboBoxViews.setModel(jComboBoxViewsModel); |
435 |
jComboBoxViews.setEnabled(enabled); |
436 |
|
437 |
jComboBoxViews.addActionListener(new java.awt.event.ActionListener() {
|
438 |
|
439 |
public void actionPerformed(final java.awt.event.ActionEvent evt) { |
440 |
if (getJRadioButtonViewExtent().isSelected()) {
|
441 |
try {
|
442 |
final NamedExtent ne = (NamedExtent) jComboBoxViews
|
443 |
.getSelectedItem(); |
444 |
if (ne != null) { |
445 |
final Rectangle2D extent = ne.getExtent(); |
446 |
getJTextFieldXMin().setText( |
447 |
new Double(extent.getMinX()).toString()); |
448 |
getJTextFieldXMax().setText( |
449 |
new Double(extent.getMaxX()).toString()); |
450 |
getJTextFieldYMin().setText( |
451 |
new Double(extent.getMinY()).toString()); |
452 |
getJTextFieldYMax().setText( |
453 |
new Double(extent.getMaxY()).toString()); |
454 |
setTextFieldsEnabled(false);
|
455 |
extentHasChanged(); |
456 |
} |
457 |
} |
458 |
catch (final Exception e) { |
459 |
Sextante.addErrorToLog(e); |
460 |
} |
461 |
} |
462 |
} |
463 |
}); |
464 |
} |
465 |
return jComboBoxViews;
|
466 |
} |
467 |
|
468 |
protected JLabel getJLabelRangeX() { |
469 |
|
470 |
if (jLabelRangeX == null) { |
471 |
jLabelRangeX = new JLabel(); |
472 |
jLabelRangeX.setText(Sextante.getText("Range_X"));
|
473 |
} |
474 |
return jLabelRangeX;
|
475 |
|
476 |
} |
477 |
|
478 |
protected JTextField getNewJTextField() { |
479 |
|
480 |
final JTextField jTextField = new JTextField(); |
481 |
jTextField.addFocusListener(new FocusAdapter() { |
482 |
|
483 |
@Override
|
484 |
public void focusLost(final FocusEvent e) { |
485 |
final JTextField textField = (JTextField) e.getSource(); |
486 |
final String content = textField.getText(); |
487 |
if (content.length() != 0) { |
488 |
try {
|
489 |
final double d = Double.parseDouble(content); |
490 |
extentHasChanged(); |
491 |
} |
492 |
catch (final NumberFormatException nfe) { |
493 |
getToolkit().beep(); |
494 |
textField.requestFocus(); |
495 |
} |
496 |
} |
497 |
} |
498 |
}); |
499 |
jTextField.addKeyListener(new KeyAdapter() { |
500 |
|
501 |
@Override
|
502 |
public void keyTyped(final KeyEvent event) { |
503 |
validateKeyTyping(event); |
504 |
} |
505 |
}); |
506 |
|
507 |
return jTextField;
|
508 |
} |
509 |
|
510 |
protected JTextField getJTextFieldXMin() { |
511 |
if (jTextFieldXMin == null) { |
512 |
jTextFieldXMin = getNewJTextField(); |
513 |
} |
514 |
return jTextFieldXMin;
|
515 |
} |
516 |
|
517 |
protected JTextField getJTextFieldXMax() { |
518 |
if (jTextFieldXMax == null) { |
519 |
jTextFieldXMax = getNewJTextField(); |
520 |
} |
521 |
return jTextFieldXMax;
|
522 |
} |
523 |
|
524 |
protected JTextField getJTextFieldYMin() { |
525 |
if (jTextFieldYMin == null) { |
526 |
jTextFieldYMin = getNewJTextField(); |
527 |
} |
528 |
return jTextFieldYMin;
|
529 |
} |
530 |
|
531 |
protected JTextField getJTextFieldYMax() { |
532 |
if (jTextFieldYMax == null) { |
533 |
jTextFieldYMax = getNewJTextField(); |
534 |
} |
535 |
return jTextFieldYMax;
|
536 |
} |
537 |
|
538 |
protected JLabel getJLabelRangeY() { |
539 |
if (jLabelRangeY == null) { |
540 |
jLabelRangeY = new JLabel(); |
541 |
jLabelRangeY.setText(Sextante.getText("Range_Y"));
|
542 |
} |
543 |
return jLabelRangeY;
|
544 |
} |
545 |
|
546 |
protected JLabel getJLabelCellSize() { |
547 |
if (jLabelCellSize == null) { |
548 |
jLabelCellSize = new JLabel(); |
549 |
jLabelCellSize.setText(Sextante.getText("Cell_size"));
|
550 |
} |
551 |
return jLabelCellSize;
|
552 |
} |
553 |
|
554 |
protected JTextField getJTextFieldCellSize() { |
555 |
if (jTextFieldCellSize == null) { |
556 |
jTextFieldCellSize = new JTextField(); |
557 |
jTextFieldCellSize.setText("1");
|
558 |
jTextFieldCellSize.addFocusListener(new FocusAdapter() { |
559 |
|
560 |
@Override
|
561 |
public void focusLost(final FocusEvent e) { |
562 |
final JTextField textField = (JTextField) e.getSource(); |
563 |
final String content = textField.getText(); |
564 |
if (content.length() != 0) { |
565 |
try {
|
566 |
final double d = Double.parseDouble(content); |
567 |
if (d <= 0) { |
568 |
throw new NumberFormatException(); |
569 |
} |
570 |
else {
|
571 |
extentHasChanged(); |
572 |
} |
573 |
} |
574 |
catch (final NumberFormatException nfe) { |
575 |
getToolkit().beep(); |
576 |
textField.requestFocus(); |
577 |
} |
578 |
} |
579 |
|
580 |
} |
581 |
}); |
582 |
jTextFieldCellSize.addKeyListener(new KeyAdapter() { |
583 |
|
584 |
@Override
|
585 |
public void keyTyped(final KeyEvent event) { |
586 |
validateKeyTyping(event); |
587 |
} |
588 |
}); |
589 |
} |
590 |
return jTextFieldCellSize;
|
591 |
} |
592 |
|
593 |
protected JLabel getJLabelRowsCols() { |
594 |
if (jLabelRowsCols == null) { |
595 |
jLabelRowsCols = new JLabel(); |
596 |
jLabelRowsCols.setText(Sextante.getText("Number_of_rows-cols"));
|
597 |
} |
598 |
return jLabelRowsCols;
|
599 |
} |
600 |
|
601 |
protected JTextField getJTextFieldRows() { |
602 |
if (jTextFieldRows == null) { |
603 |
jTextFieldRows = new JTextField(); |
604 |
jTextFieldRows.setEnabled(false);
|
605 |
} |
606 |
return jTextFieldRows;
|
607 |
} |
608 |
|
609 |
protected JTextField getJTextFieldCols() { |
610 |
if (jTextFieldCols == null) { |
611 |
jTextFieldCols = new JTextField(); |
612 |
jTextFieldCols.setEnabled(false);
|
613 |
} |
614 |
return jTextFieldCols;
|
615 |
} |
616 |
|
617 |
private void validateKeyTyping(final KeyEvent event) { |
618 |
String text = ((JTextField) event.getSource()).getText(); |
619 |
switch (event.getKeyChar()) {
|
620 |
case KeyEvent.VK_ENTER: |
621 |
extentHasChanged(); |
622 |
break;
|
623 |
default:
|
624 |
text += event.getKeyChar(); |
625 |
break;
|
626 |
} |
627 |
} |
628 |
|
629 |
protected void setTextFieldsEnabled(final boolean bEnabled) { |
630 |
|
631 |
getJPanelAnalysisExtentValues().setVisible(true);
|
632 |
getJTextFieldXMin().setEnabled(bEnabled); |
633 |
getJTextFieldXMax().setEnabled(bEnabled); |
634 |
getJTextFieldYMin().setEnabled(bEnabled); |
635 |
getJTextFieldYMax().setEnabled(bEnabled); |
636 |
|
637 |
} |
638 |
|
639 |
protected void extentHasChanged() { |
640 |
|
641 |
double dRangeX;
|
642 |
double dRangeY;
|
643 |
double dCellSize;
|
644 |
int iRows;
|
645 |
int iCols;
|
646 |
|
647 |
try {
|
648 |
dRangeX = Math.abs(Double.parseDouble(getJTextFieldXMax().getText()) |
649 |
- Double.parseDouble(getJTextFieldXMin().getText()));
|
650 |
dRangeY = Math.abs(Double.parseDouble(getJTextFieldYMax().getText()) |
651 |
- Double.parseDouble(getJTextFieldYMin().getText()));
|
652 |
dCellSize = Double.parseDouble(getJTextFieldCellSize().getText());
|
653 |
iRows = (int) Math.floor(dRangeY / dCellSize); |
654 |
iCols = (int) Math.floor(dRangeX / dCellSize); |
655 |
getJTextFieldRows().setText(Integer.toString(iRows));
|
656 |
getJTextFieldCols().setText(Integer.toString(iCols));
|
657 |
} |
658 |
catch (final NumberFormatException e) { |
659 |
return;
|
660 |
} |
661 |
|
662 |
} |
663 |
|
664 |
public void setExtent(final AnalysisExtent ge) { |
665 |
|
666 |
getJRadioButtonUserDefinedExtent().setSelected(true);
|
667 |
setTextFieldsEnabled(true);
|
668 |
|
669 |
getJTextFieldCellSize().setText(Double.toString(ge.getCellSize()));
|
670 |
getJTextFieldXMin().setText(Double.toString(ge.getXMin()));
|
671 |
getJTextFieldXMax().setText(Double.toString(ge.getXMax()));
|
672 |
getJTextFieldYMin().setText(Double.toString(ge.getYMin()));
|
673 |
getJTextFieldYMax().setText(Double.toString(ge.getYMax()));
|
674 |
extentHasChanged(); |
675 |
|
676 |
} |
677 |
|
678 |
public void setAutoExtent() { |
679 |
|
680 |
getJRadioButtonAdjustToInputDataExtent().setSelected(true);
|
681 |
setTextFieldsEnabled(false);
|
682 |
getJPanelAnalysisExtentValues().setVisible(false);
|
683 |
|
684 |
} |
685 |
|
686 |
} |