Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extRasterTools-SE / src / org / gvsig / rastertools / vectorizacion / filter / GrayConversionListener.java @ 30315

History | View | Annotate | Download (9.73 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.vectorizacion.filter;
20

    
21
import java.awt.event.ActionEvent;
22
import java.awt.event.ActionListener;
23
import java.util.EventObject;
24

    
25
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
26
import org.gvsig.gui.beans.datainput.DataInputContainerListener;
27
import org.gvsig.gui.beans.slidertext.listeners.SliderEvent;
28
import org.gvsig.gui.beans.slidertext.listeners.SliderListener;
29
import org.gvsig.raster.IProcessActions;
30
import org.gvsig.raster.beans.previewbase.PreviewBasePanel;
31
import org.gvsig.raster.filter.grayscale.GrayScaleFilter;
32
import org.gvsig.raster.grid.filter.FilterTypeException;
33
import org.gvsig.raster.util.RasterToolsUtil;
34
import org.gvsig.rastertools.vectorizacion.filter.ui.GrayConversionPanel;
35

    
36
/**
37
 * Clase para la gesti?n de eventos de los componentes gr?ficos del panel de preproceso
38
 * de vectorizaci?n.
39
 * 
40
 * 12/06/2008
41
 * @author Nacho Brodin nachobrodin@gmail.com
42
 */
43
public class GrayConversionListener implements ActionListener, DataInputContainerListener, SliderListener {
44
        private GrayConversionPanel              panel                    = null;
45
        private FLyrRasterSE                     lyr                      = null;
46
        private GrayConversionData               data                     = null;
47
        private GrayConversionProcess            process                  = null;
48
        private GrayConversionPreviewRender      previewRender            = null;
49
        private PreviewBasePanel                 previewPanel             = null;
50
        
51
        /**
52
         * Constructor. Asigna los listeners a los componentes
53
         * @param prepPanel
54
         */
55
        public GrayConversionListener(FLyrRasterSE lyr, GrayConversionPanel panel, GrayConversionData data) {
56
                this.lyr = lyr;
57
                setDataView(panel);
58
                setData(data);
59
        }
60
        
61
        /**
62
         * Acciones de inicializaci?n del componente
63
         */
64
        private void initActions() {
65
                getPreviewRender();
66
                if(lyr.getBandCount() == 1)
67
                        data.setBands(new String[]{"GRAY"});
68
                
69
                data.setPosterizationActive(true);
70
                panel.getPosterizationPanel().setComponentEnabled(true);
71
                data.updateObservers();
72
        }
73
        
74
        /**
75
         * Obtiene el render de la preview asociada
76
         * @return IPreviewRenderProcess
77
         */
78
        public GrayConversionPreviewRender getPreviewRender() {
79
                if(previewRender == null)
80
                        previewRender = new GrayConversionPreviewRender(lyr, data);
81
                return previewRender;
82
        }
83
        
84
        /**
85
         * Asigna la vista de datos. En este caso es el panel de preprocesado de la vectorizaci?n
86
         * @param prepPanel
87
         */
88
        public void setDataView(GrayConversionPanel prepPanel) {
89
                this.panel = prepPanel;
90
                process = new GrayConversionProcess(null);
91
                process.setSourceLayer(lyr);
92
                
93
                panel.getComboBands().addActionListener(this);
94
                panel.getPosterizationPanel().getActive().addActionListener(this);
95
                panel.getPosterizationPanel().getLevels().addValueChangedListener(this);
96
                panel.getPosterizationPanel().getThreshold().addValueChangedListener(this);
97
                panel.getPosterizationPanel().getActive().setSelected(true);
98
                
99
                panel.getNoisePanel().getActive().addActionListener(this);
100
                panel.getNoisePanel().getThreshold().addValueChangedListener(this);
101
                
102
                panel.getModePanel().getActive().addActionListener(this);
103
                panel.getModePanel().getThreshold().addValueChangedListener(this);
104
                
105
                //panel.getHighPassPanel().getActive().addActionListener(this);
106
                //panel.getHighPassPanel().getRadio().addValueChangedListener(this);
107
        }
108
        
109
        /**
110
         * Asigna el modelo de datos de los interfaces
111
         * @param coorData
112
         * @param grayConvData
113
         */
114
        public void setData(GrayConversionData grayConvData) {
115
                this.data = grayConvData;
116
                initActions();
117
        }
118
        
119
        /**
120
         * Asigna el panel con la previsualizaci?n
121
         * @param prev
122
         */
123
        public void setPreviewPanel(PreviewBasePanel prev) {
124
                this.previewPanel = prev;
125
        }
126
        
127
        /**
128
         * M?todo para refresco de preview. Este puede no existir en caso de 
129
         * usarse la funcionalidad de forma independiente por lo que habr? que
130
         * comprobar si existe antes del refresco.
131
         */
132
        public void refreshPreview() {
133
                if(previewPanel != null) {
134
                        /*while(RasterTaskQueue.getProcessCount() > 0)
135
                                try {
136
                                        Thread.sleep(500);
137
                                } catch (InterruptedException e) {
138
                                }*/
139
                        previewPanel.refreshPreview();
140
                }
141
        }
142
        
143
        /*
144
         * (non-Javadoc)
145
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
146
         */
147
        public void actionPerformed(ActionEvent e) {
148
                if(!panel.isEnableValueChangedEvent())
149
                        return;
150
                
151
                //Cambio combo de bandas seleccionadas para la conversi?n a B/W
152
                if(e.getSource() == panel.getComboBands()) {
153
                        String value = (String)panel.getComboBands().getSelectedItem();
154
                        if(value.compareTo("R") == 0) 
155
                                data.setBandType(GrayScaleFilter.R);
156
                        if(value.compareTo("G") == 0) 
157
                                data.setBandType(GrayScaleFilter.G);
158
                        if(value.compareTo("B") == 0) 
159
                                data.setBandType(GrayScaleFilter.B);
160
                        if(value.compareTo("RGB") == 0) 
161
                                data.setBandType(GrayScaleFilter.RGB);
162
                        if(value.compareTo("GRAY") == 0) 
163
                                data.setBandType(GrayScaleFilter.GRAY);
164
                }
165
                
166
                //Check de activar/desactivar posterizaci?n
167
                if(e.getSource() == panel.getPosterizationPanel().getActive()) {
168
                        data.setPosterizationActive(panel.getPosterizationPanel().getActive().isSelected());
169
                }
170
                
171
                //Slider para el umbral de posterizaci?n
172
                if(e.getSource() == panel.getPosterizationPanel().getThreshold().getSlider()) {
173
                        data.setPosterizationThreshold((int)panel.getPosterizationPanel().getThreshold().getValue());
174
                }
175
                
176
                //Check de activar/desactivar ruido
177
                if(e.getSource() == panel.getNoisePanel().getActive()) {
178
                        data.setNoiseActive(panel.getNoisePanel().getActive().isSelected());
179
                }
180
                
181
                //Slider para el umbral de ruido
182
                if(e.getSource() == panel.getNoisePanel().getThreshold().getSlider()) {
183
                        data.setNoiseThreshold((int)panel.getNoisePanel().getThreshold().getValue());
184
                }
185
                
186
                //Check de activar/desactivar moda
187
                if(e.getSource() == panel.getModePanel().getActive()) {
188
                        data.setModeActive(panel.getModePanel().getActive().isSelected());
189
                }
190
                
191
                //Slider para el umbral de moda
192
                if(e.getSource() == panel.getModePanel().getThreshold().getSlider()) {
193
                        data.setModeThreshold((int)panel.getModePanel().getThreshold().getValue());
194
                }
195
                
196
                //Check de activar/desactivar el paso alto
197
                /*if(e.getSource() == panel.getHighPassPanel().getActive()) {
198
                        data.setHighPassActive(panel.getHighPassPanel().getActive().isSelected());
199
                }*/
200
                
201
                refreshPreview();
202
        }
203
        
204
        /**
205
         * Asigna la capa fuente para el proceso
206
         * @param lyr
207
         */
208
        public void setProcessSource(FLyrRasterSE lyr) {
209
                if(process != null)
210
                        process.setSourceLayer(lyr);
211
        }
212
        
213
        /**
214
         * Aplica las acciones
215
         */
216
        public void apply() {
217
                try {
218
                        process.grayScaleProcess(previewRender, data);
219
                } catch (FilterTypeException e) {
220
                        RasterToolsUtil.messageBoxError("error_filtering", null, e);
221
                }
222
                //refreshPreview();
223
        }
224
        
225
        /**
226
         * Captura los eventos de las cajas de texto
227
         */
228
        public void actionValueChanged(EventObject e) {
229
                if(!panel.isEnableValueChangedEvent())
230
                        return;
231
                
232
                //Niveles de la posterizaci?n
233
                if(e.getSource() == panel.getPosterizationPanel().getLevels().getDataInputField()) {
234
                        String value = panel.getPosterizationPanel().getLevels().getValue();
235
                        try {
236
                                double doubleValue = Double.valueOf(value);
237
                                if(doubleValue < 2)
238
                                        throw new NumberFormatException();
239
                        } catch (NumberFormatException ex) {
240
                                panel.setEnableValueChangedEvent(false);
241
                                value = 2 + "";
242
                                panel.getPosterizationPanel().getLevels().setValue(value);
243
                                panel.setEnableValueChangedEvent(true);
244
                        }
245
                        
246
                        data.setPosterizationLevels((int)Double.parseDouble(value));
247
                        if((int)Double.parseDouble(value) == 2)
248
                                panel.getPosterizationPanel().getThreshold().setControlEnabled(true);
249
                        else
250
                                panel.getPosterizationPanel().getThreshold().setControlEnabled(false);
251
                        refreshPreview();
252
                }
253
        }
254

    
255
        /*
256
         * (non-Javadoc)
257
         * @see org.gvsig.gui.beans.slidertext.listeners.SliderListener#actionValueChanged(org.gvsig.gui.beans.slidertext.listeners.SliderEvent)
258
         */
259
        public void actionValueChanged(SliderEvent e) {
260
                if(!panel.isEnableValueChangedEvent())
261
                        return;
262
                
263
                //Evento de movimiento del slider de cambio de umbral de posterizaci?n
264
                if(e.getSource() == panel.getPosterizationPanel().getThreshold()) 
265
                        data.setPosterizationThreshold((int)panel.getPosterizationPanel().getThreshold().getValue());
266
                
267
                //Evento de movimiento del slider de cambio de umbral de reducci?n de ruido
268
                if(e.getSource() == panel.getNoisePanel().getThreshold()) 
269
                        data.setNoiseThreshold((int)panel.getNoisePanel().getThreshold().getValue());
270
                
271
                //Evento de movimiento del slider de cambio de umbral de moda
272
                if(e.getSource() == panel.getModePanel().getThreshold()) 
273
                        data.setModeThreshold((int)panel.getModePanel().getThreshold().getValue());
274
                
275
                refreshPreview();
276
        }
277
        
278
        /**
279
         * Asigna el interfaz para que el proceso ejectute las acciones de finalizaci?n
280
         * al acabar.
281
         * @param endActions
282
         */
283
        public void setProcessActions(IProcessActions endActions) {
284
                if(process != null)
285
                        process.setProcessActions(endActions);
286
        }
287

    
288
        /*
289
         * (non-Javadoc)
290
         * @see org.gvsig.raster.IProcessActions#interrupted()
291
         */
292
        public void interrupted() {
293
        }
294

    
295
        public void actionValueDragged(SliderEvent e) {
296
        }
297

    
298
}