Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / Panels / PropertiesRasterDialog.java @ 2567

History | View | Annotate | Download (27.4 KB)

1 2183 fernando
/*
2
 * Created on 17-feb-2004
3
 *
4
 * To change the template for this generated file go to
5
 * Window>Preferences>Java>Code Generation>Code and Comments
6
 */
7
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
8
 *
9
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
10
 *
11
 * This program is free software; you can redistribute it and/or
12
 * modify it under the terms of the GNU General Public License
13
 * as published by the Free Software Foundation; either version 2
14
 * of the License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 * along with this program; if not, write to the Free Software
23
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
24
 *
25
 * For more information, contact:
26
 *
27
 *  Generalitat Valenciana
28
 *   Conselleria d'Infraestructures i Transport
29
 *   Av. Blasco Ib??ez, 50
30
 *   46010 VALENCIA
31
 *   SPAIN
32
 *
33
 *      +34 963862235
34
 *   gvsig@gva.es
35
 *      www.gvsig.gva.es
36
 *
37
 *    or
38
 *
39
 *   IVER T.I. S.A
40
 *   Salamanca 50
41
 *   46005 Valencia
42
 *   Spain
43
 *
44
 *   +34 963163400
45
 *   dac@iver.es
46
 */
47
package com.iver.cit.gvsig.gui.Panels;
48
49
import java.awt.Container;
50
import java.awt.event.ActionEvent;
51
import java.awt.geom.Rectangle2D;
52
import java.io.File;
53
import java.util.ArrayList;
54
import java.util.Vector;
55
56
import javax.swing.JFileChooser;
57
import javax.swing.JOptionPane;
58
import javax.swing.JPanel;
59
import javax.swing.filechooser.FileFilter;
60 2233 igbrotru
import javax.swing.table.JTableHeader;
61 2183 fernando
62
import org.cresques.cts.IProjection;
63
import org.cresques.io.GeoRasterFile;
64
import org.cresques.io.raster.RasterFilterStackManager;
65
import org.cresques.px.Extent;
66
import org.cresques.ui.raster.BandSetupPanel;
67
import org.cresques.ui.raster.EnhancedPanel;
68
import org.cresques.ui.raster.FilterRasterDialogPanel;
69
import org.cresques.ui.raster.RasterTransparencyPanel;
70
71
import com.hardcode.driverManager.Driver;
72
import com.hardcode.driverManager.DriverLoadException;
73
import com.iver.andami.PluginServices;
74
import com.iver.andami.messages.NotificationManager;
75
import com.iver.andami.ui.mdiManager.View;
76
import com.iver.andami.ui.mdiManager.ViewInfo;
77
import com.iver.cit.gvsig.fmap.drivers.RasterDriver;
78
import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
79
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
80
import com.iver.cit.gvsig.fmap.layers.StatusLayerRaster;
81
82
/**
83
 * <P>
84
 * Dialogo para las propiedades de un raster. Esta maneja los eventos y aplica
85
 * filtros sobre el raster a trav?s de l gestor de la pila de filtros seg?n la
86
 * selecci?n del usuario. Este dialogo contiene varios paneles:
87
 * </P>
88
 * <UL>
89
 * <LI>Propiedades</LI>
90
 * <LI>Selecci?n de bandas</LI>
91
 * <LI>Transparencia</LI>
92
 * <LI>Realce</LI>
93
 * </UL>
94
 * @author Nacho Brodin <brodin_ign@gva.es>
95
 */
