Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / filter / ui / FilterPanel.java @ 18962

History | View | Annotate | Download (24.3 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 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.filter.ui;
20

    
21
import java.awt.BorderLayout;
22
import java.awt.Color;
23
import java.awt.Dimension;
24
import java.awt.GridBagConstraints;
25
import java.awt.GridBagLayout;
26
import java.awt.Insets;
27
import java.awt.event.ItemEvent;
28
import java.awt.event.ItemListener;
29
import java.util.ArrayList;
30
import java.util.Hashtable;
31

    
32
import javax.swing.BorderFactory;
33
import javax.swing.ButtonGroup;
34
import javax.swing.DefaultListModel;
35
import javax.swing.JCheckBox;
36
import javax.swing.JLabel;
37
import javax.swing.JPanel;
38
import javax.swing.JRadioButton;
39
import javax.swing.JSplitPane;
40
import javax.swing.JTextField;
41
import javax.swing.border.Border;
42
import javax.swing.plaf.basic.BasicSplitPaneDivider;
43
import javax.swing.plaf.basic.BasicSplitPaneUI;
44

    
45
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
46
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
47
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
48
import org.gvsig.gui.beans.imagenavigator.ImageNavigator;
49
import org.gvsig.gui.beans.propertiespanel.PropertiesComponent;
50
import org.gvsig.gui.beans.treelist.TreeListContainer;
51
import org.gvsig.raster.RasterLibrary;
52
import org.gvsig.raster.dataset.Params;
53
import org.gvsig.raster.dataset.Params.Param;
54
import org.gvsig.raster.datastruct.Extent;
55
import org.gvsig.raster.grid.filter.RasterFilter;
56
import org.gvsig.raster.grid.filter.RasterFilterList;
57
import org.gvsig.raster.grid.filter.RasterFilterListManager;
58
import org.gvsig.raster.grid.render.Rendering;
59
import org.gvsig.raster.util.PropertyEvent;
60
import org.gvsig.raster.util.PropertyListener;
61
import org.gvsig.raster.util.RasterToolsUtil;
62
import org.gvsig.rastertools.filter.FilterListener;
63
import org.gvsig.rastertools.filter.FilterListener.ParamStruct;
64

    
65
import com.iver.andami.PluginServices;
66
import com.iver.cit.gvsig.fmap.layers.FLayer;
67
import com.iver.cit.gvsig.project.documents.view.gui.View;
68
/**
69
 * <code>FilterPanel</code> es el panel para filtros donde se construye sus
70
 * componentes visuales b?sicos.
71
 *
72
 * @version 18/05/2007
73
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
74
 */
75
public class FilterPanel extends DefaultButtonsPanel implements PropertyListener {
76
        private static final long                serialVersionUID = -5406900542488229074L;
77

    
78
        private JCheckBox                     jCBShowFilters = null;
79
        private JPanel                        jPanelOptions = null;
80
        private JPanel                        jPreview = null;
81
        private JRadioButton                  jRBFileGenerate = null;
82
        private JRadioButton                  jRBNewLayer = null;
83
        private JRadioButton                  jRBOnlyView = null;
84
        private JRadioButton                  jRBOpenMemory = null;
85
        private ImageNavigator                imageNavigator = null;
86
        private PropertiesComponent           propertiesComponent = null;
87
        private TreeListContainer             treeListContainer = null;
88
        private JPanel                        jPNameFile = null;
89
        private JPanel                        centralPanel = null;
90
        private JTextField                    filenameTextField = null;
91
        private JLabel                        labelFilename = null;
92
        private FilterListener                filterListener = null;
93
        private FLayer                        fLayer = null;
94
        private String                        viewName = null;
95
        private ArrayList                     filterStatus = null;
96

    
97
        /**
98
         * Constructor de un FilterPanel
99
         */
100
        public FilterPanel(FLayer layer) {
101
                super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
102
                
103
                this.fLayer = layer;
104
                this.setLayout(new BorderLayout(5, 5));
105
                initialize();
106
                getPropertiesComponent();
107
                translate();
108
        }
109

    
110
        /**
111
         * Seccion donde ir?n todas las traducciones invariables del componente
112
         */
113
        private void translate() {
114
                getCBShowFilters().setText(PluginServices.getText(this, "aplicar_vista_previa"));
115
                getRadioOnlyView().setText(PluginServices.getText(this, "solo_visualizacion"));
116
                getRadioFileGenerate().setText(PluginServices.getText(this, "generar_fichero"));
117
                getRadioNewLayer().setText(PluginServices.getText(this, "capa_nueva"));
118
                getRadioOpenMemory().setText(PluginServices.getText(this, "abrir_memoria"));
119
                getLabelFilename().setText(PluginServices.getText(this, "nombre_capa") + ":");
120
        }
121

    
122
        /**
123
         * This method initializes this
124
         */
125
        private void initialize() {
126
                
127
                JPanel panelLeft = new JPanel();
128
                panelLeft.setPreferredSize(new Dimension(390,0));
129
                panelLeft.setLayout(new BorderLayout(5, 5));
130
                panelLeft.add(getTreeListContainer(), BorderLayout.WEST);
131
                panelLeft.add(getCentralPanel(), BorderLayout.CENTER);
132
                
133
                
134
                JSplitPane jSplitPane1 = new JSplitPane();
135
                jSplitPane1.setLeftComponent(panelLeft);
136
                jSplitPane1.setRightComponent(getPanelRight());
137
                jSplitPane1.setResizeWeight(1.0);
138
                jSplitPane1.setContinuousLayout(true);
139
                jSplitPane1.setUI(new BasicSplitPaneUI() {
140
                        public BasicSplitPaneDivider createDefaultDivider() {
141
                                return new BasicSplitPaneDivider(this) {
142
                                        public void setBorder(Border b) {
143
                                        }
144
                                };
145
                        }
146
                });
147
                jSplitPane1.setBorder(null);
148

    
149
                add(jSplitPane1, BorderLayout.CENTER);
150
                
151
                
152
//                this.add(getPPreview(), BorderLayout.EAST);
153
        }
154
        
155
        JSplitPane jPanelRight = null;
156
        /**
157
         * Devuelve el panel donde estar? el widget de preview
158
         * @return
159
         */
160
        private JSplitPane getPanelRight() {
161
                if (jPanelRight == null) {
162
                        jPanelRight = new JSplitPane();
163
                        jPanelRight.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
164
                        jPanelRight.setContinuousLayout(true);
165
                        jPanelRight.setResizeWeight(0.0);
166
                        jPanelRight.setPreferredSize(new Dimension(220, 0));
167
                        jPanelRight.setMinimumSize(new Dimension(220, 0));
168

    
169
                        jPanelRight.setTopComponent(getPPreview());
170
                        jPanelRight.setBottomComponent(panelOptions());
171
                        jPanelRight.setUI(new BasicSplitPaneUI() {
172
                                public BasicSplitPaneDivider createDefaultDivider() {
173
                                        return new BasicSplitPaneDivider(this) {
174
                                                public void setBorder(Border b) {
175
                                                }
176
                                        };
177
                                }
178
                        });
179
                        jPanelRight.setBorder(null);
180
                }
181
                return jPanelRight;
182
        }        
183

    
184
        /**
185
         * Obtener y generar el JPanel central que contendr? las propiedades
186
         * @return
187
         */
188
        private JPanel getCentralPanel() {
189
                if (centralPanel == null) {
190
                        centralPanel = new JPanel();
191
                        centralPanel.setLayout(new BorderLayout());
192
                        centralPanel.add(getJPNameFile(), BorderLayout.SOUTH);
193
                }
194
                return centralPanel;
195
        }
196

    
197
        /**
198
         * Construye el arbol para el men? de filtros disponibles
199
         */
200
        private void menuBuild() {
201
                Hashtable keys = new Hashtable();
202
                RasterFilterList filterList = ((FLyrRasterSE) fLayer).getRenderFilterList();
203
                // Creamos un stackManager para recorrer los filtros registrados en gvSIG
204
                RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
205

    
206
                int count = 0;
207
                RasterFilter obj = null;
208

    
209
                for (int i = 0; i < stackManager.getRasterFilterList().size(); i++) {
210
                        Class classFilter = (Class) stackManager.getRasterFilterList().get(i);
211

    
212
                        try {
213
                                obj = (RasterFilter) classFilter.newInstance();
214

    
215
                                initFilter(obj);
216
                                
217
                                if (!obj.isVisible())
218
                                        continue;
219
                                
220
                                // Crear grupos de los filtros
221
                                if (!keys.containsKey(PluginServices.getText(this, new String(obj.getGroup())))) {
222
                                        keys.put(PluginServices.getText(this, new String(obj.getGroup())), obj);
223
                                        getTreeListContainer().addClass(PluginServices.getText(this, new String(obj.getGroup())), count);
224
                                        count++;
225
                                                
226
                                }
227
                                // Crear cada entrada de los filtro
228
                                String[] names = obj.getNames();
229
                                for (int j = 0; j < names.length; j++) {
230
                                        obj.setName(names[j]);
231
                                        getFilterListener().addNewParam(names[j], initFilterParam(obj.getUIParams(names[j])), classFilter);
232
                                        getTreeListContainer().addEntry(PluginServices.getText(this, names[j]), PluginServices.getText(this, obj.getGroup()), names[j]);
233
                                }
234
                        } catch (InstantiationException e) {
235
                                RasterToolsUtil.debug("No se ha podido meter el filtro en la lista", this, e);
236
                        } catch (IllegalAccessException e) {
237
                                RasterToolsUtil.debug("No se ha podido meter el filtro en la lista", this, e);
238
                        }
239
                }
240

    
241
                getTreeListContainer().getTree().expandRow(0);
242
        }
243

    
244
        /**
245
         * Comprueba que el nombre del filtro esta cargado en las extensiones
246
         * @param filter
247
         * @return
248
         */
249
        private boolean hasThisFilter(String filter) {
250
                RasterFilterList filterList = new RasterFilterList();
251
                RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
252

    
253
                boolean error;
254
                RasterFilter obj = null;
255

    
256
                for (int i = 0; i < stackManager.getRasterFilterList().size(); i++) {
257
                        Class classFilter = (Class) stackManager.getRasterFilterList().get(i);
258
                        error = true;
259

    
260
                        try {
261
                                obj = (RasterFilter) classFilter.newInstance();
262
                                error = false;
263
                        } catch (InstantiationException e) {
264
                        } catch (IllegalAccessException e) {
265
                        }
266

    
267
                        if (!error) {
268
                                String[] names = obj.getNames();
269
                                for (int j = 0; j < names.length; j++)
270
                                        if (filter.equals(names[j]))
271
                                                return true;
272
                        }
273
                }
274
                return false;
275
        }
276

    
277
        /**
278
         * Pasamos los parametros basicos a un filtro
279
         * @param filter
280
         */
281
        private void initFilter(RasterFilter filter) {
282
                if (fLayer != null) {
283
                        filter.getEnv().put("MultiRasterDataset", ((FLyrRasterSE) fLayer).getDataSource());
284
                        filter.getEnv().put("initRaster", fLayer);
285
                }
286
        }
287

    
288
        /**
289
         * Sirve para a?adir mas parametros genericos por defecto al panel, de momento
290
         * solo he puesto para activar o desactivar un filtro.
291
         * @param params
292
         * @return
293
         */
294
        private Params initFilterParam(Params params) {
295
                params.setParam("enabled", new Boolean(true), Params.CHECK, null);
296
                Param param = params.getParamById("enabled");
297
                params.getParams().remove(params.getParams().size() - 1);
298
                params.getParams().add(0, param);
299
                return params;
300
        }
301

    
302
        /**
303
         * This method initializes jPanel
304
         * @return javax.swing.JPanel
305
         */
306
        public TreeListContainer getTreeListContainer() {
307
                if (treeListContainer == null) {
308
                        treeListContainer = new TreeListContainer();
309
                        treeListContainer.getTree().expandRow(0);
310
                        treeListContainer.addTreeListListener(getFilterListener());
311
                        treeListContainer.addChangeSelectionListener(getFilterListener());
312
                }
313
                return treeListContainer;
314
        }
315

    
316
        /**
317
         * Obtener el PropertiesComponent del panel de filtros, en caso de no existir,
318
         * lo crea.
319
         * @return
320
         */
321
        public PropertiesComponent getPropertiesComponent() {
322
                if (propertiesComponent == null) {
323
                        propertiesComponent = new PropertiesComponent();
324
                        getCentralPanel().add(propertiesComponent, BorderLayout.CENTER);
325

    
326
                        propertiesComponent.addStateChangedListener(getFilterListener());
327
                }
328
                return propertiesComponent;
329
        }
330

    
331
        /**
332
         * Devuelve el panel donde estar? el widget de preview
333
         * @return
334
         */
335
        private JPanel getPPreview() {
336
                if (jPreview == null) {
337
                        jPreview = new JPanel();
338
                        JPanel jsubpanel = new JPanel();
339
                        jPreview.setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this, "vista_previa"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
340
                        jPreview.setLayout(new BorderLayout());
341
                        jsubpanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8));
342
                        jsubpanel.setLayout(new BorderLayout());
343

    
344
                        jPreview.setPreferredSize(new Dimension(192, 192));
345
                        jPreview.setMinimumSize(new Dimension(192, 192));
346
                        jPreview.setMaximumSize(new Dimension(192, 192));
347

    
348
                        jsubpanel.add(getImageNavigator(), BorderLayout.CENTER);
349
                        jPreview.add(jsubpanel, BorderLayout.CENTER);
350

    
351
                        panelOptions().setPreferredSize(new Dimension(192, 132));
352
                        panelOptions().setMinimumSize(new Dimension(192, 132));
353
                        panelOptions().setMaximumSize(new Dimension(192, 132));
354
                }
355
                return jPreview;
356
        }
