Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / enhanced / ui / EnhancedListener.java @ 19628

History | View | Annotate | Download (15.8 KB)

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

    
21
import java.awt.event.ActionEvent;
22
import java.awt.event.ActionListener;
23
import java.io.File;
24
import java.util.ArrayList;
25

    
26
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
27
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
28
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
29
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
30
import org.gvsig.raster.IProcessActions;
31
import org.gvsig.raster.beans.canvas.GCanvasEvent;
32
import org.gvsig.raster.beans.canvas.IGCanvasListener;
33
import org.gvsig.raster.beans.canvas.layers.GraphicHistogram;
34
import org.gvsig.raster.beans.canvas.layers.functions.DensitySlicingLine;
35
import org.gvsig.raster.beans.canvas.layers.functions.StraightLine;
36
import org.gvsig.raster.beans.previewbase.PreviewBasePanel;
37
import org.gvsig.raster.dataset.IRasterDataSource;
38
import org.gvsig.raster.dataset.Params;
39
import org.gvsig.raster.grid.filter.FilterTypeException;
40
import org.gvsig.raster.grid.filter.enhancement.EqualizationFilter;
41
import org.gvsig.raster.hierarchy.IRasterRendering;
42
import org.gvsig.raster.util.RasterNotLoadException;
43
import org.gvsig.raster.util.RasterToolsUtil;
44
import org.gvsig.raster.util.process.FilterProcess;
45
import org.gvsig.rastertools.enhanced.graphics.HistogramGraphicBase;
46
import org.gvsig.rastertools.enhanced.graphics.HistogramGraphicBase.HistogramStatus;
47

    
48
import com.iver.andami.PluginServices;
49
/**
50
 * Gestor de eventos de los paneles de gr?ficas y controles.
51
 * 
52
 * 21/02/2008
53
 * @author Nacho Brodin nachobrodin@gmail.com
54
 */
55
public class EnhancedListener implements ActionListener, IGCanvasListener, ButtonsPanelListener, IProcessActions {
56
        private SelectorsPanel   selectorsPanel  = null;
57
        private GraphicsPanel    graphicsPanel   = null;
58
        private PreviewBasePanel enhancedPanel   = null;
59
        private EnhancedDialog   enhancedDialog  = null;
60
        private PreviewFiltering filteredPreview = null;
61
        private EnhancedHistogramController  enhancedManager = null;
62
        
63
        /**
64
         * Constructor
65
         * @param selectorsPanel Panel con los selectores de opciones
66
         * @param graphicsPanel Panel con los gr?ficos
67
         * @param enhancedPanel Panel base con la previsualizaci?n
68
         * @param enhancedDialog Dialogo general
69
         * @param filteredPreview Preprocesado para la preview
70
         */
71
        public EnhancedListener(SelectorsPanel selectorsPanel, 
72
                                                        GraphicsPanel graphicsPanel, 
73
                                                        PreviewBasePanel enhancedPanel, 
74
                                                        EnhancedDialog enhancedDialog, 
75
                                                        PreviewFiltering filteredPreview) {
76
                this.selectorsPanel = selectorsPanel;
77
                this.graphicsPanel = graphicsPanel;
78
                this.enhancedPanel = enhancedPanel;
79
                this.enhancedDialog = enhancedDialog;
80
                this.filteredPreview = filteredPreview;
81
                
82
                
83
                enhancedManager = new EnhancedHistogramController(graphicsPanel.getInputHistogram(), graphicsPanel.getOutputHistogram(), enhancedDialog);
84
                
85
                selectorsPanel.getHistogramType().addActionListener(this);
86
                selectorsPanel.getDrawType().addActionListener(this);
87
                selectorsPanel.getBand(null).addActionListener(this);
88
                selectorsPanel.getEnhancedType().addActionListener(this);
89
                graphicsPanel.getLevels().addActionListener(this);
90
                graphicsPanel.getRGB().addActionListener(this);
91
        }
92
        
93
        /*
94
         * (non-Javadoc)
95
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
96
         */
97
        public void actionPerformed(ActionEvent e) {
98
                //Cambio del tipo de de dibujado del histograma
99
                if(e.getSource() == selectorsPanel.getDrawType()) {
100
                        if(((String)selectorsPanel.getDrawType().getSelectedItem()).equals("Fill")) {
101
                                graphicsPanel.getInputHistogram().setType(GraphicHistogram.TYPE_FILL);
102
                                graphicsPanel.getOutputHistogram().setType(GraphicHistogram.TYPE_FILL);
103
                        }
104
                        if(((String)selectorsPanel.getDrawType().getSelectedItem()).equals("Line")) {
105
                                graphicsPanel.getInputHistogram().setType(GraphicHistogram.TYPE_LINE);
106
                                graphicsPanel.getOutputHistogram().setType(GraphicHistogram.TYPE_LINE);
107
                        }
108
                        graphicsPanel.getInputHistogram().getCanvas().repaint();
109
                        graphicsPanel.getOutputHistogram().getCanvas().repaint();
110
                }
111

    
112
                // Cambio el tipo de visualizacion del histograma
113
                if (e.getSource() == selectorsPanel.getHistogramType()) {
114
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals("Standard")) {
115
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_LINEAL);
116
                        }
117
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals("Cumulative")) {
118
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_ACUMMULATED);
119
                        }