96
public class PropertiesRasterDialog extends FilterRasterDialogPanel implements View {
97
98
        private JPanel                                                                        propPanel = null;
99
        private IProjection                                                         currentProjection = null;
100
        private FLyrRaster                                                                 fLayer = null;
101
        private static final int                                                nprops = 11;
102
        private Object[][]                                                                props = null;
103
        private RasterFilterStackManager                                 stackManager = null;
104
        private Status                                                                        status = null;
105
        private String                                                                         filename = null;
106
        private        long                                                                         filesize = 0;
107
        private        int                                                                         width = 0;
108
        private        int                                                                         height = 0;
109
        private JFileChooser                                                        fileChooser = null;
110
        private String                                                                        lastPath = new String("./");
111
        private StatusLayerRaster                                                rasterStatus = null;
112
        private int                                                                                sizeX = 486, sizeY = 318;
113
114
        /**
115
         * Clase que guarda el estado del dialogo y gestiona la restauraci?n
116
         * del estado inicial en caso de cancelar.
117
         * @author Nacho Brodin <brodin_ign@gva.es>
118
         */
119
        class Status{
120
                public String                                        inicAlpha;
121
                public int                                                 bandR;
122
                public int                                                 bandG;
123
                public int                                                 bandB;
124
                private ArrayList                                filesAdd = new ArrayList();
125
                private ArrayList                                filesRem = new ArrayList();
126
                private ArrayList                                filters = null;
127
128
129
                public Status(String alpha, int bandR, int bandG, int bandB){
130
                        this.inicAlpha = alpha;
131
                        this.bandR = bandR;
132
                        this.bandG = bandG;
133
                        this.bandB = bandB;
134
                        filters = stackManager.getStringsFromStack();
135
                }
136
137
                /**
138
                 * A?ade un fichero  a la lista de a?adidos. Si estaba en la de eliminados
139
                 * lo quitamos.
140
                 * @param file Fichero a?adido
141
                 */
142
                public void addFile(String file){
143
                        filesAdd.add(file);
144
                        for(int j=0;j<filesRem.size();j++){
145
                                if(file.equals((String)filesRem.get(j)))
146
                                                filesRem.remove(j);
147
                        }
148
149
                }
150
151
                /**
152
                 * Elimina un fichero de la lista de a?adidos si ha sido a?adido. Si ya estaba
153
                 * antes no estar? en la lista de a?adidos por lo que habr? que ponerlo en la
154
                 * lista de eliminados.
155
                 * @param file        Fichero eliminado
156
                 */
157
                public void removeFile(String file){
158
                        boolean isAdd = false;
159
                        for(int i=0;i<filesAdd.size();i++){
160
                                if(((String)filesAdd.get(i)).equals(file)){
161
                                        filesAdd.remove(i);
162
                                        isAdd =  true;
163
                                }
164
                        }
165
                        if(!isAdd)
166
                                filesRem.add(file);
167
168
                }
169
170
                /**
171
                 * Restaura el Estado salvado
172
                 * @param status Estado
173
                 */
174
                public void restoreStatus(PropertiesRasterDialog props){
175
                        //Devolvemos la pila de filtros al estado inicial
176
                        //if(stackManager != null)
177
                        //        stackManager.deleteTempFilters();
178
179
                        //Devolvemos el alpha al estado inicial
180
                        int opac = Integer.parseInt(status.inicAlpha);
181
                        opac = (int)((opac*255)/100);
182
                        fLayer.getSource().setTransparency(true);
183
                        fLayer.setTransparency(255-opac);
184
                        rasterStatus.transparency = 255-opac;
185
186
                        //Devolvemos el estado inicial de las bandas
187
188
                        if (fLayer != null) {
189
                                fLayer.getSource().setBand(GeoRasterFile.RED_BAND, status.bandR);
190
                                fLayer.getSource().setBand(GeoRasterFile.GREEN_BAND, status.bandG);
191
                                fLayer.getSource().setBand(GeoRasterFile.BLUE_BAND, status.bandB);
192
                                rasterStatus.bandR = status.bandR;
193
                                rasterStatus.bandG = status.bandG;
194
                                rasterStatus.bandB = status.bandB;
195
                        }
196
197
                        BandSetupPanel bandSetup = ((FilterRasterDialogPanel)props.getContentPane()).getBandSetup();
198
199
                        //Los que han sido a?adidos los quitamos
200
                        for(int i=0;i<filesAdd.size();i++)
201
                                fLayer.delFile((String)this.filesAdd.get(i));
202
203
                        //Los que fueron quitados los a?adimos
204
                        for(int i=0;i<filesRem.size();i++)
205
                                fLayer.addFiles((String)this.filesRem.get(i));
206
207
                        //Restauramos los filtros
208
                        if(filters!=null)
209
                                stackManager.createStackFromStrings(filters);
210
211
                        fLayer.getFMap().invalidate();
212
                        //this.show();
213
                }
214
215
                public void show(){
216
                        System.out.println("***Lista A?adidos***");
217
                        for(int i=0;i<filesAdd.size();i++){
218
                                System.out.println(filesAdd.get(i).toString());
219
                        }
220
                        System.out.println("***Lista Eliminados***");
221
                        for(int i=0;i<filesRem.size();i++){
222
                                System.out.println(filesRem.get(i).toString());
223
                        }
224
                        System.out.println("*********************");
225
                }
226
227
        }
228
229
        public class DriverFileFilter extends FileFilter{
230
231
                private Driver driver;
232
233
                public DriverFileFilter(String driverName) throws DriverLoadException{
234
                        driver = LayerFactory.getDM().getDriver(driverName);
235
                }
236
237
                /**
238
                 * @see javax.swing.filechooser.FileFilter#accept(java.io.File)
239
                 */
240
                public boolean accept(File f) {
241
                        if (f.isDirectory()) return true;
242
                        if (driver instanceof RasterDriver){
243
                                return ((RasterDriver) driver).fileAccepted(f);
244
                        }else{
245
                                throw new RuntimeException("Tipo no reconocido");
246
                        }
247
                }
248
249
                /**
250
                 * @see javax.swing.filechooser.FileFilter#getDescription()
251
                 */
252
                public String getDescription() {
253
                        return ((Driver) driver).getName();
254
                }
255
        }
256
257
        /**
258
         * Constructor de la ventana de dialogo.
259
         * @param app
260
         */
261
        public PropertiesRasterDialog(FLyrRaster layer, int[][] rangeR, int[][] rangeG, int[][] rangeB){
262
                super();
263
                fLayer = layer;
264
                if(fLayer.getStatus()==null){
265
                        rasterStatus = new StatusLayerRaster();
266
                        fLayer.setStatus(rasterStatus);
267
                }else
268
                        rasterStatus = (StatusLayerRaster)fLayer.getStatus();
269
                initialize();
270
                this.setRanges(rangeR, rangeG, rangeB);
271
                setTranslation();
272
        }
273
274
        /**
275
         * Asigna los textos a los paneles
276
         */
277
        private void setTranslation(){
278
                this.getBandSetup().getFileList().getJButton2().setText(PluginServices.getText(this,"Anadir"));
279
                this.getBandSetup().getFileList().getJButton3().setText(PluginServices.getText(this,"Eliminar"));
280 2376 igbrotru
                this.getBandSetup().getFileList().bandasVisibles.setText(PluginServices.getText(this,"bandas"));
281 2183 fernando
282
                RasterTransparencyPanel tpan = this.getTransparencyPanel();
283 2252 igbrotru
284
                tpan.greenValue.setText(PluginServices.getText(this,"Valor_verde")+":");
285
                tpan.redValue.setText(PluginServices.getText(this,"Valor_rojo")+":");
286
                tpan.blueValue.setText(PluginServices.getText(this,"Valor_azul")+":");
287 2183 fernando
                tpan.getTransparencyCheck().setText(PluginServices.getText(this,"transparencia"));
288
                tpan.getOpacityCheck().setText(PluginServices.getText(this,"opacidad"));
289 2252 igbrotru
                tpan.range.setText(PluginServices.getText(this,"usar_rango")+": 1,3,5:8");
290 2183 fernando
                tpan.jLabel4.setText(PluginServices.getText(this,"valor_pixel")+": 0 a 255");
291
292
                EnhancedPanel ep = this.getEnhancedPanel();
293
                ep.jLabel.setText(PluginServices.getText(this,"lineal_directo"));
294
                ep.jLabel1.setText(PluginServices.getText(this,"recorte_colas"));
295
                ep.jLabel2.setText(PluginServices.getText(this,"sin_realce"));
296
                ep.jLabel4.setText("% "+PluginServices.getText(this,"recorte"));
297
                ep.jLabel5.setText(PluginServices.getText(this,"eliminar_extremos"));
298
299
                //Recorremos los Tab y traducimos el nombre
300
                for(int i=0;i<this.getTab().getTabCount();i++){
301
                        if(this.getTab().getTitleAt(i).equals("Info"))
302 2532 nacho
                                this.getTab().setTitleAt(i,PluginServices.getText(this,"info"));
303 2183 fernando
                        if(this.getTab().getTitleAt(i).equals("Transparencia"))
304
                                this.getTab().setTitleAt(i,PluginServices.getText(this,"Transparencia"));
305
                        if(this.getTab().getTitleAt(i).equals("Bandas"))
306 2532 nacho
                                this.getTab().setTitleAt(i,PluginServices.getText(this,"bandas"));
307 2183 fernando
                        if(this.getTab().getTitleAt(i).equals("Realce"))
308
                                this.getTab().setTitleAt(i,PluginServices.getText(this,"realce"));
309
                }
310 2532 nacho
311
                this.getAcceptButton().setText(PluginServices.getText(this,"Aceptar"));
312
                this.getApplyButton().setText(PluginServices.getText(this,"Aplicar"));
313
                this.getCancelButton().setText(PluginServices.getText(this,"Cancelar"));
314 2183 fernando
        }
315
316
        /**
317
         * Asigna un FLayerRaster
318
         * @param layer        capa a asignar
319
         */
320
        public void setFLyrRaster(FLyrRaster layer){
321
                fLayer = layer;
322
        }
323
324
        /**
325
         * Constructor de la ventana de dialogo.
326
         */
327
        public PropertiesRasterDialog() {
328
                initialize();
329
        }
330
331
332
333
        /**
334
         * Carga los datos del panel info.
335
         */
336
        private void loadInfoData(){
337
                if(fLayer.getSource()!=null){
338
                        props = new Object[nprops][2];
339 2233 igbrotru
                        props[0][0] = new String(PluginServices.getText(this,"Fichero")+":");
340 2183 fernando
                        props[0][1] = filename;
341 2233 igbrotru
                        props[1][0] = new String(PluginServices.getText(this,"num_bandas")+":");
342 2183 fernando
                        props[1][1] = new String(String.valueOf(fLayer.getSource().getNumBands()));
343 2233 igbrotru
                        props[2][0] = new String(PluginServices.getText(this,"ancho_alto")+":");
344 2183 fernando
                        props[2][1] = this.width+" X "+this.height;
345 2233 igbrotru
                        props[3][0] = new String(PluginServices.getText(this,"formato")+":");
346 2183 fernando
                        props[3][1] = filename.substring(
347
                                                filename.lastIndexOf('.')+1,
348
                                                filename.length());
349 2233 igbrotru
                        props[4][0] = new String(PluginServices.getText(this,"tipo_dato")+":");
350 2183 fernando
                        String type = null;
351
                        switch(fLayer.getSource().getDataType()){
352
                                case 0: type = new String("BYTE");break;
353
                                case 1: type = new String("USHORT");break;
354
                                case 2: type = new String("SHORT");break;
355
                                case 3: type = new String("INT");break;
356
                                case 4: type = new String("FLOAT");break;
357
                                case 5: type = new String("DOUBLE");break;
358
                                default: type = new String("UNDEFINED");break;
359
                        }
360
                    props[4][1] = type;
361
                        props[5][0] = new String(PluginServices.getText(this,"coor_geograficas"));
362 2233 igbrotru
                        props[6][0] = new String(PluginServices.getText(this,"xmin")+":");
363 2183 fernando
                        props[6][1] = String.valueOf(fLayer.getSource().getFullExtent().getMinX());
364 2233 igbrotru
                        props[7][0] = new String(PluginServices.getText(this,"ymin")+":");
365 2183 fernando
                        props[7][1] = String.valueOf(fLayer.getSource().getFullExtent().getMinY());
366 2233 igbrotru
                        props[8][0] = new String(PluginServices.getText(this,"xmax")+":");
367 2183 fernando
                        props[8][1] = String.valueOf(fLayer.getSource().getFullExtent().getMaxX());
368 2233 igbrotru
                        props[9][0] = new String(PluginServices.getText(this,"ymax")+":");
369 2183 fernando
                        props[9][1] = String.valueOf(fLayer.getSource().getFullExtent().getMaxY());
370
371
                }else{
372
                        props = new Object[1][2];
373
                        props[0][0] = new String("No props");
374
                        props[0][1] = new String("-");
375
                }
376
377
        }
378
379 2233 igbrotru
        /**
380
         * A?ade bandas al contador de bandas del FilterRasterDialogPanel
381
         * @param numBands N?mero de bandas a a?adir
382
         */
383 2183 fernando
        public void addNumBands(int numBands){
384
                nbands += numBands;
385 2233 igbrotru
                if(this.getTransparencyPanel() != null && this.getTransparencyPanel().getTRojo().isEnabled())
386
                        this.getTransparencyPanel().setActiveTransparencyControl(true);
387 2183 fernando
        }
388
389
        /**
390
         * Inicializa el jDialog
391
         */
392
        private void initialize() {
393
394
                //this.setLayout(new FlowLayout());
395
396
                setName("filterRaster");
397
                ArrayList attr = ((FLyrRaster)fLayer).getSource().getAttributes();
398
                   for (int i=0; i<attr.size(); i++) {
399
                        Object[] a = (Object []) attr.get(i);
400
                        if(a[0].toString().equals("Filename"))
401
                                filename = a[1].toString();
402
                        if(a[0].toString().equals("Filesize"))
403
                                filesize = ((Long)a[1]).intValue();
404
                        if(a[0].toString().equals("Width"))
405
                                width = ((Integer)a[1]).intValue();
406
                        if(a[0].toString().equals("Height"))
407
                                height = ((Integer)a[1]).intValue();
408
                }
409
410
                   this.loadInfoData();
411
                super.init(props);
412 2233 igbrotru
413
                this.getInfoPanel().columnNames[0] = PluginServices.getText(this,"propiedad");
414
                this.getInfoPanel().columnNames[1] = PluginServices.getText(this,"Valor");
415
                this.getInfoPanel().resetTable();
416
                this.getInfoPanel().initialize();
417
418 2183 fernando
                //this.add(getContentPane());
419
420
                this.setSize(this.sizeX, this.sizeY);
421
422
                //contentPane.getAcceptButton().setEnabled(false);
423
                this.getAcceptButton().addActionListener(new java.awt.event.ActionListener() {
424
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
425
                                acceptButtonActionPerformed(evt);
426
                                //Solo cuando le damos a aceptar guardamos la situaci?n actual de los
427
                                //ficheros cargados en el StatusLayerRaster
428
                                if(rasterStatus!=null){
429
                                        ArrayList rs = new ArrayList();
430
                                        for(int i=0;i<fLayer.getSource().getFiles().length;i++)
431
                                                rs.add(fLayer.getSource().getFiles()[i].getName());
432
                                        rasterStatus.files = rs;
433
                                }
434
                                closeJDialog();
435
                        }
436
                });
437
                this.getCancelButton().addActionListener(new java.awt.event.ActionListener() {
438
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
439
                                cancelButtonActionPerformed(evt);
440
                                closeJDialog();
441
                        }
442
                });
