Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / saveraster / ui / listener / DataInputListener.java @ 11893

History | View | Annotate | Download (25.4 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
*
3
* Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License
7
* as published by the Free Software Foundation; either version 2
8
* of the License, or (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
*/
19
package org.gvsig.rastertools.saveraster.ui.listener;
20

    
21
import java.awt.event.ActionEvent;
22
import java.awt.event.ActionListener;
23
import java.awt.event.FocusEvent;
24
import java.awt.event.FocusListener;
25
import java.awt.event.KeyEvent;
26
import java.awt.event.KeyListener;
27
import java.awt.event.MouseEvent;
28
import java.awt.event.MouseListener;
29
import java.io.File;
30

    
31
import javax.swing.JFileChooser;
32
import javax.swing.JTextField;
33
import javax.swing.filechooser.FileFilter;
34

    
35
import org.cresques.io.GeoRasterWriter;
36
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
37
import org.gvsig.raster.util.MathUtils;
38
import org.gvsig.rastertools.RasterModule;
39
import org.gvsig.rastertools.saveraster.ui.SaveRasterDialog;
40
import org.gvsig.rastertools.saveraster.ui.SaveRasterPanel;
41

    
42
import com.iver.andami.PluginServices;
43

    
44

    
45
/**
46
 * Panel encargado de manejar los eventos del los controles de Salvar a Raster
47
 * @author Nacho Brodin (nachobrodin@gmail.com)
48
 */
49
public class DataInputListener implements ActionListener,
50
                                                      MouseListener,
51
                                                      FocusListener,
52
                                                      KeyListener {
53
    final private static long                 serialVersionUID = -3370601314380922368L;
54
    private SaveRasterPanel        controlPanel = null;
55
    private SaveRasterDialog         dialog = null;
56
    private String                                         fName = null;
57
    private int                                                widthInPixels = 0;
58
    private int                                                heightInPixels = 0;
59
    private double                                        mtsPerPixel = 0D;
60
    private Object                                        obj = null;
61
    private double                                        widthMts = 0D, heightMts = 0D;
62

    
63
    /**
64
     * This method initializes
65
     *
66
     */
67
    public DataInputListener(SaveRasterPanel controlPanel) {
68
        super();
69
        this.controlPanel = controlPanel;
70
        initialize();
71
    }
72

    
73
    /**
74
     * This method initializes this
75
     *
76
     * @return void
77
     */
78
    void initialize() {
79

    
80
        //A?adimos gesti?n de eventos
81
            controlPanel.getTScale().addActionListener(this);
82
            controlPanel.getTScale().addMouseListener(this);
83
            controlPanel.getTScale().addFocusListener(this);
84
            controlPanel.getTScale().addKeyListener(this);
85
            
86
            controlPanel.getTMtsPixel().addActionListener(this);
87
            controlPanel.getTMtsPixel().addMouseListener(this);
88
            controlPanel.getTMtsPixel().addFocusListener(this);
89
            controlPanel.getTMtsPixel().addKeyListener(this);
90

    
91
            controlPanel.getTWidth().addActionListener(this);
92
            controlPanel.getTWidth().addMouseListener(this);
93
            controlPanel.getTWidth().addFocusListener(this);
94
            controlPanel.getTWidth().addKeyListener(this);
95
            controlPanel.getTHeight().addActionListener(this);
96
            controlPanel.getTHeight().addMouseListener(this);
97
            controlPanel.getTHeight().addFocusListener(this);
98
            controlPanel.getTHeight().addKeyListener(this);
99
            
100
            controlPanel.getCbMeasureType().addActionListener(this);
101
            
102
            controlPanel.getTInfDerX().addActionListener(this);
103
            controlPanel.getTInfDerY().addActionListener(this);
104
            controlPanel.getTSupIzqX().addActionListener(this);
105
            controlPanel.getTSupIzqY().addActionListener(this);
106
            controlPanel.getTInfDerX().addMouseListener(this);
107
            controlPanel.getTInfDerY().addMouseListener(this);
108
            controlPanel.getTSupIzqX().addMouseListener(this);
109
            controlPanel.getTSupIzqY().addMouseListener(this);
110
        controlPanel.getTInfDerX().addFocusListener(this);
111
        controlPanel.getTInfDerY().addFocusListener(this);
112
        controlPanel.getTSupIzqX().addFocusListener(this);
113
        controlPanel.getTSupIzqY().addFocusListener(this);
114
        
115
        controlPanel.getBSelect().addActionListener(this);
116
        controlPanel.getBProperties().addActionListener(this);
117
                
118
            controlPanel.getCbResolution().addActionListener(this);
119
        controlPanel.getCbResolution().addKeyListener(this);
120
    }
121

    
122
    /**
123
     * Asigna un valor al panel padre
124
     * @param dialogPanel
125
     */
126
    public void setDialogPanel(SaveRasterDialog dialog) {
127
        this.dialog = dialog;
128
    }
129

    
130
    /**
131
     * Obtiene el Panel de Controles interior
132
     * @return
133
     */
134
    public SaveRasterPanel getSaveParameters() {
135
        if (controlPanel == null) {
136
                controlPanel = new SaveRasterPanel();
137
            //saveRaster.setBounds(9, 9, 328, 75);
138
        }
139
        return controlPanel;
140
    }
141
    
142
    /**
143
         * A partir del valor de tama?o de imagen de salida, comprueba el tipo de 
144
         * dato seleccionado por el usuario (Pixels, mms, cms, mts, pulgadas) y devuelve
145
         * el valor en pixeles.
146
         * @param value Cadena introducida por el usuario
147
         */
148
        private int getCorrectMeasure(String value){                        
149
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Pixels"))
150
                        return Integer.parseInt(value);
151
                
152
                int ppp = Integer.parseInt((String)controlPanel.getCbResolution().getSelectedItem());
153
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Mts"))
154
                        return MathUtils.convertMtsToPixels(Double.parseDouble(value), ppp); 
155
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Cms"))
156
                        return MathUtils.convertCmsToPixels(Double.parseDouble(value), ppp);
157
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Mms"))
158
                        return MathUtils.convertMmsToPixels(Double.parseDouble(value), ppp);
159
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Inches"))
160
                        return MathUtils.convertInchesToPixels(Double.parseDouble(value), ppp);
161
                
162
                return 0;
163
        }
164
        
165
        /**
166
         * Asigna al JTextField pasado como par?metro el valor en pixels, cms, mms ,mtrs, pulgadas dependiendo
167
         * de la selecci?n del combo
168
         * @param pixel        Valor en pixels        
169
         * @param field Campo donde se escribe el valor
170
         */
171
        private void setCorrectMeasure(int pixel, JTextField field){                        
172
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Pixels"))
173
                        field.setText(String.valueOf(pixel));
174
                
175
                int ppp = Integer.parseInt((String)controlPanel.getCbResolution().getSelectedItem());
176
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Mts"))
177
                        field.setText(String.valueOf(MathUtils.tailDecimals(MathUtils.convertPixelsToMts(pixel, ppp),5)));
178
                
179
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Cms"))
180
                        field.setText(String.valueOf(MathUtils.tailDecimals(MathUtils.convertPixelsToCms(pixel, ppp),5)));
181
                        
182
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Mms"))
183
                        field.setText(String.valueOf(MathUtils.tailDecimals(MathUtils.convertPixelsToMms(pixel, ppp),5)));
184
                        
185
                if(controlPanel.getCbMeasureType().getSelectedItem().equals("Inches"))
186
                        field.setText(String.valueOf(MathUtils.tailDecimals(MathUtils.convertPixelsToInches(pixel, ppp),5)));
187
                        
188
        }
189
                
190
    /**
191
     * Calculo del tama?o en pixels de la imagen a partir de las coordenadas del
192
     * mundo real, la escala y los puntos por pulgada
193
     */
194
    private void recalcParams() {
195
            validateFields();
196
            double[] size = null;
197
             try{
198
                     size = calcSizeInMts();
199
             } catch (NumberFormatException e) {
200
                        return;
201
             }
202
             widthMts = size[0];
203
        heightMts = size[1];
204
            
205
            int resolution = Integer.parseInt((String)controlPanel.getCbResolution().getSelectedItem());
206
             
207
            //Al variar la resoluci?n independientemente del m?todo seleccionado recalculamos el ancho y el alto
208
        if (obj.equals(controlPanel.getCbResolution())) {
209
                String escala = controlPanel.getTScale().getText();
210
                try{
211
                        if(controlPanel.getProjection().isProjected())
212
                        calcSizeMtsPixel(Integer.parseInt(escala), resolution);
213
                }
214
                catch(NumberFormatException exc){
215
                        calcSizeMtsPixel(0, resolution);
216
                }
217
                return;
218
        }
219
        
220
            //M?todo por escala seleccionado
221
            if(        controlPanel.getRbScale().isSelected() && 
222
                    !controlPanel.getTScale().getText().equals("")){
223
                    int scale = Integer.parseInt(controlPanel.getTScale().getText());
224
                    if(controlPanel.getProjection().isProjected())
225
                            calcSizeMtsPixel(scale, resolution);
226
                    else
227
                            calcSizeMtsPixelGeodesicas(scale, resolution);
228
            }
229
            
230
            //M?todo por tama?o seleccionado
231
            if(controlPanel.getRbSize().isSelected()){
232
                double rel = (widthMts / heightMts);
233
                        
234
                    if(        obj != null && obj.equals(controlPanel.getTWidth()) &&
235
                            !controlPanel.getTWidth().getText().equals("")){
236
                            this.widthInPixels = this.getCorrectMeasure(controlPanel.getTWidth().getText());
237
                            this.heightInPixels = (int)Math.floor(this.widthInPixels / rel);
238
                            if(controlPanel.getProjection().isProjected())
239
                                    calcScaleMtsPixel(this.widthInPixels, this.heightInPixels, resolution);
240
                    }
241
                    if(        obj != null && obj.equals(controlPanel.getTHeight()) &&
242
                                !controlPanel.getTHeight().getText().equals("")){
243
                            this.heightInPixels = this.getCorrectMeasure(controlPanel.getTHeight().getText());
244
                            this.widthInPixels = (int)Math.ceil(this.heightInPixels * rel);
245
                            if(controlPanel.getProjection().isProjected())
246
                                    calcScaleMtsPixel(this.widthInPixels, this.heightInPixels, resolution);
247
                }
248
                    if(        obj != null && 
249
                            obj.equals(controlPanel.getCbMeasureType())){
250
                                    if(controlPanel.getProjection().isProjected())
251
                                            calcScaleMtsPixel(this.widthInPixels, this.heightInPixels, resolution);
252
                    }
253
            }
254
            
255
            //M?todo metros por pixel seleccionado
256
            if(        controlPanel.getRbMtsPixel().isSelected() && 
257
                    !controlPanel.getTMtsPixel().getText().equals("")){
258
                    double mtsPixel = Double.parseDouble(controlPanel.getTMtsPixel().getText());
259
                    if(controlPanel.getProjection().isProjected())
260
                            calcSizeScale(mtsPixel, resolution);
261
            }
262
    }
263

    
264
    /**
265
     * Comprueba si un campo de texto tiene el tipo de dato entero o double y si no lo
266
     * tiene lo borra ya que su contenido es invalido para operar con el
267
     * @param field        Campo de texto a validar
268
     * @param isInt true si el valor a validar es entero y false si es double
269
     */
270
    private void validateTextField(JTextField field, boolean isInt){
271
            try {
272
                    if(isInt)
273
                   Integer.parseInt(field.getText());
274
                    else
275
                            Double.parseDouble(field.getText());
276
            } catch (NumberFormatException e) {
277
                       field.setText("");
278
            }
279
    }
280
    
281
    /**
282
     * Valida los campos de texto
283
     */
284
    private void validateFields(){
285
                        
286
            //Validamos la escala si se ha introducido algo
287
            if(!controlPanel.getTScale().getText().equals(""))
288
                    validateTextField(controlPanel.getTScale(), true);
289
                        
290
            //Validamos los mts por pixel si se ha introducido algo
291
            if(!controlPanel.getTMtsPixel().getText().equals(""))
292
                    validateTextField(controlPanel.getTMtsPixel(), false);
293
            
294
            //Validamos el ancho si se ha introducido algo
295
            if(!controlPanel.getTWidth().getText().equals("")){
296
                    if(((String)controlPanel.getCbMeasureType().getSelectedItem()).equals("Pixels"))
297
                            validateTextField(controlPanel.getTWidth(), true);
298
                    else
299
                            validateTextField(controlPanel.getTWidth(), false);
300
            }
301
            
302
            //Validamos el alto si se ha introducido algo
303
            if(!controlPanel.getTHeight().getText().equals("")){
304
                    if(((String)controlPanel.getCbMeasureType().getSelectedItem()).equals("Pixels"))
305
                            validateTextField(controlPanel.getTHeight(), true);
306
                    else
307
                            validateTextField(controlPanel.getTHeight(), false);
308
            }
309
    }
310
    
311
    /**
312
     * Calcula el tama?o en mtrs a partir de las coordenadas.
313
     * TODO: Esto solo es valido para UTM. El ancho y alto debe obtenerse desde la vista
314
     * @return
315
     * @throws NumberFormatException
316
     */
317
    private double[] calcSizeInMts()throws NumberFormatException{
318
            double[] size = new double[2];
319
      
320
            double lrX = Double.parseDouble(controlPanel.getTInfDerX().getText());
321
        double lrY = Double.parseDouble(controlPanel.getTInfDerY().getText());
322
        double ulX = Double.parseDouble(controlPanel.getTSupIzqX().getText());
323
        double ulY = Double.parseDouble(controlPanel.getTSupIzqY().getText());
324

    
325
        if (ulX > lrX) {
326
            size[0] = ulX - lrX;
327
        } else {
328
                size[0] = lrX - ulX;
329
        }
330
        
331
        if (ulY > lrY) {
332
                size[1] = ulY - lrY;
333
        } else {
334
                size[1] = lrY - ulY;
335
        }
336
        return size;
337
    }
338
    
339
    /**
340
     * A partir de la escala y la resoluci?n calcula el tama?o en pixels y los metros por pixel
341
     * si la imagen est? en coordenadas geograficas.
342
     * @param scale Escala
343
     * @param resolution Resoluci?n
344
     */
345
    private void calcSizeMtsPixelGeodesicas(int scaleIntro, int resolution){    
346
            //TODO: Calculos para imagenes en coordenadas geograficas
347
            
348
            /*double lrX = Double.parseDouble(controlPanel.getTInfDerX().getText());
349
            double ulX = Double.parseDouble(controlPanel.getTSupIzqX().getText());
350
            
351
            //Nos aseguramos de que la escala sea un entero. Si no lo es ponemos un 0
352
        try {
353
            Integer.parseInt(controlPanel.getTScale().getText());
354
        } catch (NumberFormatException e) {
355
                controlPanel.getTScale().setText("0");
356
        }
357
        
358
            double scale = controlPanel.getProjection().getScale(ulX, lrX, 
359
                            controlPanel.getWidthInPixelsGeodesicas(), 
360
                            Integer.parseInt((String)controlPanel.getCbResolution().getSelectedItem()));
361

362
            this.widthInPixels = (int)((scaleIntro * controlPanel.getWidthInPixelsGeodesicas()) / scale);
363
            this.heightInPixels = (int)((scaleIntro * controlPanel.getHeightInPixelsGeodesicas()) / scale);
364
                
365
        mtsPerPixel = MathUtils.tailDecimals(((double)(widthMts / this.widthInPixels)), 5);
366
        
367
        controlPanel.getTMtsPixel().setText(String.valueOf(mtsPerPixel));
368
        this.setCorrectMeasure(this.widthInPixels, controlPanel.getTWidth());
369
        this.setCorrectMeasure(this.heightInPixels, controlPanel.getTHeight());*/            
370
    }
371
    
372
    /**
373
     * A partir de la escala y la resoluci?n calcula el tama?o en pixels y los metros por pixel
374
     * @param scale Escala
375
     * @param resolution Resoluci?n
376
     */
377
    private void calcSizeMtsPixel(int scale, int resolution){        
378
            try{
379
                    if ((widthMts <= 0) || (heightMts <= 0) ||
380
                         (Integer.parseInt(controlPanel.getTScale().getText()) == 0)){
381
                         controlPanel.getTWidth().setText("");
382
                         controlPanel.getTHeight().setText("");
383
                     return;
384
                }
385
            }catch(NumberFormatException exc){
386
                    System.err.println("Fomato no num?rico");
387
                    controlPanel.getTWidth().setText("");
388
                 controlPanel.getTHeight().setText("");
389
             return;
390
            }
391

    
392
        //Calculo del tama?o de la imagen definitiva en pulgadas
393
        double widthInches = (widthMts / Double.parseDouble(controlPanel.getTScale().getText())) * MathUtils.INCHESMTR;
394
        double heightInches = (heightMts / Double.parseDouble(controlPanel.getTScale().getText())) * MathUtils.INCHESMTR;
395

    
396
        //Ancho en pixeles = ppp * sizepulgadas
397
        this.widthInPixels = (int) (Integer.parseInt(controlPanel.getCbResolution().getSelectedItem().toString()) * widthInches);
398
        this.heightInPixels = (int) (Integer.parseInt(controlPanel.getCbResolution().getSelectedItem().toString()) * heightInches);
399
                 
400
        mtsPerPixel = (double)(widthMts / this.widthInPixels);        
401
        //double mtsPixelH = wc_altomts/altoPixels;
402
       
403
        //recortamos a 5 decimales
404
        mtsPerPixel = MathUtils.tailDecimals(mtsPerPixel, 5);
405
        
406
        controlPanel.getTMtsPixel().setText(String.valueOf(mtsPerPixel));
407
        this.setCorrectMeasure(this.widthInPixels, controlPanel.getTWidth());
408
        this.setCorrectMeasure(this.heightInPixels, controlPanel.getTHeight());
409
                
410
        //int anchopixels =(int) (Toolkit.getDefaultToolkit().getScreenResolution() * anchopulgadas);
411
        //int altopixels = (int) (Toolkit.getDefaultToolkit().getScreenResolution() * altopulgadas);
412
    }
413
    
414
    /**
415
     * A partir de los metros por pixel y la resoluci?n calcula el tama?o en pixels y la escala
416
     * @param mtsPixel Metros por pixel 
417
     * @param resolution Resoluci?n
418
     */
419
    private void calcSizeScale(double mtsPixel, int resolution){        
420
        //N?mero de p?xeles de ancho y alto 
421
            this.widthInPixels = (int)(widthMts / mtsPixel);
422
            this.heightInPixels = (int)(heightMts / mtsPixel);
423
        
424
        //Obtenemos los mts/pixel reales ya que el n?mero de pixeles es entero deben redondearse
425
        mtsPerPixel = (double)(widthMts / widthInPixels);
426
        
427
        //recortamos a 5 decimales
428
        mtsPerPixel = MathUtils.tailDecimals(mtsPerPixel, 5);
429
        
430
        //Obtenemos el ancho y alto en pulgadas
431
        double widthInches = (double)(widthInPixels / Integer.parseInt(controlPanel.getCbResolution().getSelectedItem().toString()));
432
        double heightInches = (double)(heightInPixels / Integer.parseInt(controlPanel.getCbResolution().getSelectedItem().toString()));
433
        
434
        //Calculo de la escala
435
        int scale = (int)((widthMts * MathUtils.INCHESMTR) / widthInches);
436
        
437
        controlPanel.getTScale().setText(String.valueOf(scale));
438
        controlPanel.getTMtsPixel().setText(String.valueOf(mtsPerPixel));
439
        this.setCorrectMeasure(widthInPixels, controlPanel.getTWidth());
440
        this.setCorrectMeasure(heightInPixels, controlPanel.getTHeight());
441
    }
442

    
443
    /**
444
     * A partir del tama?o en pixels de la imagen y la resoluci?n calcula los metros por pixel y la escala
445
     * @param widthPixels        Ancho de la imagen en pixels
446
     * @param heightPixels        Alto de la imagen en pixels
447
     * @param resolution Resoluci?n
448
     */
449
        private void calcScaleMtsPixel(int widthPixels, int heightPixels, int resolution){
450
        this.widthInPixels = widthPixels;
451
        this.heightInPixels = heightPixels;
452
        
453
        //Obtenemos los mts/pixel reales ya que el n?mero de pixeles es entero deben redondearse
454
        mtsPerPixel = (double)(widthMts / widthPixels);
455
        
456
        //recortamos a 5 decimales
457
        mtsPerPixel = MathUtils.tailDecimals(mtsPerPixel, 5);
458
        
459
        //Obtenemos el ancho y alto en pulgadas
460
        double widthInches = (double)(widthPixels / Integer.parseInt(controlPanel.getCbResolution().getSelectedItem().toString()));
461
        double heightInches = (double)(heightPixels / Integer.parseInt(controlPanel.getCbResolution().getSelectedItem().toString()));
462
        
463
        //Calculo de la escala
464
        int scale = (int)((widthMts * MathUtils.INCHESMTR) / widthInches);
465
        
466
        controlPanel.getTScale().setText(String.valueOf(scale));
467
        controlPanel.getTMtsPixel().setText(String.valueOf(mtsPerPixel));
468
        this.setCorrectMeasure(widthPixels, controlPanel.getTWidth());
469
        this.setCorrectMeasure(heightPixels, controlPanel.getTHeight());
470
        }
471
                    
472
    /**
473
     * Controla cuando se cumplen todos los requisitos en el formulario para
474
     * poder activar el bot?n de aceptar.
475
     */
476
    public void enableButtons() {
477
        if(        controlPanel.getTWidth().getText().equals("0") ||
478
                controlPanel.getTHeight().getText().equals("0") ||
479
                controlPanel.getTWidth().getText().equals("") ||
480
                controlPanel.getTHeight().getText().equals("") ||
481
                this.fName == null || this.fName.equals("")){
482
            if (dialog != null) {
483
                dialog.getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).setEnabled(false);
484
                dialog.getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setEnabled(false);
485
            }
486
            return;
487
        }
488

    
489
        if (dialog != null) { 
490
                dialog.getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT).setEnabled(true);
491
                dialog.getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setEnabled(true);
492
        }
493
    }
494

    
495
    /**
496
     * Gestiona los eventos del cambio de escala de la imagen y lla apertura del
497
     * dialogo de selecci?n del nombre del fichero.
498
     */
499
    public void actionPerformed(ActionEvent e) {
500
            obj = e.getSource();
501
            
502
        //Selector de Fichero sobre el cual se va a salvar a raster
503
        if (obj.equals(controlPanel.getBSelect())) {
504
            JFileChooser chooser = new JFileChooser(RasterModule.getPath());
505
            chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
506

    
507
            //A?adimos las extensiones que hayan sido registradas en el driver
508
            String[] extList = GeoRasterWriter.getDriversExtensions();
509
            for(int i=0;i<extList.length;i++)
510
                    chooser.addChoosableFileFilter(new WriterFilter(chooser, extList[i]));
511
                             
512
            int returnVal = chooser.showOpenDialog(controlPanel);
513

    
514
            if (returnVal == JFileChooser.APPROVE_OPTION) {
515
                this.fName = chooser.getSelectedFile().toString();
516
                String ext = ((WriterFilter)chooser.getFileFilter()).getDescription();
517
                
518
                FileFilter filter = chooser.getFileFilter();
519
                ext = ext.toLowerCase().substring(ext.lastIndexOf(".") + 1, ext.length());
520

    
521
                if ((fName != null) && !fName.equals("")) {
522
                        if(!fName.endsWith("." + ext))
523
                                fName = fName + "." + ext;
524
                        
525
                        controlPanel.getBProperties().setText(PluginServices.getText(this, "props")+" "+GeoRasterWriter.getDriverType(ext));
526
                }
527
                controlPanel.getBProperties().setEnabled(true);
528
                controlPanel.getLFileName().setText(fName.substring(fName.lastIndexOf(File.separator) + 1, fName.length()));
529
             
530
                enableButtons();
531
                RasterModule.setPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
532
            }
533
        }
534
        
535
        //Al variar las unidades recalculamos el ancho y el alto
536
        if (e.getSource().equals(controlPanel.getCbMeasureType())) {
537
                this.setCorrectMeasure(this.widthInPixels, controlPanel.getTWidth());
538
                this.setCorrectMeasure(this.heightInPixels, controlPanel.getTHeight());
539
        }
540
                
541
        if (!obj.equals(controlPanel.getBSelect()))
542
                this.recalcParams();
543
        
544
        this.enableButtons();
545
        
546
    }
547

    
548
    /**
549
     * Devuelve el nombre del fichero seleccionado
550
     * @return Nombre del fichero seleccionado
551
     */
552
    public String getFileName() {
553
        return fName;
554
    }
555

    
556
    /**
557
     * Pone a null el valor de la variable con el valor del fichero de texto.
558
     */
559
    public void resetFileName() {
560
            fName = null;
561
            controlPanel.getLFileName().setText("");
562
    }
563
    
564
    /**
565
     * Unused
566
     */
567
    public void mouseExited(MouseEvent e) {
568
    }
569

    
570
    /**
571
     * Unused. Only for compilant purposes
572
     */
573
    public void mouseReleased(MouseEvent e) {
574
    }
575

    
576
    /**
577
     * Unused. Only for compilant purposes
578
     */
579
    public void mouseEntered(MouseEvent e) {
580
    }
581

    
582
    public void mouseClicked(MouseEvent e) {
583
            if( (obj.equals(controlPanel.getTHeight()) && e.getSource().equals(controlPanel.getTWidth())) ||
584
                    (obj.equals(controlPanel.getTWidth()) && e.getSource().equals(controlPanel.getTHeight())) )
585
                    return;
586
            obj = e.getSource();
587
        this.recalcParams();
588
        enableButtons();
589
    }
590

    
591
    /**
592
     * Unused. Only for compilant purposes
593
     */
594
    public void mousePressed(MouseEvent e) {
595
    }
596

    
597
    /**
598
     * Unused. Only for compilant purposes
599
     */
600
    public void focusGained(FocusEvent e) {
601
    }
602

    
603
    /**
604
     * Recalcula el tama?o de la imagen con los datos existentes y
605
     * activa o desactiva los botones.
606
     */
607
    public void focusLost(FocusEvent e) {
608
            obj = e.getSource();
609
        this.recalcParams();
610
        enableButtons();
611
    }
612

    
613
    /**
614
     * Activa o Desactiva los botones a trav?s de la funci?n que valida los campos
615
     */
616
    public void keyTyped(KeyEvent e) {
617
        enableButtons();
618
    }
619

    
620
    /**
621
     * Activa o Desactiva los botones a trav?s de la funci?n que valida los campos
622
     */
623
    public void keyPressed(KeyEvent e) {
624
        enableButtons();
625
    }
626

    
627
    /**
628
     * Activa o Desactiva los botones a trav?s de la funci?n que valida los campos
629
     */
630
    public void keyReleased(KeyEvent e) {
631
        enableButtons();
632
    }
633

    
634
    /**
635
     * Obtiene la altura en pixels de la imagen de salida
636
     * @return entero con la altura en pixels
637
     */
638
        public int getHeightInPixels() {
639
                return heightInPixels;
640
        }
641
        
642
        /**
643
     * Obtiene la anchura en pixels de la imagen de salida
644
     * @return entero con la anchura en pixels
645
     */
646
        public int getWidthInPixels() {
647
                return widthInPixels;
648
        }
649
}
650

    
651
/**
652
 * @author Nacho Brodin <brodin_ign@gva.es>
653
 * Filtro para el selector de formatos de escritura
654
 */
655
class WriterFilter extends javax.swing.filechooser.FileFilter {
656
    private JFileChooser chooser = null;
657
    private String filter;
658

    
659
    public WriterFilter(JFileChooser ch, String fil) {
660
        this.chooser = ch;
661
        this.filter = fil;
662
    }
663

    
664
    public boolean accept(File f) {
665
        return f.isDirectory() || f.getName().toLowerCase().endsWith("."+filter);
666
    }
667

    
668
    public String getDescription() {
669
        return "."+filter;
670
    }
671
}
672