Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / enhanced / ui / EnhancedListener.java @ 1426

History | View | Annotate | Download (21.4 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
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., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.raster.tools.app.basic.tool.enhanced.ui;
23

    
24
import java.awt.Color;
25
import java.awt.Component;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28
import java.io.File;
29
import java.util.List;
30

    
31
import org.gvsig.andami.PluginServices;
32
import org.gvsig.fmap.dal.coverage.RasterLocator;
33
import org.gvsig.fmap.dal.coverage.datastruct.Params;
34
import org.gvsig.fmap.dal.coverage.datastruct.Stretch;
35
import org.gvsig.fmap.dal.coverage.exception.FilterManagerException;
36
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException;
37
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
38
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList;
39
import org.gvsig.fmap.dal.coverage.grid.filter.LinearStretchParams;
40
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
41
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
42
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
43
import org.gvsig.raster.fmap.layers.FLyrRaster;
44
import org.gvsig.raster.swing.RasterSwingLocator;
45
import org.gvsig.raster.swing.gcanvas.BaseFunction;
46
import org.gvsig.raster.swing.gcanvas.DensitySlicingLine;
47
import org.gvsig.raster.swing.gcanvas.DrawableElement;
48
import org.gvsig.raster.swing.gcanvas.GCanvas;
49
import org.gvsig.raster.swing.gcanvas.GCanvasEvent;
50
import org.gvsig.raster.swing.gcanvas.GraphicHistogram;
51
import org.gvsig.raster.swing.gcanvas.IGCanvasListener;
52
import org.gvsig.raster.swing.gcanvas.LogaritmicExponentialLine;
53
import org.gvsig.raster.swing.gcanvas.SquareRootPowLine;
54
import org.gvsig.raster.swing.gcanvas.StraightLine;
55
import org.gvsig.raster.tools.app.basic.RasterToolsUtil;
56
import org.gvsig.raster.tools.app.basic.raster.bean.previewbase.ParamStruct;
57
import org.gvsig.raster.tools.app.basic.raster.process.FilterProcess;
58
import org.gvsig.raster.tools.app.basic.raster.process.IProcessActions;
59
import org.gvsig.raster.tools.app.basic.tool.enhanced.graphics.HistogramGraphicBase;
60
import org.gvsig.raster.tools.app.basic.tool.enhanced.graphics.HistogramGraphicBase.HistogramStatus;
61
import org.gvsig.raster.util.LayerVisualStatusList;
62
import org.gvsig.raster.util.RasterNotLoadException;
63

    
64
/**
65
 * Gestor de eventos de los paneles de gr?ficas y controles.
66
 * 
67
 * 21/02/2008
68
 * @author Nacho Brodin nachobrodin@gmail.com
69
 */
70
public class EnhancedListener implements ActionListener, IGCanvasListener, ButtonsPanelListener, IProcessActions {
71
        private SelectorsPanel               selectorsPanel  = null;
72
        private GraphicsPanel                graphicsPanel   = null;
73
        private EnhancedDialog               enhancedDialog  = null;
74
        private PreviewFiltering             filteredPreview = null;
75
        private EnhancedHistogramController  enhancedManager = null;
76
        private LayerVisualStatusList        status          = new LayerVisualStatusList();
77
        
78
        /**
79
         * Constructor
80
         * @param selectorsPanel Panel con los selectores de opciones
81
         * @param graphicsPanel Panel con los gr?ficos
82
         * @param enhancedPanel Panel base con la previsualizaci?n
83
         * @param enhancedDialog Dialogo general
84
         * @param filteredPreview Preprocesado para la preview
85
         */
86
        public EnhancedListener(SelectorsPanel selectorsPanel, 
87
                                                        GraphicsPanel graphicsPanel, 
88
                                                        EnhancedDialog enhancedDialog, 
89
                                                        PreviewFiltering filteredPreview) {
90
                this.selectorsPanel = selectorsPanel;
91
                this.graphicsPanel = graphicsPanel;
92
                this.enhancedDialog = enhancedDialog;
93
                this.filteredPreview = filteredPreview;
94
                status.getVisualStatus(((FLyrRaster) enhancedDialog.getLayer()));
95
                
96
                
97
                enhancedManager = new EnhancedHistogramController(graphicsPanel.getInputHistogram(), graphicsPanel.getOutputHistogram(), enhancedDialog);
98
                
99
                selectorsPanel.getHistogramType().addActionListener(this);
100
                selectorsPanel.getDrawType().addActionListener(this);
101
                selectorsPanel.getBand(null).addActionListener(this);
102
                selectorsPanel.getEnhancedType().addActionListener(this);
103
                graphicsPanel.getLevels().addActionListener(this);
104
                graphicsPanel.getRGB().addActionListener(this);
105
        }
106
        
107
        public void actionPerformed(ActionEvent e) {
108
                //Cambio del tipo de de dibujado del histograma
109
                if(e.getSource() == selectorsPanel.getDrawType()) {
110
                        if(((String)selectorsPanel.getDrawType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "fill"))) {
111
                                graphicsPanel.getInputHistogram().setType(GraphicHistogram.TYPE_FILL);
112
                                graphicsPanel.getOutputHistogram().setType(GraphicHistogram.TYPE_FILL);
113
                        }
114
                        
115
                        if(((String)selectorsPanel.getDrawType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "line"))) {
116
                                graphicsPanel.getInputHistogram().setType(GraphicHistogram.TYPE_LINE);
117
                                graphicsPanel.getOutputHistogram().setType(GraphicHistogram.TYPE_LINE);
118
                        }
119
                        ((Component)graphicsPanel.getInputHistogram().getCanvas()).repaint();
120
                        ((Component)graphicsPanel.getOutputHistogram().getCanvas()).repaint();
121
                }
122

    
123
                // Cambio el tipo de visualizacion del histograma
124
                if (e.getSource() == selectorsPanel.getHistogramType()) {
125
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "standard"))) {
126
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_LINEAL);
127
                        }