443
                this.getApplyButton().addActionListener(new java.awt.event.ActionListener() {
444
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
445
                                acceptButtonActionPerformed(evt);
446
                        }
447
                });
448
                this.getBandSetup().getFileList().getJButton2().addActionListener(new java.awt.event.ActionListener() {
449
                        public void actionPerformed(java.awt.event.ActionEvent evt){
450
                                addFileBand(evt);
451
452
                        }
453
                });
454
                this.getBandSetup().getFileList().getJButton3().addActionListener(new java.awt.event.ActionListener() {
455
                        public void actionPerformed(java.awt.event.ActionEvent evt){
456
                                delFileBand(evt);
457
                        }
458
                });
459
460
461
        }
462
463
        /**
464
         * Salva el estado inicial por si se cancela
465
         */
466
        public void readStat(){
467
                status = new Status(((FilterRasterDialogPanel)this).getTransparencyPanel().getOpacityText().getText(),
468
                                                        getAssignedBand(GeoRasterFile.RED_BAND),
469
                                                        getAssignedBand(GeoRasterFile.GREEN_BAND),
470
                                                        getAssignedBand(GeoRasterFile.BLUE_BAND));
471
        }
472
473
        /**
474
         * This method initializes jContentPane
475
         */
476
        public Container getContentPane() {
477
                return this;
478
        }
