Statistics
| Revision:

svn-gvsig-desktop / branches / v05 / libraries / libCq CMS for java.old / src / org / cresques / ui / raster / SaveSetupPanel.java @ 4494

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

    
161
        if (ulX > lrX) {
162
            widthMts = ulX - lrX;
163
        } else {
164
                widthMts = lrX - ulX;
165
        }
166

    
167
        double heightMts = 0;
168

    
169
        if (ulY > lrY) {
170
                heightMts = ulY - lrY;
171
        } else {
172
                heightMts = lrY - ulY;
173
        }
174

    
175
        //Nos aseguramos de que la escala sea un entero. Si no lo es ponemos un 0
176
        try {
177
            Integer.parseInt(saveRaster.getTescala().getText());
178
        } catch (NumberFormatException e) {
179
            saveRaster.getTescala().setText("0");
180
        }
181

    
182
        if ((widthMts <= 0) || (heightMts <= 0) ||
183
                (Integer.parseInt(saveRaster.getTescala().getText()) == 0)) {
184
            saveRaster.getTancho().setText("0");
185
            saveRaster.getTalto().setText("0");
186

    
187
            return;
188
        }
189

    
190
        //Calculo del tama?o de la imagen definitiva en pulgadas
191
        double anchopulgadas = (widthMts / Double.parseDouble(saveRaster.getTescala().getText())) * 39.73007874D;
192
        double altopulgadas = (heightMts / Double.parseDouble(saveRaster.getTescala().getText())) * 39.73007874D;
193

    
194
        //Ancho en pixeles = ppp * sizepulgadas
195
        int anchopixels = (int) (Integer.parseInt(saveRaster.getJComboBox().getSelectedItem().toString()) * 
196
                                                        anchopulgadas);
197
        int altopixels = (int) (Integer.parseInt(saveRaster.getJComboBox().getSelectedItem().toString()) * 
198
                                                        altopulgadas);
199

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

    
219
            return;
220
        }
221

    
222
        if (saveRaster.getTancho().getText().equals("0") ||
223
                saveRaster.getTalto().getText().equals("0")) {
224
            if (dialogPanel != null) {
225
                dialogPanel.getAcceptButton().setEnabled(false);
226
            }
227

    
228
            return;
229
        }
230

    
231
        if (dialogPanel != null) {
232
            dialogPanel.getAcceptButton().setEnabled(true);
233
        }
234
    }
235

    
236
    /**
237
     * Gestiona los eventos del cambio de escalla de la imagen y lla apertura del
238
     * dialogo de selecci?n del nombre del fichero.
239
     */