128
                        
129
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "cumulative"))) {
130
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_ACUMMULATED);
131
                        }
132
                        
133
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "logaritmic"))) {
134
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_LOGARITHMIC);
135
                        }
136
                        
137
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "cumulative_logarithmic"))) {
138
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_ACUMMULATEDLOG);
139
                        }
140
                        ((Component)graphicsPanel.getOutputHistogram().getCanvas()).repaint();
141
                }
142

    
143
                // Seleccion de modo RGB o normal
144
                if (e.getSource() == graphicsPanel.getRGB()) {
145
                        graphicsPanel.updateHistogram();
146
                        updatePreview();
147
                }
148
                
149
                //Cambio de banda
150
                if(e.getSource() == selectorsPanel.getBand(null)) {
151
                        if(((String)selectorsPanel.getBand(null).getSelectedItem()).equals(RasterToolsUtil.getText(this, "red"))) {
152
                                graphicsPanel.getInputHistogram().setHistogramDrawed(HistogramGraphicBase.RED);
153
                                graphicsPanel.getOutputHistogram().setHistogramDrawed(HistogramGraphicBase.RED);
154
                        }
155
                        
156
                        if(((String)selectorsPanel.getBand(null).getSelectedItem()).equals(RasterToolsUtil.getText(this, "green"))) {
157
                                graphicsPanel.getInputHistogram().setHistogramDrawed(HistogramGraphicBase.GREEN);
158
                                graphicsPanel.getOutputHistogram().setHistogramDrawed(HistogramGraphicBase.GREEN);
159
                        }
160
                        
161
                        if(((String)selectorsPanel.getBand(null).getSelectedItem()).equals(RasterToolsUtil.getText(this, "blue"))) {
162
                                graphicsPanel.getInputHistogram().setHistogramDrawed(HistogramGraphicBase.BLUE);
163
                                graphicsPanel.getOutputHistogram().setHistogramDrawed(HistogramGraphicBase.BLUE);
164
                        }
165

    
166
                        updateTypeSelected();
167
                        
168
                        HistogramStatus status = graphicsPanel.getOutputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED);
169

    
170
                        switch (status.getGraphicHistogram().getType()) {
171
                                case GraphicHistogram.TYPE_FILL:
172
                                        selectorsPanel.getDrawType().setSelectedItem(RasterToolsUtil.getText(this, "fill"));
173
                                        break;
174
                                default:
175
                                        selectorsPanel.getDrawType().setSelectedItem(RasterToolsUtil.getText(this, "line"));
176
                                        break;
177
                        }