357

    
358
        /**
359
         * @return the jLabelShowFilters
360
         */
361
        public JCheckBox getCBShowFilters() {
362
                if (jCBShowFilters == null) {
363
                        jCBShowFilters = new JCheckBox();
364
                        jCBShowFilters.addActionListener(getFilterListener());
365
                        jCBShowFilters.setSelected(true);
366
                }
367
                return jCBShowFilters;
368
        }
369

    
370
        /**
371
         * Devuelve el Widget del preview, en caso de no existir lo crea.
372
         * @return
373
         */
374
        private ImageNavigator getImageNavigator() {
375
                if (imageNavigator == null) {
376
                        imageNavigator = new ImageNavigator(getFilterListener());
377
                        imageNavigator.setFocusable(true);
378
                        imageNavigator.setBorder(javax.swing.BorderFactory.createLineBorder(Color.gray, 1));
379
                }
380
                return imageNavigator;
381
        }
382

    
383
        /**
384
         * Devuelve el panel de Opciones, en caso de no existir, lo crea.
385
         * @return
386
         */
387
        private JPanel panelOptions() {
388
                if (jPanelOptions == null) {
389
                        JPanel jPanel2 = null;
390

    
391
                        ButtonGroup buttonGroup1;
392
                        ButtonGroup buttonGroup2;
393

    
394
                        GridBagConstraints gridBagConstraints;
395

    
396
                        buttonGroup1 = new javax.swing.ButtonGroup();
397
                        buttonGroup2 = new ButtonGroup();
398
                        jPanelOptions = new JPanel();
399
                        jPanel2 = new JPanel();
400

    
401
                        jPanelOptions.setLayout(new GridBagLayout());
402

    
403
                        gridBagConstraints = new GridBagConstraints();
404
                        gridBagConstraints.gridx = 0;
405
                        gridBagConstraints.gridy = 1;
406
                        gridBagConstraints.anchor = GridBagConstraints.WEST;
407
                        gridBagConstraints.insets = new Insets(2, 2, 2, 2);
408
                        jPanelOptions.add(getCBShowFilters(), gridBagConstraints);
409

    
410
                        buttonGroup1.add(getRadioOnlyView());
411

    
412
                        gridBagConstraints = new GridBagConstraints();
413
                        gridBagConstraints.gridx = 0;
414
                        gridBagConstraints.gridy = 2;
415
                        gridBagConstraints.anchor = GridBagConstraints.WEST;
416
                        gridBagConstraints.insets = new Insets(3, 3, 3, 3);
417
                        jPanelOptions.add(getRadioOnlyView(), gridBagConstraints);
418

    
419
                        buttonGroup1.add(getRadioNewLayer());
420

    
421
                        gridBagConstraints = new GridBagConstraints();
422
                        gridBagConstraints.gridx = 0;
423
                        gridBagConstraints.gridy = 3;
424
                        gridBagConstraints.anchor = GridBagConstraints.WEST;
425
                        gridBagConstraints.insets = new Insets(3, 3, 3, 3);
426
                        jPanelOptions.add(getRadioNewLayer(), gridBagConstraints);
427
                        
428
                        jPanel2.setLayout(new GridBagLayout());
429

    
430
                        jPanel2.setBorder(BorderFactory.createTitledBorder(""));
431
                        buttonGroup2.add(getRadioFileGenerate());
432
                        gridBagConstraints = new GridBagConstraints();
433
                        gridBagConstraints.anchor = GridBagConstraints.WEST;
434
                        gridBagConstraints.insets = new Insets(3, 3, 3, 3);
435
                        gridBagConstraints.weightx = 1.0;
436
                        jPanel2.add(getRadioFileGenerate(), gridBagConstraints);
437

    
438
                        buttonGroup2.add(getRadioOpenMemory());
439
                        gridBagConstraints = new GridBagConstraints();
440
                        gridBagConstraints.gridx = 0;
441
                        gridBagConstraints.gridy = 1;
442
                        gridBagConstraints.anchor = GridBagConstraints.WEST;
443
                        gridBagConstraints.insets = new Insets(3, 3, 3, 3);
444
                        jPanel2.add(getRadioOpenMemory(), gridBagConstraints);
445

    
446
                        gridBagConstraints = new GridBagConstraints();
447
                        gridBagConstraints.gridx = 0;
448
                        gridBagConstraints.gridy = 4;
449
                        gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
450
                        gridBagConstraints.insets = new Insets(3, 3, 3, 3);
451
                        jPanelOptions.add(jPanel2, gridBagConstraints);
452

    
453
                        gridBagConstraints = new GridBagConstraints();
454
                        gridBagConstraints.gridx = 0;
455
                        gridBagConstraints.gridy = 5;
456
                        gridBagConstraints.weightx = 1.0;
457
                        gridBagConstraints.weighty = 1.0;
458
                        jPanelOptions.add(new JPanel(), gridBagConstraints);
459
                }
460

    
461
                return jPanelOptions;
462
        }