240
    public void actionPerformed(ActionEvent e) {
241
        if (e.getSource().equals(saveRaster.getJComboBox()) ||
242
                e.getSource().equals(saveRaster.getTescala()) ||
243
                e.getSource().equals(saveRaster.getTinf_derX()) ||
244
                e.getSource().equals(saveRaster.getTinf_derY()) ||
245
                e.getSource().equals(saveRaster.getTsup_izqX()) ||
246
                e.getSource().equals(saveRaster.getTsup_izqY())) {
247
                this.calcSizeImage();
248
            this.enableButtons();
249
        }
250

    
251
        //Selector de Fichero sobre el cual se va a salvar a raster
252
        if (e.getSource().equals(saveRaster.getBseleccion())) {
253
            JFileChooser chooser = new JFileChooser("./");
254
            chooser.setDialogTitle("Seleccionar el fichero");
255

    
256
            String os = System.getProperties().getProperty("os.version");
257

    
258
            if (os.startsWith("2.4")) {
259
                chooser.addChoosableFileFilter(new WriterFilter(chooser, "ecw"));
260
            }
261

    
262
            chooser.addChoosableFileFilter(new WriterFilter(chooser, "jp2"));
263
            chooser.addChoosableFileFilter(new WriterFilter(chooser, "tif"));
264
            chooser.addChoosableFileFilter(new WriterFilter(chooser, "jpg"));
265
            
266
            int returnVal = chooser.showOpenDialog(this);
267

    
268
            if (returnVal == JFileChooser.APPROVE_OPTION) {
269
                this.fName = chooser.getSelectedFile().toString();
270

    
271
                FileFilter filter = chooser.getFileFilter();
272

    
273
                if ((fName != null) && !fName.equals("")) {
274
                    if (this.fName.endsWith(".ecw") && os.startsWith("2.4")) {
275
                        saveRaster.getBPropiedades().setText("Propiedades Ecw");
276
                    }if (this.fName.endsWith(".jp2")) {
277
                        saveRaster.getBPropiedades().setText("Propiedades Jp2");
278
                    }else if (this.fName.endsWith(".tif")) {
279
                        saveRaster.getBPropiedades().setText("Propiedades GeoTiff");
280
                    }else if (this.fName.endsWith(".jpg") || this.fName.endsWith(".jpeg")) {
281
                        saveRaster.getBPropiedades().setText("Propiedades Jpeg");
282
                    } else if (filter.getDescription().equals(".ecw") && os.startsWith("2.4")) {
283
                        saveRaster.getBPropiedades().setText("Propiedades Ecw");
284
                    } else if (filter.getDescription().equals(".tif")) {
285
                        saveRaster.getBPropiedades().setText("Propiedades GeoTiff");
286
                    }else if (filter.getDescription().equals(".jpg")) {
287
                        saveRaster.getBPropiedades().setText("Propiedades Jpeg");
288
                    }else if (filter.getDescription().equals(".jp2")) {
289
                        saveRaster.getBPropiedades().setText("Propiedades Jp2");
290
                    }
291
                }
292

    
293
                if (!fName.endsWith(".ecw") && 
294
                        !fName.endsWith(".tif") &&
295
                                        !fName.endsWith(".jpg") && 
296
                        !fName.endsWith(".jpeg") && 
297
                        !fName.endsWith(".jp2") ) {
298
                    fName = new String(chooser.getSelectedFile().toString() +
299
                                       filter.getDescription());
300
                }
301

    
302
                enableButtons();
303
            }
304
        }
305
    }
306

    
307
    /**
308
     * Devuelve el nombre del fichero seleccionado
309
     * @return Nombre del fichero seleccionado
310
     */
311
    public String getFileName() {
312
        return fName;
313
    }
314

    
315
    /**
316
     * Unused
317
     */
318
    public void mouseExited(MouseEvent e) {
319
    }
320

    
321
    /**
322
     * Unused. Only for compilant purposes
323
     */
324
    public void mouseReleased(MouseEvent e) {
325
    }
326

    
327
    /**
328
     * Unused. Only for compilant purposes
329
     */
330
    public void mouseEntered(MouseEvent e) {
331
    }
332

    
333
    public void mouseClicked(MouseEvent e) {
334
            this.calcSizeImage();
335
        enableButtons();
336
    }
337

    
338
    /**
339
     * Unused. Only for compilant purposes
340
     */
341
    public void mousePressed(MouseEvent e) {
342
    }
343

    
344
    /**
345
     * Unused. Only for compilant purposes
346
     */
347
    public void focusGained(FocusEvent e) {
348
    }
349

    
350
    /**
351
     * Recalcula el tama?o de la imagen con los datos existentes y
352
     * activa o desactiva los botones.
353
     */
354
    public void focusLost(FocusEvent e) {
355
                   this.calcSizeImage();
356
        enableButtons();
357
    }
358

    
359
    /**
360
     * Activa o Desactiva los botones a trav?s de la funci?n que valida los campos
361
     */
362
    public void keyTyped(KeyEvent e) {
363
        enableButtons();
364
    }
365

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

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

    
381
/**
382
 * @author Nacho Brodin <brodin_ign@gva.es>
383
 * Filtro Gdal para el selector de formatos de escritura
384
 */
385
class WriterFilter extends javax.swing.filechooser.FileFilter {
386
    private JFileChooser chooser = null;
387
    private String filter;
388

    
389
    public WriterFilter(JFileChooser ch, String fil) {
390
        this.chooser = ch;
391
        this.filter = fil;
392
    }
393

    
394
    public boolean accept(File f) {
395
        return f.isDirectory() || f.getName().toLowerCase().endsWith("."+filter);
396
    }
397

    
398
    public String getDescription() {
399
        return "."+filter;
400
    }
401
}
402