479
480
        /**
481
         * Asigna una proyecci?n
482
         * @param prj
483
         */
484
        public void setProjection(IProjection prj) {
485
                this.currentProjection = prj;
486
        }
487
488
489
490
        public void closeJDialog() {
491
                PluginServices.getMDIManager().closeView(PropertiesRasterDialog.this);
492
        }
493
494
        /**
495
         * Asigna el RasterFilterStackManager
496
         * @param stackManager
497
         */
498
        public void setRasterFilterStackManager(RasterFilterStackManager stackManager){
499
                this.stackManager = stackManager;
500
                stackManager.resetTempFilters();
501
        }
502
503
        /**
504
         *
505
         * @param flag
506
         * @return
507
         */
508
        public int getAssignedBand(int flag) {
509
                return this.getBandSetup().getAssignedBand(flag);
510
        }
511
512
        /**
513 2365 igbrotru
         * Obtiene las bandas que el usuario ha seleccionado que son visibles.
514
         * Devuelve una cadena: RGB, R, G, B, RG, RB, GB
515
         * @return Bandas visibles
516
         */
517
        public String getVisibleBands(){
518
                return this.getBandSetup().getFileList().getJComboBox().getSelectedItem().toString();
519
        }
520
521
        /**
522 2183 fernando
         * Pulsar aceptar con el panel de bandas seleccionado hace que se procesen los valores
523
         * introducidos en este.
524
         * @return true si estaba seleccionado el panel de bandas y se ha procesado la
525
         * acci?n y false si no lo estaba.
526
         */