120
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals("Logarithmic")) {
121
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_LOGARITHMIC);
122
                        }
123
                        if (((String) selectorsPanel.getHistogramType().getSelectedItem()).equals("Cumulative Logarithmic")) {
124
                                graphicsPanel.getOutputHistogram().setHistogramType(GraphicHistogram.VIEW_ACUMMULATEDLOG);
125
                        }
126
                        graphicsPanel.getOutputHistogram().getCanvas().repaint();
127
                }
128
                
129
                //Cambio de banda
130
                if(e.getSource() == selectorsPanel.getBand(null)) {
131
                        if(((String)selectorsPanel.getBand(null).getSelectedItem()).equals("Red")) {
132
                                graphicsPanel.getInputHistogram().setHistogramDrawed(HistogramGraphicBase.RED);
133
                                graphicsPanel.getOutputHistogram().setHistogramDrawed(HistogramGraphicBase.RED);
134
                        }
135
                        if(((String)selectorsPanel.getBand(null).getSelectedItem()).equals("Green")) {
136
                                graphicsPanel.getInputHistogram().setHistogramDrawed(HistogramGraphicBase.GREEN);
137
                                graphicsPanel.getOutputHistogram().setHistogramDrawed(HistogramGraphicBase.GREEN);
138
                        }
139
                        if(((String)selectorsPanel.getBand(null).getSelectedItem()).equals("Blue")) {
140
                                graphicsPanel.getInputHistogram().setHistogramDrawed(HistogramGraphicBase.BLUE);
141
                                graphicsPanel.getOutputHistogram().setHistogramDrawed(HistogramGraphicBase.BLUE);
142
                        }
143

    
144
                        HistogramStatus status = graphicsPanel.getInputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED);
145

    
146
                        if (status.getBaseFunction().getClass().equals(DensitySlicingLine.class))
147
                                selectorsPanel.getEnhancedType().setSelectedItem("Level-slice");
148

    
149
                        if (status.getBaseFunction().getClass().equals(StraightLine.class))
150
                                selectorsPanel.getEnhancedType().setSelectedItem("Lineal");
151

    
152
                        if (status.getBaseFunction().getClass().equals(EqualizationFilter.class))
153
                                selectorsPanel.getEnhancedType().setSelectedItem("Equalization");
154

    
155
                        
156
                        status = graphicsPanel.getOutputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED);
157

    
158
                        switch (status.getGraphicHistogram().getType()) {
159
                                case GraphicHistogram.TYPE_FILL:
160
                                        selectorsPanel.getDrawType().setSelectedItem("Fill");
161
                                        break;
162
                                default:
163
                                        selectorsPanel.getDrawType().setSelectedItem("Line");
164
                                        break;
165
                        }
166

    
167
                        switch (status.getGraphicHistogram().getTypeViewed()) {
168
                                case GraphicHistogram.VIEW_ACUMMULATED:
169
                                        selectorsPanel.getHistogramType().setSelectedItem("Cumulative");
170
                                        break;
171
                                case GraphicHistogram.VIEW_LOGARITHMIC:
172
                                        selectorsPanel.getHistogramType().setSelectedItem("Logarithmic");
173
                                        break;
174
                                case GraphicHistogram.VIEW_ACUMMULATEDLOG:
175
                                        selectorsPanel.getHistogramType().setSelectedItem("Cumulative Logarithmic");
176
                                        break;
177
                                default:
178
                                        selectorsPanel.getHistogramType().setSelectedItem("Standard");
179
                                        break;
180
                        }
181
                }
182
                
183
                //Cambio de operaci?n
184
                if(e.getSource() == selectorsPanel.getEnhancedType()) {
185
                        graphicsPanel.setLevelsEnabled(false);
186
                        
187
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals("Lineal")) {
188
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_LINEAL);
189
                                updatePreview();
190
                        }
191
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals("Gaussian")) {
192

    
193
                        }
194
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals("Logaritmic")) {
195

    
196
                        }
197
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals("Exponential")) {
198

    
199
                        }
