Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / properties / panels / EnhancedControl.java @ 12154

History | View | Annotate | Download (8.75 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.properties.panels;
20

    
21
import java.awt.event.ActionEvent;
22
import java.awt.event.ActionListener;
23
import java.awt.event.KeyEvent;
24
import java.awt.event.KeyListener;
25
import java.util.ArrayList;
26

    
27
import javax.swing.JCheckBox;
28
import javax.swing.event.ChangeEvent;
29
import javax.swing.event.ChangeListener;
30

    
31
import org.gvsig.raster.dataset.IStatistics;
32
import org.gvsig.raster.grid.filter.RasterFilterList;
33
import org.gvsig.raster.grid.filter.RasterFilterListManager;
34
import org.gvsig.raster.grid.filter.enhancement.BrightnessContrastListManager;
35
import org.gvsig.raster.grid.filter.enhancement.BrightnessFilter;
36
import org.gvsig.raster.grid.filter.enhancement.ContrastFilter;
37
import org.gvsig.raster.grid.filter.enhancement.EnhancementListManager;
38
import org.gvsig.raster.grid.filter.enhancement.LinearEnhancementFilter;
39
import org.gvsig.raster.grid.filter.statistics.TailTrimFilter;
40
import org.gvsig.raster.shared.IRasterDataset;
41
import org.gvsig.raster.shared.IRasterRendering;
42
import org.gvsig.rastertools.properties.dialog.RegistrableTabPanel;
43

    
44
import com.iver.cit.gvsig.fmap.layers.FLayer;
45
/**
46
 * Clase que hace de interfaz entre los objetos que contienen la informaci?n de 
47
 * realce y el panel. 
48
 *  
49
 * @author Nacho Brodin (nachobrodin@gmail.com)
50
 */
51
public class EnhancedControl {
52
        private EnhancedPanel                   tPanel     = null;
53
        private RasterFilterList                filterList = null;
54
        private EnhancedWithTrimPanel           ePanel     = null;
55
        private EnhancedBrightnessContrastPanel bcPanel    = null;
56
        private IRasterDataset                  dataset    = null;
57
        private FLayer                          lyr        = null;
58

    
59
        /**
60
         * Manejador de eventos de los slider de brillo y contraste.
61
         * @author Nacho Brodin (nachobrodin@gmail.com)
62
         */
63
        class BrightnessContrastListener implements KeyListener, ChangeListener, ActionListener {
64
                JCheckBox active = null;
65
                /**
66
                 * Constructor. Registra los listener
67
                 * @param panel
68
                 */
69
                public BrightnessContrastListener(EnhancedBrightnessContrastPanel panel) {
70
                        panel.addBrightnessChangeListener(this);
71
                        panel.addContrastChangeListener(this);
72
                        panel.addBrightnessKeyListener(this);
73
                        panel.addContrastKeyListener(this);
74
                        active = panel.getActive();
75
                        active.addActionListener(this);
76
                }
77

    
78
                public void keyPressed(KeyEvent e) {
79
                }
80

    
81
                public void keyReleased(KeyEvent e) {
82
                        if (e.getKeyCode() == 10)
83
                                onlyApply();
84
                }
85

    
86
                public void keyTyped(KeyEvent e) {
87
                }
88

    
89
                public void stateChanged(ChangeEvent e) {
90
                        onlyApply();
91
                }
92

    
93
                public void actionPerformed(ActionEvent e) {
94
                        if (e.getSource() == active)
95
                                onlyApply();
96
                }
97
        }
98

    
99
        /**
100
         * Manejador de eventos del panel EnhancedWithTrim.
101
         *
102
         * @version 14/06/2007
103
         * @author Borja S?nchez Zamorano (borja.sanchez@iver.es)
104
         */
105
        class EnhancedWithTrimListener implements ActionListener {
106
                JCheckBox active = null;
107
                /**
108
                 * Constructor. Registra los listener
109
                 * @param panel
110
                 */
111
                public EnhancedWithTrimListener(EnhancedWithTrimPanel panel) {
112
                        active = panel.getActive();
113
                        active.addActionListener(this);
114
                }
115

    
116
                public void actionPerformed(ActionEvent e) {
117
                        if (e.getSource() == active)
118
                                onlyApply();
119
                }
120
        }
121

    
122
        /**
123
         * Constructor
124
         * @param tp
125
         */
126
        public EnhancedControl(EnhancedPanel tp, IRasterDataset dataset, FLayer lyr, RasterFilterList rfl) {
127
                this.tPanel = tp;
128
                this.dataset = dataset;
129
                this.filterList = rfl;
130
                this.lyr = lyr;
131
                this.bcPanel = tPanel.getBrightnessContrastPanel();
132
                this.ePanel = tPanel.getEnhancedWithTrimPanel();
133
                new BrightnessContrastListener(bcPanel);
134
                new EnhancedWithTrimListener(ePanel);
135

    
136
                saveStatus();
137

    
138
                setValuesFromFilterToPanel();
139
        }
140

    
141
        /**
142
         * Carga los valores del panel desde el filtro
143
         */
144
        private void setValuesFromFilterToPanel() {
145
                // BRILLO
146
                BrightnessFilter bFilter = (BrightnessFilter) filterList.getByName(BrightnessFilter.names[0]);
147
                if (bFilter != null)
148
                        bcPanel.setBrightnessValue((double) bFilter.getBrightnessIncrease());
149
                else
150
                        bcPanel.setBrightnessValue(0);
151

    
152
                // CONTRASTE
153
                ContrastFilter cFilter = (ContrastFilter) filterList.getByName(ContrastFilter.names[0]);
154
                if (cFilter != null)
155
                        bcPanel.setContrastValue((double) cFilter.getContrastIncrease());
156
                else
157
                        bcPanel.setContrastValue(0);
158

    
159
                if (bFilter != null || cFilter != null)
160
                        bcPanel.setControlEnabled(true);
161
                else
162
                        bcPanel.setControlEnabled(false);
163

    
164
                // REALCE LINEAL
165
                LinearEnhancementFilter eFilter = (LinearEnhancementFilter) filterList.getByName(LinearEnhancementFilter.names[0]);
166
                if (eFilter != null) {
167
                        ePanel.setControlEnabled(true);
168
                        if (eFilter.getRemoveEnds().booleanValue())
169
                                ePanel.setRemoveEndsActive(true);
170
                        else
171
                                ePanel.setRemoveEndsActive(false);
172
                        if (eFilter.getTailTrim().doubleValue() != 0) {
173
                                ePanel.setTailTrimCheckActive(true);
174
                                ePanel.setTailTrimValue(eFilter.getTailTrim().doubleValue() * 100);
175
                        } else {
176
                                ePanel.setTailTrimCheckActive(false);
177
                                ePanel.setTailTrimValue(0);
178
                        }
179
                } else {
180
                        ePanel.setControlEnabled(false);
181
                        ePanel.setRemoveEndsActive(false);
182
                        ePanel.setTailTrimCheckActive(false);
183
                        ePanel.setTailTrimValue(0);
184
                }
185
        }
186

    
187
        /**
188
         * Carga los valores del filtro desde el panel
189
         */
190
        private void setValuesFromPanelToFilter() {
191
                RasterFilterListManager manager = new RasterFilterListManager(filterList);
192
                int insertionModeEnhanced = filterList.isActive(LinearEnhancementFilter.names[0]) ? RasterFilterList.MODIFY_LAST : RasterFilterList.ADD_END_AND_DELETE;
193
                int insertionModeBrightness = filterList.isActive(BrightnessFilter.names[0]) ? RasterFilterList.MODIFY_LAST : RasterFilterList.ADD_END_AND_DELETE;
194
                int insertionModeContrast = filterList.isActive(ContrastFilter.names[0]) ? RasterFilterList.MODIFY_LAST : RasterFilterList.ADD_END_AND_DELETE;
195

    
196
                // REALCE
197
                EnhancementListManager eManager = (EnhancementListManager) manager.getManagerByClass(EnhancementListManager.class);
198
                if (ePanel.getActive().isSelected()) {
199
                        IStatistics stats = dataset.getGeoRasterMultiDataset().getStatistics();
200
                        int[] renderBands = new int[] { 0, 1, 2 };
201
                        if (lyr instanceof IRasterRendering)
202
                                renderBands = ((IRasterRendering) lyr).getRender().getRenderBands();
203
                        if (!ePanel.isTailTrimCheckSelected() || ePanel.getTrimValue() == 0) // En este caso siempre es necesario el m?ximo y m?nimo
204
                                eManager.addEnhancedFilter(ePanel.isRemoveEndsSelected(), stats, 0, insertionModeEnhanced, renderBands);
205
                        else
206
                                eManager.addEnhancedFilter(ePanel.isRemoveEndsSelected(), stats, (double) (ePanel.getTrimValue() / 100D), insertionModeEnhanced, renderBands);
207
                } else {
208
                        filterList.remove(LinearEnhancementFilter.class);
209
                        filterList.remove(TailTrimFilter.class);
210
                }
211

    
212
                // BRILLO Y CONTRASTE
213
                BrightnessContrastListManager bcManager = (BrightnessContrastListManager) manager.getManagerByClass(BrightnessContrastListManager.class);
214

    
215
                if (bcPanel.getActive().isSelected() && ((int) bcPanel.getBrightnessValue() != 0))
216
                        bcManager.addBrightnessFilter((int) bcPanel.getBrightnessValue(), insertionModeBrightness);
217
                else
218
                        filterList.remove(BrightnessFilter.class);
219

    
220
                if (bcPanel.getActive().isSelected() && ((int) bcPanel.getContrastValue() != 0))
221
                        bcManager.addContrastFilter((int) bcPanel.getContrastValue(), insertionModeContrast);
222
                else
223
                        filterList.remove(ContrastFilter.class);
224

    
225
                // Redibujamos
226
                if (lyr != null)
227
                        lyr.getMapContext().invalidate();
228
        }
229

    
230
        /**
231
         * Acciones a ejecutar cuando se acepta
232
         */
233
        public void accept() {
234
                setValuesFromPanelToFilter();
235
        }
236

    
237
        /**
238
         * Acciones a ejecutar cuando se aplica
239
         */
240
        public void apply() {
241
                onlyApply();
242
                saveStatus();
243
        }
244

    
245
        /**
246
         * Acciones a ejecutar cuando se aplica
247
         */
248
        public void onlyApply() {
249
                setValuesFromPanelToFilter();
250
        }
251

    
252
        /**
253
         * Acciones a ejecutar cuando se cancela
254
         */
255
        public void cancel() {
256
                restoreStatus();
257
        }
258

    
259
        public void saveStatus() {
260
                RegistrableTabPanel.initialProperties.put("filterStatus", filterList.getStatusCloned());
261
        }
262

    
263
        public void restoreStatus() {
264
                filterList.setStatus((ArrayList) RegistrableTabPanel.initialProperties.get("filterStatus"));
265

    
266
                if (lyr != null)
267
                        lyr.getMapContext().invalidate();
268
        }
269
}