Statistics
| Revision:

svn-gvsig-desktop / tags / Root_v06 / libraries / libCq CMS for java.old / src / org / cresques / ui / raster / SaveSetupPanel.java @ 4811

History | View | Annotate | Download (14 KB)

1
/*
2
 * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
3
 *
4
 * Copyright (C) 2004-5.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
19
 *
20
 * For more information, contact:
21
 *
22
 * cresques@gmail.com
23
 */
24
package org.cresques.ui.raster;
25

    
26
import java.awt.Dimension;
27
import java.awt.event.ActionEvent;
28
import java.awt.event.ActionListener;
29
import java.awt.event.FocusEvent;
30
import java.awt.event.FocusListener;
31
import java.awt.event.KeyEvent;
32
import java.awt.event.KeyListener;
33
import java.awt.event.MouseEvent;
34
import java.awt.event.MouseListener;
35

    
36
import java.io.File;
37

    
38
import javax.swing.JFileChooser;
39
import javax.swing.JPanel;
40
import javax.swing.filechooser.FileFilter;
41

    
42

    
43
/**
44
 * Panel encargado de manejar los eventos del los controles de Salvar a Raste
45
 * @author Nacho Brodin (brodin_ign@gva.es)
46
 */
47
public class SaveSetupPanel extends JPanel implements ActionListener,
48
                                                      MouseListener,
49
                                                      FocusListener,