463

    
464
        /**
465
         * Devuelve el JRadioButton de generar fichero
466
         * @return
467
         */
468
        public JRadioButton getRadioFileGenerate() {
469
                if (jRBFileGenerate == null) {
470
                        jRBFileGenerate = new JRadioButton();
471
                        jRBFileGenerate.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
472
                        jRBFileGenerate.setMargin(new Insets(0, 0, 0, 0));
473
                }
474
                return jRBFileGenerate;
475
        }
476

    
477
        /**
478
         * Devuelve el JRadioButton de Solo vista
479
         * @return
480
         */
481
        public JRadioButton getRadioOnlyView() {
482
                if (jRBOnlyView == null) {
483
                        jRBOnlyView = new JRadioButton();
484
                        jRBOnlyView.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
485
                        jRBOnlyView.setMargin(new Insets(0, 0, 0, 0));
486
                }
487
                return jRBOnlyView;
488
        }
489

    
490
        /**
491
         * Devuelve el JRadioButton de nueva capa
492
         * @return
493
         */
494
        public JRadioButton getRadioNewLayer() {
495
                if (jRBNewLayer == null) {
496
                        jRBNewLayer = new JRadioButton();
497
                        jRBNewLayer.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
498
                        jRBNewLayer.setMargin(new Insets(0, 0, 0, 0));
499
                        jRBNewLayer.addItemListener(new ItemListener() {
500
                                public void itemStateChanged(ItemEvent evt) {
501
                                        jRBNewLayerStateChanged(evt);
502
                                }
503
                        });
504
                        jRBNewLayer.setSelected(true);
505
                }
506
                return jRBNewLayer;
507
        }