527
        public boolean processBandPanel(){
528
                if(this.getTab().getSelectedComponent() == this.getBandSetup()){
529
                        fLayer.getSource().setBand(GeoRasterFile.RED_BAND,
530
                                                getAssignedBand(GeoRasterFile.RED_BAND));
531
                        fLayer.getSource().setBand(GeoRasterFile.GREEN_BAND,
532
                                                getAssignedBand(GeoRasterFile.GREEN_BAND));
533
                        fLayer.getSource().setBand(GeoRasterFile.BLUE_BAND,
534
                                                getAssignedBand(GeoRasterFile.BLUE_BAND));
535
                        rasterStatus.bandR = getAssignedBand(GeoRasterFile.RED_BAND);
536
                        rasterStatus.bandG = getAssignedBand(GeoRasterFile.GREEN_BAND);
537
                        rasterStatus.bandB = getAssignedBand(GeoRasterFile.BLUE_BAND);
538 2365 igbrotru
539
                        //Comprobamos si hay alguna banda que no est? asignada y aplicamos el filtro
540
                        StringBuffer sb = new StringBuffer();
541
                        if(getAssignedBand(GeoRasterFile.RED_BAND) == -1)
542
                                sb.append("R");
543
                        if(getAssignedBand(GeoRasterFile.GREEN_BAND) == -1)
544
                                sb.append("G");
545
                        if(getAssignedBand(GeoRasterFile.BLUE_BAND) == -1)
546
                                sb.append("B");
547
548
                        if(!sb.toString().equals(""))
549
                                stackManager.addRemoveBands(sb.toString());
550
                        else
551
                                stackManager.removeFilter(stackManager.getTypeFilter("removebands"));
552 2183 fernando
                        fLayer.getFMap().invalidate();
553
                        return true;
554
                }
555
                return false;
556
        }