178

    
179
                        switch (status.getGraphicHistogram().getTypeViewed()) {
180
                                case GraphicHistogram.VIEW_ACUMMULATED:
181
                                        selectorsPanel.getHistogramType().setSelectedItem(RasterToolsUtil.getText(this, "cumulative"));
182
                                        break;
183
                                case GraphicHistogram.VIEW_LOGARITHMIC:
184
                                        selectorsPanel.getHistogramType().setSelectedItem(RasterToolsUtil.getText(this, "logaritmic"));
185
                                        break;
186
                                case GraphicHistogram.VIEW_ACUMMULATEDLOG:
187
                                        selectorsPanel.getHistogramType().setSelectedItem(RasterToolsUtil.getText(this, "cumulative_logarithmic"));
188
                                        break;
189
                                default:
190
                                        selectorsPanel.getHistogramType().setSelectedItem(RasterToolsUtil.getText(this, "standard"));
191
                                        break;
192
                        }
193
                }
194
                
195
                //Cambio de operaci?n
196
                if(e.getSource() == selectorsPanel.getEnhancedType()) {
197
                        graphicsPanel.setLevelsEnabled(false);
198
                        
199
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "lineal"))) {
200
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_LINEAL);
201
                                updatePreview();
202
                        }
203
                        
204
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "gaussian"))) {
205

    
206
                        }
207
                        
208
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "logaritmic"))) {
209
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_LOGARIT);
210
                                updatePreview();
211
                        }
212
                        
213
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "exponential"))) {
214
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_EXPONENT);
215
                                updatePreview();
216
                        }
217
                        
218
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "equalization"))) {
219
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_NONE);
220
                                int[] renderBands = enhancedDialog.getLayer().getRender().getRenderBands();
221
                                String values = "";
222
                                for (int i = 0; i < renderBands.length; i++) 
223
                                        values += renderBands[i] + " ";
224
                                values = values.trim();
225
                                Params params = RasterLocator.getManager().createParams("", 0, 0, null);
226
                                params.setParam("Histogram", graphicsPanel.getHistogram(), -1, null);
227
                                params.setParam("RenderBands", values, -1, null);
228
                                params.setParam("EcualizedBands", new int[]{0, 1, 2}, -1, null);
229
                                                
230
                                Class<?> filterClass = enhancedDialog.getLayer().getRender().getFilterList().getFilterClassByID("equalization");
231
                                filteredPreview.addNewParam("equalization", params, filterClass);                                
232
                                updatePreview();
233
                        }
234
                        
235
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "square_root"))) {
236
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_SQUARE_ROOT);
237
                                updatePreview();
238
                        }
239
                        
240
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "level_slice"))) {
241
                                graphicsPanel.setLevelsEnabled(true);
242
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_DENSITY);
243

    
244
                                // Establece el numero de niveles en el cuadro de texto
245
                                HistogramStatus status = graphicsPanel.getInputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED);
246
                                graphicsPanel.getLevels().setValue(new Long(((DensitySlicingLine) status.getBaseFunction()).getLevels()));
247
                                updatePreview();
248
                        }
249
                }
250
                
251
                //Cambio de tipo (estandar/acumulado)
252
                if(e.getSource() == selectorsPanel.getHistogramType()) {
253
                        if(((String)selectorsPanel.getHistogramType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "standard"))) {
254
                                
255
                        }
256
                        
257
                        if(((String)selectorsPanel.getHistogramType().getSelectedItem()).equals(RasterToolsUtil.getText(this, "cumulative"))) {
258
                                
259
                        }
260
                }
261
                
262
                //Cambio en el n?mero de niveles