508

    
509
        /**
510
         * Devuelve el JRadioButton de Abrir en memoria
511
         * @return
512
         */
513
        public JRadioButton getRadioOpenMemory() {
514
                if (jRBOpenMemory == null) {
515
                        jRBOpenMemory = new JRadioButton();
516
                        jRBOpenMemory.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
517
                        jRBOpenMemory.setMargin(new Insets(0, 0, 0, 0));
518

    
519
                        jRBOpenMemory.addItemListener(new ItemListener() {
520
                                public void itemStateChanged(ItemEvent evt) {
521
                                        jRBOpenMemoryStateChanged(evt);
522
                                }
523
                        });
524
                        jRBOpenMemory.setSelected(true);
525
                }
526
                return jRBOpenMemory;
527
        }
528

    
529
        /**
530
         * Especificar el nombre de la nueva capa para el recuadro de texto asign?ndo
531
         * en cada llamada un nombre consecutivo.
532
         */
533
        public void updateNewLayerText() {
534
                filenameTextField.setText(RasterLibrary.getOnlyLayerName());
535
        }
536

    
537
        /**
538
         * This method initializes jPNameFile
539
         *
540
         * @return javax.swing.JPanel
541
         */
542
        private JPanel getJPNameFile() {
543
                if (jPNameFile == null) {
544
                        jPNameFile = new JPanel();
545
                        jPNameFile.setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this, "nombre_capa"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
546
                        jPNameFile.add(getLabelFilename());
547
                        jPNameFile.add(getFilenameTextField());
548
                        updateNewLayerText();
549
                }
550
                return jPNameFile;
551
        }