557
558
        /**
559
         * Pulsar aceptar con el panel de transparecias seleccionado hace que se procesen los valores
560
         * introducidos en este.
561
         * @return true si estaba seleccionado el panel de transparencias y se ha procesado la
562
         * acci?n y false si no lo estaba.
563
         */
564
        public boolean processTransparencyPanel(){
565
566
                if(this.getTab().getSelectedComponent() == this.getTransparencyPanel()){
567
568
                        //OPACIDAD
569
                        String sOpac = this.getTransparencyPanel().getOpacityText().getText();
570
                        if(!sOpac.equals("") && this.getTransparencyPanel().getOpacityCheck().isSelected()){
571
                                int opac = Integer.parseInt(sOpac);
572
                                opac = (int)((opac*255)/100);
573
                                fLayer.getSource().setTransparency(true);
574
                                fLayer.setTransparency(255-opac);
575
                                rasterStatus.transparency = 255-opac;
576
                        }else{
577
                                fLayer.getSource().setTransparency(false);
578
                                fLayer.setTransparency(0);
579
                                rasterStatus.transparency = 0;
580
                        }
581
582
                        //TRANSPARENCIA
583
                        if(        this.getTransparencyPanel().getTransparencyCheck().isSelected()){
584
                                this.checkTransparencyValues();
585
                                stackManager.addTransparencyFilter(        this.getRangeRed(),
586
                                                                                                        this.getRangeGreen(),
587
                                                                                                        this.getRangeBlue(),
588
                                                                                                        0x10,        //Transparencia
589
                                                                                                        0xff,        //Color Transparencia R
590
                                                                                                        0xff,        //Color Transparencia G
591
                                                                                                        0xff);        //Color Transparencia B
592
                        }else{
593
                                fLayer.getSource().getFilterStack().removeFilter(stackManager.getTypeFilter("transparency"));
594
                        }
595
596
                        return true;
597
                }
598
599
                return false;
600
        }
601
602
        /**
603
         * Pulsar aceptar con el panel de realce seleccionado hace que se procesen los valores
604
         * introducidos en este.
605
         * @return true si estaba seleccionado el panel de realce y se ha procesado la
606
         * acci?n y false si no lo estaba.
607
         */