263
                if(e.getSource() == graphicsPanel.getLevels()) {
264
                        Long lValue = (Long)graphicsPanel.getLevels().getValue();
265
                        int value = lValue.intValue();
266
                        if(value > 30 || value < 2) {
267
                                RasterToolsUtil.messageBoxInfo(RasterToolsUtil.getText(graphicsPanel, "range_wrong") + " [2-30]", graphicsPanel);
268
                                if(value > 30)
269
                                        value = 30;
270
                                if(value < 2)
271
                                        value = 2;
272
                        }
273
                        graphicsPanel.getLevels().setValue(new Long(value));
274
                        try {
275
                                graphicsPanel.getInputHistogram().setLevel(value);
276
                                updatePreview();
277
                        } catch (NumberFormatException exc) {
278
                                //No asignamos el nivel
279
                        }
280
                }
281
        }
282
        
283
        /**
284
         * Actualiza el combo de EnhancedType para que este seleccionado siempre el
285
         * item que corresponde con la grafica mostrada en ese momento
286
         */
287
        private void updateTypeSelected() {
288
                HistogramStatus status = graphicsPanel.getInputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED);
289

    
290
                if (status.getBaseFunction().getClass().equals(DensitySlicingLine.class))
291
                        selectorsPanel.setSelectedEnhancedType(RasterToolsUtil.getText(this, "level_slice"));
292

    
293
                if (status.getBaseFunction().getClass().equals(StraightLine.class))
294
                        selectorsPanel.setSelectedEnhancedType(RasterToolsUtil.getText(this, "lineal"));
295

    
296
                Class<?> filterClass = enhancedDialog.getLayer().getRender().getFilterList().getFilterClassByID("equalization");
297
                if (status.getBaseFunction().getClass().equals(filterClass))
298
                        selectorsPanel.setSelectedEnhancedType(RasterToolsUtil.getText(this, "equalization"));
299

    
300
                if (status.getBaseFunction().getClass().equals(SquareRootPowLine.class))
301
                        selectorsPanel.setSelectedEnhancedType(RasterToolsUtil.getText(this, "square_root"));
302

    
303
                if (status.getBaseFunction().getClass().equals(LogaritmicExponentialLine.class)) {
304
                        if (((StraightLine) status.getBaseFunction()).getValueFunction() >= 0)
305
                                selectorsPanel.setSelectedEnhancedType(RasterToolsUtil.getText(this, "logaritmic"));
306
                        else
307
                                selectorsPanel.setSelectedEnhancedType(RasterToolsUtil.getText(this, "exponential"));
308
                }
309
        }
310
        
311
        /**
312
         * En la primera carga se define cada banda en los histogramas, para dejarlo en
313
         * su estado logico.
314
         * @param stretch
315
         * @param band
316
         */
317
        private void firstLoadBand(Stretch stretch, int band) {
318
                boolean firstBand = ((band == HistogramGraphicBase.GRAY) || (band == HistogramGraphicBase.RED));
319

    
320
                graphicsPanel.getInputHistogram().setHistogramDrawed(band);
321
                
322
                BaseFunction baseFunction = null;
323
                HistogramStatus status;
324
                status = graphicsPanel.getInputHistogram().getHistogramStatus(band);
325
                if (status == null)
326
                        return;
327
                
328
                GCanvas canvas = RasterSwingLocator.getSwingManager().createGraphicCanvas(Color.white);
329
                
330
                switch (stretch.getFunctionType()) {
331
                        case 0:
332
                                if (firstBand) {
333
                                        selectorsPanel.getEnhancedType().setSelectedItem(RasterToolsUtil.getText(this, "lineal"));
334
                                        graphicsPanel.setLevelsEnabled(false);
335
                                }
336
                                baseFunction = canvas.createStraightLineForGCanvas(
337
                                                ((DrawableElement)status.getBaseFunction()).getColor());
338
                                ((StraightLine) baseFunction).clearSquares();
339
                                for (int i = 0; i < stretch.getStretchIn().length; i++) {
340
                                        ((StraightLine) baseFunction).addSquare(
341
                                                (stretch.getStretchIn()[i] - stretch.getMinValue()) / (stretch.getMaxValue() - stretch.getMinValue()),
342
                                                stretch.getStretchOut()[i] / 255.0D);
343
                                }
344
                                break;
345
                        case 1:
346
                                if (firstBand) {
347
                                        if (stretch.getValueFunction() >= 0)
348
                                                selectorsPanel.getEnhancedType().setSelectedItem(RasterToolsUtil.getText(this, "logaritmic"));
349
                                        else
350
                                                selectorsPanel.getEnhancedType().setSelectedItem(RasterToolsUtil.getText(this, "exponential"));
351
                                        graphicsPanel.setLevelsEnabled(false);
352
                                }
353
                                baseFunction = canvas.createLogaritmicExponentialLineForGCanvas(
354
                                                ((DrawableElement)status.getBaseFunction()).getColor(), stretch.getValueFunction());
355
                                break;
356
                        case 2:
357
                                if (firstBand) {
358
                                        selectorsPanel.getEnhancedType().setSelectedItem(RasterToolsUtil.getText(this, "square_root"));
359
                                        graphicsPanel.setLevelsEnabled(false);
360
                                }
361
                                baseFunction = canvas.createSquareRootPowLineForGCanvas(
362
                                                ((DrawableElement)status.getBaseFunction()).getColor(), stretch.getValueFunction());
363
                                break;
364
                        case 3:
365
                                if (firstBand) {
366
                                        selectorsPanel.getEnhancedType().setSelectedItem(RasterToolsUtil.getText(this, "level_slice"));
367
                                        graphicsPanel.setLevelsEnabled(true);
368
                                }
369
                                baseFunction = canvas.createDensitySliceForGCanvas(
370
                                                ((DrawableElement)status.getBaseFunction()).getColor(), (int) stretch.getValueFunction());
371
                                break;
372
                }
373
                if (baseFunction != null) {
374
                        status.setBaseFunction(baseFunction);
375
                        graphicsPanel.getInputHistogram().setHistogramDrawed(band);
376
                }
377
        }