552

    
553
        private JLabel getLabelFilename() {
554
                if (labelFilename == null) {
555
                        labelFilename = new JLabel();
556
                }
557
                return labelFilename;
558
        }
559

    
560
        /**
561
         * This method initializes filenameTextField
562
         *
563
         * @return javax.swing.JTextField
564
         */
565
        public JTextField getFilenameTextField() {
566
                if (filenameTextField == null) {
567
                        filenameTextField = new JTextField();
568
                        filenameTextField.setPreferredSize(new Dimension(150, filenameTextField.getPreferredSize().height));
569
                        RasterLibrary.addOnlyLayerNameListener(this);
570
                }
571
                return filenameTextField;
572
        }
573

    
574
        /**
575
         * Devuelve el componente <code>FilterListener</code>, que contendr? el
576
         * proceso en si del panel
577
         */
578
        private FilterListener getFilterListener() {
579
                if (filterListener == null) {
580
                        filterListener = new FilterListener(this);
581
                }
582

    
583
                return filterListener;
584
        }
585

    
586
        /**
587
         * Devuelve el FLayer asignado al panel
588
         * @return
589
         */
590
        public FLayer getLayer() {
591
                return fLayer;
592
        }
593

    
594
        /**
595
         * Definir el FLayer del panel, haciendo todas las cargas necesarias despues
596
         * de especificarlo.
597
         * @param layer
598
         */