200
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals("Equalization")) {
201
                                int[] renderBands = enhancedDialog.getLayer().getRender().getRenderBands();
202
                                String values = "";
203
                                for (int i = 0; i < renderBands.length; i++) 
204
                                        values += renderBands[i] + " ";
205
                                values = values.trim();
206
                                Params params = new Params();
207
                                params.setParam("Histogram", graphicsPanel.getHistogram(), -1, null);
208
                                params.setParam("RenderBands", values, -1, null);
209
                                params.setParam("EcualizedBands", new int[]{0, 1, 2}, -1, null);
210
                                filteredPreview.addNewParam("equalization", params, EqualizationFilter.class);
211
                        }
212
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals("Square-root")) {
213

    
214
                        }
215
                        if(((String)selectorsPanel.getEnhancedType().getSelectedItem()).equals("Level-slice")) {
216
                                graphicsPanel.setLevelsEnabled(true);
217
                                graphicsPanel.getInputHistogram().setFunction(GraphicHistogram.FUNCTION_DENSITY);
218

    
219
                                // Establece el numero de niveles en el cuadro de texto
220
                                HistogramStatus status = graphicsPanel.getInputHistogram().getHistogramStatus(HistogramGraphicBase.DRAWED);
221
                                graphicsPanel.getLevels().setValue(new Long(((DensitySlicingLine) status.getBaseFunction()).getLevels()));
222
                                updatePreview();
223
                        }
224
                }
225
                
226
                //Cambio de tipo (estandar/acumulado)
227
                if(e.getSource() == selectorsPanel.getHistogramType()) {
228
                        if(((String)selectorsPanel.getHistogramType().getSelectedItem()).equals("Standard")) {
229
                                
230
                        }
231
                        if(((String)selectorsPanel.getHistogramType().getSelectedItem()).equals("Cumulative")) {
232
                                
233
                        }
234
                }
235
                
236
                //Cambio en el n?mero de niveles
237
                if(e.getSource() == graphicsPanel.getLevels()) {
238
                        Long lValue = (Long)graphicsPanel.getLevels().getValue();
239
                        int value = lValue.intValue();
240
                        if(value > 30 || value < 2) {
241
                                RasterToolsUtil.messageBoxInfo("range_wrong" + " [2-30]", null);
242
                                if(value > 30)
243
                                        value = 30;
244
                                if(value < 2)
245
                                        value = 2;
246
                        }
247
                        graphicsPanel.getLevels().setValue(new Long(value));
248
                        try {
249
                                graphicsPanel.getInputHistogram().setLevel(value);
250
                                updatePreview();
251
                        } catch (NumberFormatException exc) {
252
                                //No asignamos el nivel
253
                        }
254
                }
255
                
256
                manageMainButtons(e);
257
        }
258
        
259
        /**
260
         * Gestiona los eventos de los botones principales (Aceptar, Aplicar, Cancelar)
261
         * @param e
262
         */
263
        private void manageMainButtons(ActionEvent e) {
264
                if(e.getSource() == enhancedPanel.getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT)) {
265
                        /*Params params = new Params();
266
                        params.setParam("TailTrim",
267
                                        new Double(Math.round(0 * 100.0)),
268
                                        Params.SLIDER,
269
                                        new String[]{ "0", "100", "0", "1", "25" });
270
                        params.setParam("Stretch",
271
                                        new Double[][] {{new Double(0), new Double(1269)}, {new Double(0), new Double(1525)}, {new Double(0), new Double(888)}},
272
                                        Params.CHOICE,
273
                                        null);
274
                        params.setParam("StretchRGB",
275
                                        new Integer[] {new Integer(255)},
276
                                        Params.CHOICE,
277
                                        null);
278
                        filteredPreview.addNewParam("param1", params, LinearStretchEnhancementFilter.class);*/
279
                }
280
                if(e.getSource() == enhancedPanel.getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY)) {
281
                        
282
                }
283
                if(e.getSource() == enhancedPanel.getButtonsPanel().getButton(ButtonsPanel.BUTTON_CANCEL)) {
284
                        enhancedDialog.close();
285
                }
286
        }
287

    
288
        /**
289
         * Coge los datos que hay en los histogramas y los aplica a la vista previa
290
         */
291
        private void updatePreview() {
292
                enhancedManager.updatePreview();
293
                enhancedManager.updateHistogramOut();
294
        }
295

    
296
        /**
297
         * Coge los datos que hay en los histogramas y los aplica en el histograma de salida
298
         */
299
        private void updateHistogramOut() {
300
                enhancedManager.updatePreview();
301
                enhancedManager.updateHistogramOut();
302
        }
303
        
304
        /*
305
         * (non-Javadoc)
306
         * @see org.gvsig.raster.beans.canvas.IGCanvasListener#actionDataChanged(org.gvsig.raster.beans.canvas.GCanvasEvent)
307
         */