378
        
379
        /**
380
         * En la primera carga se han de establecer todos los histogramas de entrada
381
         * a sus valores correspondientes segun el filtro.
382
         */
383
        public void firstLoad() {
384
                RasterFilterList rasterFilterList = enhancedDialog.getLayer().getRender().getFilterList();
385

    
386
                RasterFilter filter = rasterFilterList.getByName("enhanced_stretch");
387
                if (filter != null) {
388
                        LinearStretchParams stretch = (LinearStretchParams) filter.getParam("stretchs");
389
                        
390
                        firstLoadBand(stretch.getBlue(), HistogramGraphicBase.BLUE);
391
                        firstLoadBand(stretch.getGreen(), HistogramGraphicBase.GREEN);
392
                        firstLoadBand(stretch.getRed(), HistogramGraphicBase.RED);
393
                        firstLoadBand(stretch.getRed(), HistogramGraphicBase.GRAY);
394
                        graphicsPanel.getRGB().setSelected(stretch.isRgb());
395
                }
396
                graphicsPanel.getInputHistogram().repaint();
397
        }
398
        
399
        /**
400
         * Coge los datos que hay en los histogramas y los aplica a la vista previa
401
         */
402
        public void updatePreview() {
403
                enhancedManager.updatePreview();
404
                enhancedManager.updateHistogramOut();
405
        }
406

    
407
        /**
408
         * Coge los datos que hay en los histogramas y los aplica en el histograma de salida
409
         */
410
        private void updateHistogramOut() {
411
                updateTypeSelected();
412
                enhancedManager.updatePreview();
413
                enhancedManager.updateHistogramOut();
414
        }
415
        
416
        /*
417
         * (non-Javadoc)
418
         * @see org.gvsig.raster.beans.canvas.IGCanvasListener#actionDataChanged(org.gvsig.raster.beans.canvas.GCanvasEvent)
419
         */
420
        public void actionDataChanged(GCanvasEvent e) {
421
                if (e.getKey().equals("minmax")) {
422
                        updatePreview();
423
                        return;
424
                }
425
                if (e.getKey().equals("line")) {
426
                        updatePreview();
427
                        return;
428
                }
429
        }
430

    
431
        /*
432
         * (non-Javadoc)
433
         * @see org.gvsig.raster.beans.canvas.IGCanvasListener#actionDataDragged(org.gvsig.raster.beans.canvas.GCanvasEvent)
434
         */
435
        public void actionDataDragged(GCanvasEvent e) {
436
                if (e.getKey().equals("minmax")) {
437
                        updateHistogramOut();
438
                        return;
439
                }
440
                if (e.getKey().equals("line")) {
441
                        updateHistogramOut();
442
                        return;
443
                }
444
        }