599
        public void setLayer(FLayer layer) {
600
                this.fLayer = layer;
601

    
602
                // Construimos el arbol de filtros
603
                menuBuild();
604

    
605
                View view = (View) PluginServices.getMDIManager().getActiveWindow();
606
                viewName = PluginServices.getMDIManager().getWindowInfo(view).getTitle();
607

    
608
                //Comprobamos que el raster de salida no exceda los 4GB que es el m?ximo 
609
                //admisible por un TIFF. Si es as? se hace un setCompress para salvar en JPEG2000
610
                long sizeB = (long)((((FLyrRasterSE) layer).getPxWidth() * ((FLyrRasterSE) layer).getPxWidth() * ((FLyrRasterSE) layer).getBandCount())); 
611
                int sizeMB = (int)(sizeB / 1048576);
612
                if(sizeMB >= 4096) {
613
                        RasterToolsUtil.messageBoxInfo("file_too_big", this);
614
                        filterListener.setCompress(true);
615
                }
616
                Extent extent2 = ((FLyrRasterSE) fLayer).getFullRasterExtent();//.getBufferFactory().getExtent();
617

    
618
                double x1 = extent2.getULX();
619
                double y1 = extent2.getULY();
620
                double x2 = extent2.getLRX();
621
                double y2 = extent2.getLRY();
622

    
623
                getImageNavigator().setViewDimensions(x1, y1, x2, y2);
624
                getImageNavigator().setZoom(1.0/((FLyrRasterSE) fLayer).getBufferFactory().getDataSource().getCellSize());
625
                getImageNavigator().imageCenter();
626
                getImageNavigator().updateBuffer();
627

    
628
                RasterFilterList rfl = ((FLyrRasterSE) layer).getRenderFilterList();
629

    
630
                filterStatus = rfl.getStatusCloned();
631

    
632
                //Carga el listado de filtros que ya estaban aplicados en la capa al abrir
633
                 
634
                int i = 0;
635
                boolean filters = false;
636
                while (rfl.get(i) != null) {
637
                        DefaultListModel list = (DefaultListModel) getTreeListContainer().getListModel();
638
                        if (rfl.get(i).isVisible() && hasThisFilter(rfl.get(i).getName())) {
639
                                list.addElement(PluginServices.getText(this, rfl.get(i).getName()));
640
                                for (int j = 0; j < getFilterListener().getParamsList().size(); j++) {
641
                                        if (((ParamStruct) getFilterListener().getParamsList().get(j)).getFilterName().equals(rfl.get(i).getName())) {
642
                                                filters = true;
643
                                                initFilter(rfl.get(i));
644
                                                ((ParamStruct) getFilterListener().getParamsList().get(j)).setFilterParam(initFilterParam(rfl.get(i).getUIParams(rfl.get(i).getName())));
645
                                        }
646
                                }
647
                        }
648

    
649
                        i++;
650
                }
651

    
652
                // Si existen filtros ya en la capa, pondremos los RadioButton para que
653
                // los cambios se hagan sobre la visualizaci?n
654
                if (filters)
655
                        getRadioOnlyView().setSelected(true);
656

    
657
                // Selecciona el primer item del arbol
658
                TreeListContainer lc = getTreeListContainer();
659
                lc.getTree().expandRow(1);
660
                lc.getTree().setSelectionInterval(2, 2);
661
                
662
                filterListener.setLayer(fLayer);
663
        }
