Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / vectorizacion / filter / GrayConversionListener.java @ 27442

History | View | Annotate | Download (9.52 KB)

1 22398 nbrodin
/* 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 22866 nbrodin
                data.setPosterizationActive(true);
70
                panel.getPosterizationPanel().setComponentEnabled(true);
71 22398 nbrodin
                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 22866 nbrodin
                panel.getPosterizationPanel().getActive().setSelected(true);
98 22429 nbrodin
99
                panel.getNoisePanel().getActive().addActionListener(this);
100
                panel.getNoisePanel().getThreshold().addValueChangedListener(this);
101 22578 nbrodin
102
                panel.getModePanel().getActive().addActionListener(this);
103
                panel.getModePanel().getThreshold().addValueChangedListener(this);
104
105 24004 nbrodin
                //panel.getHighPassPanel().getActive().addActionListener(this);
106
                //panel.getHighPassPanel().getRadio().addValueChangedListener(this);
107 22398 nbrodin
        }
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 27442 nbrodin
        public void refreshPreview() {
133
                if(previewPanel != null) {
134
                        /*while(RasterTaskQueue.getProcessCount() > 0)
135
                                try {
136
                                        Thread.sleep(500);
137
                                } catch (InterruptedException e) {
138
                                }*/
139 22398 nbrodin
                        previewPanel.refreshPreview();
140 27442 nbrodin
                }
141 22398 nbrodin
        }
142
143
        /*
144
         * (non-Javadoc)
145
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
146
         */
147
        public void actionPerformed(ActionEvent e) {
148 22733 nbrodin
                if(!panel.isEnableValueChangedEvent())
149 22398 nbrodin
                        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 22429 nbrodin
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 22440 nbrodin
186 22578 nbrodin
                //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 24004 nbrodin
                /*if(e.getSource() == panel.getHighPassPanel().getActive()) {
198 22866 nbrodin
                        data.setHighPassActive(panel.getHighPassPanel().getActive().isSelected());
199 24004 nbrodin
                }*/
200 22578 nbrodin
201 22440 nbrodin
                refreshPreview();
202 22398 nbrodin
        }
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 22578 nbrodin
                        process.grayScaleProcess(previewRender, data);
219 22398 nbrodin
                } catch (FilterTypeException e) {
220
                        RasterToolsUtil.messageBoxError("error_filtering", null, e);
221
                }
222 27442 nbrodin
                //refreshPreview();
223 22398 nbrodin
        }
224
225
        /**
226
         * Captura los eventos de las cajas de texto
227
         */
228
        public void actionValueChanged(EventObject e) {
229 22733 nbrodin
                if(!panel.isEnableValueChangedEvent())
230 22429 nbrodin
                        return;
231
232 22398 nbrodin
                //Niveles de la posterizaci?n
233
                if(e.getSource() == panel.getPosterizationPanel().getLevels().getDataInputField()) {
234
                        try {
235
                                String value = panel.getPosterizationPanel().getLevels().getValue();
236
                                data.setPosterizationLevels((int)Double.parseDouble(value));
237
                                if((int)Double.parseDouble(value) == 2)
238
                                        panel.getPosterizationPanel().getThreshold().setControlEnabled(true);
239
                                else
240
                                        panel.getPosterizationPanel().getThreshold().setControlEnabled(false);
241
                        } catch (NumberFormatException ex) {
242
                                RasterToolsUtil.debug("Imposible convertir a entero", panel, ex);
243
                        }
244
                        refreshPreview();
245
                }
246
        }
247
248
        /*
249
         * (non-Javadoc)
250
         * @see org.gvsig.gui.beans.slidertext.listeners.SliderListener#actionValueChanged(org.gvsig.gui.beans.slidertext.listeners.SliderEvent)
251
         */
252
        public void actionValueChanged(SliderEvent e) {
253 22733 nbrodin
                if(!panel.isEnableValueChangedEvent())
254 22429 nbrodin
                        return;
255
256 22398 nbrodin
                //Evento de movimiento del slider de cambio de umbral de posterizaci?n
257 22429 nbrodin
                if(e.getSource() == panel.getPosterizationPanel().getThreshold())
258 22398 nbrodin
                        data.setPosterizationThreshold((int)panel.getPosterizationPanel().getThreshold().getValue());
259 22429 nbrodin
260
                //Evento de movimiento del slider de cambio de umbral de reducci?n de ruido
261
                if(e.getSource() == panel.getNoisePanel().getThreshold())
262
                        data.setNoiseThreshold((int)panel.getNoisePanel().getThreshold().getValue());
263
264 22578 nbrodin
                //Evento de movimiento del slider de cambio de umbral de moda
265
                if(e.getSource() == panel.getModePanel().getThreshold())
266
                        data.setModeThreshold((int)panel.getModePanel().getThreshold().getValue());
267
268 22398 nbrodin
                refreshPreview();
269
        }
270
271
        /**
272
         * Asigna el interfaz para que el proceso ejectute las acciones de finalizaci?n
273
         * al acabar.
274
         * @param endActions
275
         */
276
        public void setProcessActions(IProcessActions endActions) {
277
                if(process != null)
278
                        process.setProcessActions(endActions);
279
        }
280
281
        /*
282
         * (non-Javadoc)
283
         * @see org.gvsig.raster.IProcessActions#interrupted()
284
         */
285
        public void interrupted() {
286
        }
287
288
        public void actionValueDragged(SliderEvent e) {
289
        }
290
291
}