50
                                                      KeyListener {
51
    final private static long serialVersionUID = -3370601314380922368L;
52
    private DataInputSaveRaster saveRaster = null;
53
    private SaveRasterDialogPanel dialogPanel = null;
54
    private String fName = null;
55

    
56
    /**
57
     * This method initializes
58
     *
59
     */
60
    public SaveSetupPanel() {
61
        super();
62
        initialize();
63
    }
64

    
65
    /**
66
     * This method initializes this
67
     *
68
     * @return void
69
     */
70
    void initialize() {
71
        this.setPreferredSize(new Dimension(350, 210)); //AnchoxAlto  panel interior
72
        this.setBounds(0, 0, 300, 250);
73
        this.setLayout(null);
74
        this.add(getSaveParameters(), null);
75

    
76
        //A?adimos gesti?n de eventos        
77
        saveRaster.getJComboBox().addActionListener(this);
78
        saveRaster.getTescala().addActionListener(this);
79
        saveRaster.getTescala().addMouseListener(this);
80
        saveRaster.getTescala().addFocusListener(this);
81
        saveRaster.getTinf_derX().addActionListener(this);
82
        saveRaster.getTinf_derY().addActionListener(this);
83
        saveRaster.getTsup_izqX().addActionListener(this);
84
        saveRaster.getTsup_izqY().addActionListener(this);
85
        saveRaster.getTinf_derX().addMouseListener(this);
86
        saveRaster.getTinf_derY().addMouseListener(this);
87
        saveRaster.getTsup_izqX().addMouseListener(this);
88
        saveRaster.getTsup_izqY().addMouseListener(this);
89
        saveRaster.getTinf_derX().addFocusListener(this);
90
        saveRaster.getTinf_derY().addFocusListener(this);
91
        saveRaster.getTsup_izqX().addFocusListener(this);
92
        saveRaster.getTsup_izqY().addFocusListener(this);
93
        saveRaster.getBseleccion().addActionListener(this);
94
        saveRaster.getBPropiedades().addActionListener(this);
95
        saveRaster.getTescala().addKeyListener(this);
96
        saveRaster.getJComboBox().addKeyListener(this);
97
    }
98

    
99
    /**
100
     * Asigna un valor al panel padre
101
     * @param dialogPanel
102
     */
103
    public void setDialogPanel(SaveRasterDialogPanel dialogPanel) {
104
        this.dialogPanel = dialogPanel;
105
    }
106

    
107
    /**
108
     * Obtiene el Panel de Controles interior
109
     * @return
110
     */
111
    public DataInputSaveRaster getSaveParameters() {
112
        if (saveRaster == null) {
113
            saveRaster = new DataInputSaveRaster();
114

    
115
            //saveRaster.setBounds(9, 9, 328, 75);
116
        }
117

    
118
        return saveRaster;
119
    }
120

    
121
    /**
122
     * Calcula el tama?o en pixeles de la imagen resultante. 
123
     */
124
    private void calcSizeImage(){
125
            if(!saveRaster.getProjection().isProjected())
126
                    calcSizeImageGeodesicas();
127
            else
128
                    calcSizeImageUTM();
129
    }
130
    
131
    /**
132
     * Calcula el tama?o en pixeles cuando la imagen est? en coordenadas 
133
     * geogr?ficas. 
134
     *
135
     */
136
    public void calcSizeImageGeodesicas(){
137
            double lrX = Double.parseDouble(saveRaster.getTinf_derX().getText());
138
            double ulX = Double.parseDouble(saveRaster.getTsup_izqX().getText());
139
            
140
            //Nos aseguramos de que la escala sea un entero. Si no lo es ponemos un 0
141
        try {
142
            Integer.parseInt(saveRaster.getTescala().getText());
143
        } catch (NumberFormatException e) {
144
            saveRaster.getTescala().setText("0");
145
        }
146
        
147
            double scale = saveRaster.getProjection().getScale(ulX, lrX, 
148
                            saveRaster.getWidthInPixelsGeodesicas(), 
149
                            Integer.parseInt((String)saveRaster.getJComboBox().getSelectedItem()));
150
            double scaleIntro = Double.parseDouble(saveRaster.getTescala().getText());
151
            int widthPixels = (int)((scaleIntro * saveRaster.getWidth()) / scale);
152
            int heightPixels = (int)((scaleIntro * saveRaster.getHeight()) / scale);
153
            
154
            saveRaster.getTancho().setText(String.valueOf(widthPixels));
155
        saveRaster.getTalto().setText(String.valueOf(heightPixels));
156
    }
157
    
158
    /**
159
     * Calculo del tama?o en pixels de la imagen a partir de las coordenadas del
160
     * mundo real, la escala y los puntos por pulgada
161
     */
162
    private void calcSizeImageUTM() {
163
        double lrX = Double.parseDouble(saveRaster.getTinf_derX().getText());
164
        double lrY = Double.parseDouble(saveRaster.getTinf_derY().getText());
165
        double ulX = Double.parseDouble(saveRaster.getTsup_izqX().getText());
166
        double ulY = Double.parseDouble(saveRaster.getTsup_izqY().getText());
167
        double widthMts = 0;
168

    
169
        if (ulX > lrX) {
170
            widthMts = ulX - lrX;
171
        } else {
172
                widthMts = lrX - ulX;
173
        }
174

    
175
        double heightMts = 0;
176

    
177
        if (ulY > lrY) {
178
                heightMts = ulY - lrY;
179
        } else {
180
                heightMts = lrY - ulY;
181
        }
182

    
183
        //Nos aseguramos de que la escala sea un entero. Si no lo es ponemos un 0
184
        try {
185
            Integer.parseInt(saveRaster.getTescala().getText());
186
        } catch (NumberFormatException e) {
187
            saveRaster.getTescala().setText("0");
188
        }
189

    
190
        if ((widthMts <= 0) || (heightMts <= 0) ||
191
                (Integer.parseInt(saveRaster.getTescala().getText()) == 0)) {
192
            saveRaster.getTancho().setText("0");
193
            saveRaster.getTalto().setText("0");
194

    
195
            return;
196
        }
197

    
198
        //Calculo del tama?o de la imagen definitiva en pulgadas
199
        double anchopulgadas = (widthMts / Double.parseDouble(saveRaster.getTescala().getText())) * 39.73007874D;
200
        double altopulgadas = (heightMts / Double.parseDouble(saveRaster.getTescala().getText())) * 39.73007874D;
201

    
202
        //Ancho en pixeles = ppp * sizepulgadas
203
        int anchopixels = (int) (Integer.parseInt(saveRaster.getJComboBox().getSelectedItem().toString()) * 
204
                                                        anchopulgadas);
205
        int altopixels = (int) (Integer.parseInt(saveRaster.getJComboBox().getSelectedItem().toString()) * 
206
                                                        altopulgadas);
207

    
208
        //int anchopixels =(int) (Toolkit.getDefaultToolkit().getScreenResolution() * anchopulgadas);
209
        //int altopixels = (int) (Toolkit.getDefaultToolkit().getScreenResolution() * altopulgadas);
210
        saveRaster.getTancho().setText(String.valueOf(anchopixels));
211
        saveRaster.getTalto().setText(String.valueOf(altopixels));
212
    }
213
    
214
    /**
215
     * Controla cuando se cumplen todos los requisitos en el formulario para
216
     * poder activar el bot?n de aceptar.
217
     */
218
    private void enableButtons() {
219
        if ((saveRaster.getTescala() == null) ||
220
                saveRaster.getTescala().getText().equals("") ||
221
                saveRaster.getTescala().getText().equals("0") ||
222
                (this.fName == null) || this.fName.equals("")) {
223
            if (dialogPanel != null) {
224
                dialogPanel.getAcceptButton().setEnabled(false);
225
            }
226

    
227
            return;
228
        }
229

    
230
        if (saveRaster.getTancho().getText().equals("0") ||
231
                saveRaster.getTalto().getText().equals("0")) {
232
            if (dialogPanel != null) {
233
                dialogPanel.getAcceptButton().setEnabled(false);
234
            }
235

    
236
            return;
237
        }
238

    
239
        if (dialogPanel != null) {
240
            dialogPanel.getAcceptButton().setEnabled(true);
241
        }
242
    }
243

    
244
    /**
245
     * Gestiona los eventos del cambio de escalla de la imagen y lla apertura del
246
     * dialogo de selecci?n del nombre del fichero.
247
     */
248
    public void actionPerformed(ActionEvent e) {
249
        if (e.getSource().equals(saveRaster.getJComboBox()) ||
250
                e.getSource().equals(saveRaster.getTescala()) ||
251
                e.getSource().equals(saveRaster.getTinf_derX()) ||
252
                e.getSource().equals(saveRaster.getTinf_derY()) ||
253
                e.getSource().equals(saveRaster.getTsup_izqX()) ||
254
                e.getSource().equals(saveRaster.getTsup_izqY())) {
255
                this.calcSizeImage();
256
            this.enableButtons();
257
        }
258

    
259
        //Selector de Fichero sobre el cual se va a salvar a raster
260
        if (e.getSource().equals(saveRaster.getBseleccion())) {
261
            JFileChooser chooser = new JFileChooser("./");
262
            chooser.setDialogTitle("Seleccionar el fichero");
263

    
264
            String os = System.getProperties().getProperty("os.version");
265

    
266
            if (os.startsWith("2.4")) {
267
                chooser.addChoosableFileFilter(new WriterFilter(chooser, "ecw"));
268
            }
269

    
270
            chooser.addChoosableFileFilter(new WriterFilter(chooser, "jp2"));
271
            chooser.addChoosableFileFilter(new WriterFilter(chooser, "tif"));
272
            chooser.addChoosableFileFilter(new WriterFilter(chooser, "jpg"));
273
            
274
            int returnVal = chooser.showOpenDialog(this);
275

    
276
            if (returnVal == JFileChooser.APPROVE_OPTION) {
277
                this.fName = chooser.getSelectedFile().toString();
278

    
279
                FileFilter filter = chooser.getFileFilter();
280

    
281
                if ((fName != null) && !fName.equals("")) {
282
                    if (this.fName.endsWith(".ecw") && os.startsWith("2.4")) {
283
                        saveRaster.getBPropiedades().setText("Propiedades Ecw");
284
                    }if (this.fName.endsWith(".jp2")) {
285
                        saveRaster.getBPropiedades().setText("Propiedades Jp2");
286
                    }else if (this.fName.endsWith(".tif")) {
287
                        saveRaster.getBPropiedades().setText("Propiedades GeoTiff");
288
                    }else if (this.fName.endsWith(".jpg") || this.fName.endsWith(".jpeg")) {
289
                        saveRaster.getBPropiedades().setText("Propiedades Jpeg");
290
                    } else if (filter.getDescription().equals(".ecw") && os.startsWith("2.4")) {
291
                        saveRaster.getBPropiedades().setText("Propiedades Ecw");
292
                    } else if (filter.getDescription().equals(".tif")) {
293
                        saveRaster.getBPropiedades().setText("Propiedades GeoTiff");
294
                    }else if (filter.getDescription().equals(".jpg")) {
295
                        saveRaster.getBPropiedades().setText("Propiedades Jpeg");
296
                    }else if (filter.getDescription().equals(".jp2")) {
297
                        saveRaster.getBPropiedades().setText("Propiedades Jp2");
298
                    }
299
                }
300

    
301
                if (!fName.endsWith(".ecw") && 
302
                        !fName.endsWith(".tif") &&
303
                                        !fName.endsWith(".jpg") && 
304
                        !fName.endsWith(".jpeg") && 
305
                        !fName.endsWith(".jp2") ) {
306
                    fName = new String(chooser.getSelectedFile().toString() +
307
                                       filter.getDescription());
308
                }
309

    
310
                enableButtons();
311
            }
312
        }
313
    }
314

    
315
    /**
316
     * Devuelve el nombre del fichero seleccionado
317
     * @return Nombre del fichero seleccionado
318
     */
319
    public String getFileName() {
320
        return fName;
321
    }
322

    
323
    /**
324
     * Unused
325
     */
326
    public void mouseExited(MouseEvent e) {
327
    }
328

    
329
    /**
330
     * Unused. Only for compilant purposes
331
     */
332
    public void mouseReleased(MouseEvent e) {
333
    }
334

    
335
    /**
336
     * Unused. Only for compilant purposes
337
     */
338
    public void mouseEntered(MouseEvent e) {
339
    }
340

    
341
    public void mouseClicked(MouseEvent e) {
342
            this.calcSizeImage();
343
        enableButtons();
344
    }
345

    
346
    /**
347
     * Unused. Only for compilant purposes
348
     */
349
    public void mousePressed(MouseEvent e) {
350
    }
351

    
352
    /**
353
     * Unused. Only for compilant purposes
354
     */
355
    public void focusGained(FocusEvent e) {
356
    }
357

    
358
    /**
359
     * Recalcula el tama?o de la imagen con los datos existentes y
360
     * activa o desactiva los botones.
361
     */
362
    public void focusLost(FocusEvent e) {
363
                   this.calcSizeImage();
364
        enableButtons();
365
    }
366

    
367
    /**
368
     * Activa o Desactiva los botones a trav?s de la funci?n que valida los campos
369
     */
370
    public void keyTyped(KeyEvent e) {
371
        enableButtons();
372
    }
373

    
374
    /**
375
     * Activa o Desactiva los botones a trav?s de la funci?n que valida los campos
376
     */
377
    public void keyPressed(KeyEvent e) {
378
        enableButtons();
379
    }
380

    
381
    /**
382
     * Activa o Desactiva los botones a trav?s de la funci?n que valida los campos
383
     */
384
    public void keyReleased(KeyEvent e) {
385
        enableButtons();
386
    }
387
}
388

    
389
/**
390
 * @author Nacho Brodin <brodin_ign@gva.es>
391
 * Filtro Gdal para el selector de formatos de escritura
392
 */
393
class WriterFilter extends javax.swing.filechooser.FileFilter {
394
    private JFileChooser chooser = null;
395
    private String filter;
396

    
397
    public WriterFilter(JFileChooser ch, String fil) {
398
        this.chooser = ch;
399
        this.filter = fil;
400
    }
401

    
402
    public boolean accept(File f) {
403
        return f.isDirectory() || f.getName().toLowerCase().endsWith("."+filter);
404
    }
405

    
406
    public String getDescription() {
407
        return "."+filter;
408
    }
409
}
410