664

    
665
        /**
666
         * Obtiene el nombre de la vista
667
         * @return
668
         */
669
        public String getViewName() {
670
                return viewName;
671
        }
672

    
673
        /**
674
         * Poner los estados de los RadioButton en caso de que cambien de valor
675
         * @param evt
676
         */
677
        private void jRBNewLayerStateChanged(ItemEvent evt) {
678
                if (getRadioNewLayer().getSelectedObjects() != null) {
679
                        getRadioFileGenerate().setEnabled(true);
680
                        getRadioOpenMemory().setEnabled(true);
681
                        if (getRadioOpenMemory().getSelectedObjects() != null)
682
                                setFilenameEnabled(true);
683
                        else
684
                                setFilenameEnabled(false);
685
                } else {
686
                        getRadioFileGenerate().setEnabled(false);
687
                        getRadioOpenMemory().setEnabled(false);
688
                        setFilenameEnabled(false);
689
                }
690
        }
691

    
692
        private void setFilenameEnabled(boolean value) {
693
                getFilenameTextField().setEnabled(value);
694
                getLabelFilename().setEnabled(value);
695
        }
696

    
697
        /**
698
         * Poner los estados de los RadioButton en caso de que cambien de valor
699
         * @param evt
700
         */
701
        private void jRBOpenMemoryStateChanged(ItemEvent evt) {
702
                if (getRadioOpenMemory().getSelectedObjects() != null) {
703
                        setFilenameEnabled(true);
704
                } else {
705
                        setFilenameEnabled(false);
706
                }
707
        }