445

    
446
        /*
447
         * (non-Javadoc)
448
         * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
449
         */
450
        public void actionButtonPressed(ButtonsPanelEvent e) {
451
                switch (e.getButton()) {
452
                case ButtonsPanel.BUTTON_CANCEL:
453
                        cancel();
454
                        break;
455
                case ButtonsPanel.BUTTON_APPLY:
456
                        apply();
457
                        break;
458
                case ButtonsPanel.BUTTON_CLOSE:
459
                        enhancedDialog.close();
460
                        break;
461
                }
462
        }
463
        
464
        /**
465
         * Que acciones se ejecutaran al haber presionado el bot?n aceptar o aplicar
466
         */
467
        public void apply() {
468
                FLyrRaster lyr = enhancedDialog.getLayer();
469
                if (lyr == null)
470
                        return;
471

    
472
                String path = null;
473
                if (!enhancedDialog.getNewOrSaveLayerPanel().isOnlyViewSelected()) {
474
                        path = enhancedDialog.getNewOrSaveLayerPanel().getFileSelected();
475
                        if (path == null)
476
                                return;
477
                }
478

    
479

    
480
                // Array para guardar los filtros que se van a usar en forma de ParamStruct
481
                List<ParamStruct> listFilterUsed = enhancedDialog.getFilteredPreview().applySelectedFilters(null);
482

    
483
                if (enhancedDialog.getNewOrSaveLayerPanel().isOnlyViewSelected()) {
484
                        try {
485
                                ParamStruct.addSelectedFilters(lyr.getRender().getFilterList(), listFilterUsed);
486
                                enhancedDialog.getLayer().getRender().setFilterList(lyr.getRender().getFilterList());
487
                                enhancedDialog.getLayer().getMapContext().invalidate();
488
                        } catch (FilterTypeException e) {
489
                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, e);
490
                        } catch (FilterManagerException e) {
491
                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, e);
492
                        }
493
                } else {
494
                        FilterProcess filterProcess = new FilterProcess();
495
                        filterProcess.setActions(this);
496
                        filterProcess.addParam("rendering", lyr);
497
                        filterProcess.addParam("filename", path);
498
                        filterProcess.addParam("rasterdatasource", lyr.getDataStore());
499
                        filterProcess.addParam("layer", ((FLyrRaster) enhancedDialog.getLayer()));
500
                        filterProcess.addParam("listfilterused", listFilterUsed);
501
                        filterProcess.addParam("onlyrenderbands", Boolean.TRUE);
502
                        filterProcess.start();
503
                }
504
        }
505
        
506
        /**
507
         * Volvemos todo a la normalidad cuando se cancela
508
         */
509
        public void cancel() {
510
                if (enhancedDialog.getLayer() != null) {
511
                        status.restoreVisualStatus(enhancedDialog.getLayer());
512
                        enhancedDialog.getLayer().getMapContext().invalidate();
513
                }
514
        }
515
        
516

    
517
        /**
518
         * Acciones que se realizan al finalizar de crear los recortes de imagen.
519
         * Este m?todo es llamado por el thread TailRasterProcess al finalizar.
520
         */
521
        public void loadLayerInToc(String fileName) {
522
                if (!enhancedDialog.getNewOrSaveLayerPanel().isNewLayerSelected())
523
                        return;
524
                if(!new File(fileName).exists())
525
                        return;
526
                try {
527
                        RasterToolsUtil.loadLayer(enhancedDialog.getViewName(), fileName, null);
528
                } catch (RasterNotLoadException e) {
529
                        RasterToolsUtil.messageBoxError("error_cargar_capa", this, e);
530
                }
531

    
532
                if(enhancedDialog != null)
533
                        enhancedDialog.getNewOrSaveLayerPanel().updateNewLayerText();
534
        }
535

    
536
        /*
537
         * (non-Javadoc)
538
         * @see org.gvsig.raster.IProcessActions#end(java.lang.Object)
539
         */
540
        public void end(Object param) {
541
                loadLayerInToc((String) param);
542
        }
543
        
544
        public void interrupted() {}
545
}