608
        public boolean processEnhancedPanel(){
609
                if(this.getTab().getSelectedComponent() == this.getEnhancedPanel()){
610
611
                        //Filtro lineal seleccionado
612
                        if(        this.getEnhancedPanel().getLinealDirectoRadioButton().isSelected()){
613
                                if(        this.getEnhancedPanel().getRemoveCheck().isSelected() &&
614
                                        !this.getEnhancedPanel().getTailCheck().isSelected())
615
                                        stackManager.addEnhancedFilter(true, fLayer.getSource().getFiles()[0].getName());
616
                                else
617
                                        stackManager.addEnhancedFilter(false, fLayer.getSource().getFiles()[0].getName());
618
619
                                //Recorte de colas seleccionado
620
                                if(this.getEnhancedPanel().getTailCheck().isSelected()){
621
                                        stackManager.removeFilter(stackManager.getTypeFilter("computeminmax"));
622
                                        double recorte = Double.parseDouble(this.getEnhancedPanel().getTailText().getText())/100;
623
                                        if(this.getEnhancedPanel().getRemoveCheck().isSelected())
624
                                                stackManager.addTailFilter( recorte, 0D, true);
625
                                        else
626
                                                stackManager.addTailFilter( recorte, 0D, false);
627
                                }else{
628
                                        stackManager.removeFilter(stackManager.getTypeFilter("tail"));
629
                                        stackManager.addComputeMinMaxFilter();
630
                                }
631
                        }
632
633
                        //Sin filtro lineal seleccionado
634
                        if(this.getEnhancedPanel().getSinRealceRadioButton().isSelected()){
635
                                stackManager.removeFilter(stackManager.getTypeFilter("computeminmax"));
636
                                stackManager.removeFilter(stackManager.getTypeFilter("tail"));
637
                                stackManager.removeFilter(stackManager.getTypeFilter("enhanced"));
638
                        }
639
                        fLayer.getFMap().invalidate();
640
641
                        return true;
642
                }
643
                return false;
644
        }
645
646
        /**
647
         * Gestiona la acci?n cuando se pulsa aplicar/aceptar o aplicar en el control
648
         * de propiedades de raster
649
         * @param e
650
         */
651
        private void acceptButtonActionPerformed(ActionEvent e) {
652
                this.processBandPanel();
653
                this.processTransparencyPanel();
654
                this.processEnhancedPanel();
655
        }
656
657
        /**
658
         * A?ade una banda al raster
659
         * @param e
660
         */
661
        private void addFileBand(ActionEvent e){
662
                String[] driverNames = null;
663
                String rasterDriver = null;
664
665
                //Creaci?n del dialogo para selecci?n de ficheros
666
667
                fileChooser = new JFileChooser(lastPath);
668
                fileChooser.setMultiSelectionEnabled(true);
669
                fileChooser.setAcceptAllFileFilterUsed(false);
670
        try {
671
                        driverNames = LayerFactory.getDM().getDriverNames();
672
                        FileFilter defaultFileFilter = null, auxF;
673
                        for (int i = 0; i < driverNames.length; i++) {
674
675
                                if (driverNames[i].endsWith("gvSIG Image Driver")){
676
                                        rasterDriver = driverNames[i];
677
                                    auxF = new DriverFileFilter(driverNames[i]);
678
                                        fileChooser.addChoosableFileFilter(auxF);
679
                                        defaultFileFilter = auxF;
680
                                }
681
                        }
682
                } catch (DriverLoadException e1) {
683
                        NotificationManager.addError("No se pudo acceder a los drivers", e1);
684
                }
685
                int result = fileChooser.showOpenDialog(PropertiesRasterDialog.this);
686
687
                if(result == JFileChooser.APPROVE_OPTION){
688
                        File[] files = fileChooser.getSelectedFiles();
689
                         FileFilter filter = fileChooser.getFileFilter();
690
                         BandSetupPanel bandSetup = ((FilterRasterDialogPanel)this.getContentPane()).getBandSetup();
691
                         lastPath = files[0].getPath();
692
693
                         //Lo a?adimos a la capa si no esta
694
695
                         Vector v = new Vector();
696
            for(int i=0;i<files.length;i++){
697
698
                    //Comprobamos que el fichero no est?
699
                    boolean exist = false;
700
                    for(int j=0;j<fLayer.getSource().getFiles().length;j++){
701
                            if(fLayer.getSource().getFiles()[j].getName().endsWith(files[i].getName()))
702
                                    exist = true;
703
                    }
704
                    if(!exist){
705
                            try{
706
                                    Rectangle2D extentOrigin = fLayer.getFullExtent();
707
708
                                    GeoRasterFile geoRasterFile = GeoRasterFile.openFile(fLayer.getProjection(), files[i].getAbsolutePath());
709
                                    Extent extentNewFile = geoRasterFile.getExtent();
710
                                    nbands += geoRasterFile.getBandCount();
711
712
                                                //Comprobamos que el extent y tama?o del fichero a?adido sea igual al
713
                                                //fichero original. Si no es as? no abrimos la capa y mostramos un aviso
714
715
                                    double widthNewFile = (extentNewFile.getMax().getX()-extentNewFile.getMin().getX());
716
                                    double heightNewFile = (extentNewFile.getMax().getY()-extentNewFile.getMin().getY());
717
718
                                    if( (widthNewFile-extentOrigin.getWidth()) > 1.0 ||
719
                                            (widthNewFile-extentOrigin.getWidth()) < -1.0 ||
720
                                            (heightNewFile-extentOrigin.getHeight()) > 1.0 ||
721
                                            (heightNewFile-extentOrigin.getHeight()) < -1.0){
722
                                            JOptionPane.showMessageDialog(        null,
723
                                                                                                            PluginServices.getText(this, "extents_no_coincidentes"),
724
                                                                                                                        "",
725
                                                                                                                        JOptionPane.ERROR_MESSAGE);
726
                                            return;
727
                                    }
728
729
                                    if(        (extentNewFile.getMax().getX()-extentNewFile.getMin().getX())!=extentOrigin.getWidth() ||
730
                                                                (extentNewFile.getMax().getY()-extentNewFile.getMin().getY())!=extentOrigin.getHeight()        ){
731
                                            JOptionPane.showMessageDialog(null,
732
                                                                        PluginServices.getText(this, "extents_no_coincidentes"), "", JOptionPane.ERROR_MESSAGE);
733
                                                        return;
734
                                    }
735
736
                            }catch(Exception exc){
737
                                    exc.printStackTrace();
738
                            }
739
740
                            //Lo a?adimos a la capa
741
                            fLayer.addFiles(files[i].getAbsolutePath());
742
                            //Mantiene la lista de ficheros a?adidos por si se cancela
743
                            status.addFile(files[i].getAbsolutePath());
744
745
746
                    }else{
747
                            JOptionPane.showMessageDialog(null,
748
                                                        PluginServices.getText(this, "fichero_existe")+" "+files[i].getAbsolutePath(), "", JOptionPane.ERROR_MESSAGE);
749
                    }
750
            }
751
752
            //A?adimos los georasterfile a la tabla del Panel
753
754
            v = new Vector();
755
            for(int i=0;i<fLayer.getSource().getFiles().length;i++){
756
                    boolean exist = false;
757
                    for(int j=0;j<bandSetup.getNBands();j++){
758
                            if(fLayer.getSource().getFiles()[i].getName().endsWith(bandSetup.getBandName(j)))
759
                                    exist = true;
760
                    }
761
                    if(!exist)
762
                            v.add(fLayer.getSource().getFiles()[i]);
763
            }
764
765
            GeoRasterFile[] grf = new GeoRasterFile[v.size()];
766
            for(int i=0;i<grf.length;i++){
767
                    grf[i] = (GeoRasterFile)v.get(i);
768
            }
769
            bandSetup.addFiles(grf);
770
                }
771
        }