708

    
709
        /**
710
         * Asigna el t?tulo al panel
711
         * @param title T?tulo del panel
712
         */
713
        public void setTitle(String title) {
714
                getPropertiesComponent().setBorder(BorderFactory.createTitledBorder(null, PluginServices.getText(this, "filtro_de") + " " + PluginServices.getText(this, title), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
715
        }
716

    
717
        /**
718
         * Actualizamos la vista previa
719
         */
720
        public void refreshPreview() {
721
                getImageNavigator().updateBuffer();
722
        }
723

    
724
        /**
725
         * Volvemos todo a la normalidad cuando se cancela
726
         */
727
        public void cancel() {
728
                getLayer().getMapContext().invalidate();
729
        }
730

    
731
        /**
732
         * Volvemos todo a la normalidad cuando se cancela
733
         */
734
        public void restoreFilters() {
735
                Rendering rendering = ((FLyrRasterSE) getLayer()).getRender();
736
                rendering.getFilterList().setStatus(getFilterStatus());
737
        }
738

    
739
        /**
740
         * Asignar un nuevo componente de PropertiesComponent, eliminando el anterior
741
         * que hubiera.
742
         * @param component
743
         * @param name
744
         */
745
        public void setNewPropertiesComponent(PropertiesComponent component, String name) {
746
                getPropertiesComponent().setVisible(false);
747
                this.remove(propertiesComponent);
748
                propertiesComponent = null;
749
                propertiesComponent = component;
750
                getCentralPanel().add(propertiesComponent, BorderLayout.CENTER);
751
                propertiesComponent.addStateChangedListener(getFilterListener());
752
                setTitle(name);
753
                this.validate();
754
        }
755

    
756
        /**
757
         * Cuando se aceptan los cambios en el panel ejecutaremos el aceptar del
758
         * listener
759
         */
760
        public void accept() {
761
                filterListener.accept();
762
        }
763

    
764
        /**
765
         * Devuelve el arrayList de filtros inicial
766
         * @return
767
         */
768
        public ArrayList getFilterStatus() {
769
                return filterStatus;
770
        }
771

    
772
        /**
773
         * Cuando alguien ha cambiado la propiedad del nombre de la 
774
         * capa se actualiza autom?ticamente
775
         */
776
        public void actionValueChanged(PropertyEvent e) {
777
                updateNewLayerText();
778
        }
779
}