308
        public void actionDataChanged(GCanvasEvent e) {
309
                if (e.getKey().equals("minmax")) {
310
                        updatePreview();
311
                        return;
312
                }
313
                if (e.getKey().equals("line")) {
314
                        updatePreview();
315
                        return;
316
                }
317
        }
318

    
319
        /*
320
         * (non-Javadoc)
321
         * @see org.gvsig.raster.beans.canvas.IGCanvasListener#actionDataDragged(org.gvsig.raster.beans.canvas.GCanvasEvent)
322
         */
323
        public void actionDataDragged(GCanvasEvent e) {
324
                if (e.getKey().equals("minmax")) {
325
                        updateHistogramOut();
326
                        return;
327
                }
328
                if (e.getKey().equals("line")) {
329
                        updateHistogramOut();
330
                        return;
331
                }
332
        }
333

    
334
        /*
335
         * (non-Javadoc)
336
         * @see org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener#actionButtonPressed(org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent)
337
         */
338
        public void actionButtonPressed(ButtonsPanelEvent e) {
339
                switch (e.getButton()) {
340
                        case ButtonsPanel.BUTTON_ACCEPT:
341
                                apply();
342
                                enhancedDialog.close();
343
                                break;
344
                        case ButtonsPanel.BUTTON_CANCEL:
345
                                cancel();
346
                                enhancedDialog.close();
347
                                break;
348
                        case ButtonsPanel.BUTTON_APPLY:
349
                                apply();
350
                                break;
351
                }
352
        }
353
        
354
        /**
355
         * Que acciones se ejecutaran al haber presionado el bot?n aceptar o aplicar
356
         */
357
        public void apply() {
358
                IRasterDataSource raster = ((FLyrRasterSE) enhancedDialog.getLayer()).getDataSource();
359
                if (raster == null)
360
                        return;
361

    
362
                String path = null;
363
                if (!enhancedDialog.getNewOrSaveLayerPanel().getRadioOnlyView().isSelected()) {
364
                        path = enhancedDialog.getNewOrSaveLayerPanel().getFileSelected();
365
                        if (path == null)
366
                                return;
367
                }
368

    
369
                //Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender();
370
                IRasterRendering rendering = (IRasterRendering) enhancedDialog.getLayer();
371

    
372
                // Array para guardar los filtros que se van a usar en forma de ParamStruct
373
                ArrayList listFilterUsed = enhancedDialog.getFilteredPreview().applyFilters(rendering);
374

    
375
                if (enhancedDialog.getNewOrSaveLayerPanel().getRadioOnlyView().isSelected()) {
376
                        try {
377
                                FilterProcess.addSelectedFilters(rendering.getRenderFilterList(), listFilterUsed);
378
                                ((FLyrRasterSE) enhancedDialog.getLayer()).setRenderFilterList(rendering.getRenderFilterList());
379
                                enhancedDialog.getLayer().getMapContext().invalidate();
380
                        } catch (FilterTypeException e) {
381
                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, e);
382
                        }
383
                } else {
384
                        FilterProcess filterProcess = new FilterProcess();
385
                        filterProcess.setActions(this);
386
                        filterProcess.addParam("rendering", rendering);
387
                        filterProcess.addParam("filename", path);
388
                        filterProcess.addParam("rasterdatasource", raster);
389
                        filterProcess.addParam("listfilterused", listFilterUsed);
390
                        filterProcess.start();
391
                }
392
        }
393
        
394
        /**
395
         * Volvemos todo a la normalidad cuando se cancela
396
         */
397
        public void cancel() {
398
                if (enhancedDialog.getLayer() != null)
399
                        enhancedDialog.getLayer().getMapContext().invalidate();
400
        }
401
        
402

    
403
        /**
404
         * Acciones que se realizan al finalizar de crear los recortes de imagen.
405
         * Este m?todo es llamado por el thread TailRasterProcess al finalizar.
406
         */
407
        public void loadLayerInToc(String fileName) {
408
                if (!enhancedDialog.getNewOrSaveLayerPanel().getRadioNewLayer().isSelected())
409
                        return;
410
                if(!new File(fileName).exists())
411
                        return;
412
                try {
413
                        RasterToolsUtil.loadLayer(enhancedDialog.getViewName(), fileName, null);
414
                } catch (RasterNotLoadException e) {
415
                        RasterToolsUtil.messageBoxError("error_cargar_capa", this, e);
416
                }
417

    
418
                if(enhancedDialog != null)
419
                        enhancedDialog.getNewOrSaveLayerPanel().updateNewLayerText();
420
        }
421

    
422
        /*
423
         * (non-Javadoc)
424
         * @see org.gvsig.raster.IProcessActions#end(java.lang.Object)
425
         */
426
        public void end(Object param) {
427
                loadLayerInToc((String) param);
428
        }
429
        
430
        public void interrupted() {}
431
}