772
773
        /**
774
         * Elimina una banda del raster. Si queda solo un fichero o no se ha
775
         * seleccionado ninguna banda no hace nada.
776
         * @param e
777
         */
778
        private void delFileBand(ActionEvent e){
779
                BandSetupPanel bandSetup = ((FilterRasterDialogPanel)this.getContentPane()).getBandSetup();
780
781
                if(        bandSetup.getFileList().getJList().getSelectedValue()!=null &&
782
                        bandSetup.getFileList().getNFiles() > 1){
783
                        String pathName = bandSetup.getFileList().getJList().getSelectedValue().toString();
784
                        GeoRasterFile geoRasterFile = GeoRasterFile.openFile(fLayer.getProjection(), pathName);
785
                        nbands -= geoRasterFile.getBandCount();
786
                        fLayer.delFile(pathName);
787
                        String file = pathName.substring(pathName.lastIndexOf("/")+1);
788
                        file = file.substring(file.lastIndexOf("\\")+1);
789
                        bandSetup.removeFile(file);
790
791
                        //Mantiene la lista de ficheros eliminados por si se cancela
792
                        status.removeFile(pathName);
793
                }
794
        }
795
796
        /**
797
         * El bot?n de cancelar recupera el estado anterior a la apertura de
798
         * este dialogo.
799
         * @param e        Evento
800
         */
801
        private void cancelButtonActionPerformed(ActionEvent e) {
802
                this.status.restoreStatus(this);
803
                fLayer.getFMap().invalidate();
804
        }
805
806
807
        /**
808
         * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
809
         */
810
        public ViewInfo getViewInfo() {
811
                ViewInfo m_viewinfo=new ViewInfo(ViewInfo.MODALDIALOG);
812
                    m_viewinfo.setTitle(PluginServices.getText(this, "propiedades_raster"));
813
                return m_viewinfo;
814
        }
815
816
817
}