Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / properties / panels / EnhancedControl.java @ 11787

History | View | Annotate | Download (8.28 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.KeyEvent;
22
import java.awt.event.KeyListener;
23
import java.awt.event.MouseEvent;
24
import java.awt.event.MouseListener;
25

    
26
import javax.swing.JOptionPane;
27

    
28
import org.gvsig.raster.dataset.FileNotOpenException;
29
import org.gvsig.raster.dataset.IStatistics;
30
import org.gvsig.raster.dataset.RasterDriverException;
31
import org.gvsig.raster.grid.filter.RasterFilterList;
32
import org.gvsig.raster.grid.filter.RasterFilterListManager;
33
import org.gvsig.raster.grid.filter.enhancement.BrightnessContrastListManager;
34
import org.gvsig.raster.grid.filter.enhancement.BrightnessFilter;
35
import org.gvsig.raster.grid.filter.enhancement.ContrastFilter;
36
import org.gvsig.raster.grid.filter.enhancement.EnhancementListManager;
37
import org.gvsig.raster.grid.filter.enhancement.LinearEnhancementFilter;
38
import org.gvsig.raster.grid.filter.statistics.StatisticsListManager;
39
import org.gvsig.raster.shared.IRasterDataset;
40
import org.gvsig.raster.shared.IRasterRendering;
41

    
42
import com.iver.cit.gvsig.fmap.layers.FLayer;
43

    
44

    
45
/**
46
 * 
47
 * Clase que hace de interfaz entre los objetos que contienen la informaci?n de 
48
 * realce y el panel. 
49
 *  
50
 * @author Nacho Brodin (nachobrodin@gmail.com)
51
 */
52
public class EnhancedControl {
53
    private EnhancedPanel                                         tPanel = null;
54
    private RasterFilterList                                 filterList = null;
55
    private EnhancedWithTrimPanel                        ePanel = null;
56
    private EnhancedBrightnessContrastPanel bcPanel = null;
57
    private IRasterDataset                                         dataset = null;
58
    private FLayer                                                         lyr = null;
59
    
60
    /**
61
     * Manejador de eventos de los slider de brillo y contraste. 
62
     * @author Nacho Brodin (nachobrodin@gmail.com)
63
     */
64
    class BrightnessContrastListener implements MouseListener, KeyListener{
65
            
66
            /**
67
             * Constructor. Registra los listener
68
             * @param panel 
69
             */
70
            public BrightnessContrastListener(EnhancedBrightnessContrastPanel panel){
71
                    panel.addBrightnessMouseListener(this);
72
                    panel.addContrastMouseListener(this);
73
                    panel.addBrightnessKeyListener(this);
74
                    panel.addContrastKeyListener(this);
75
            }
76

    
77
                public void mouseClicked(MouseEvent e) {                        
78
                }
79

    
80
                public void mouseEntered(MouseEvent e) {                        
81
                }
82

    
83
                public void mouseExited(MouseEvent e) {                        
84
                }
85

    
86
                public void mousePressed(MouseEvent e) {                        
87
                }
88

    
89
            /**
90
             * Aplica autom?ticamente si la previsualizaci?n est? activa.
91
             */
92
                public void mouseReleased(MouseEvent e) {
93
                        if(bcPanel.getPreview().isSelected())
94
                                apply();
95
                }
96

    
97
                public void keyPressed(KeyEvent e) {
98
                                                
99
                }
100

    
101
                public void keyReleased(KeyEvent e) {
102
                        if(e.getKeyCode() == 10)        
103
                                apply();
104
                }
105

    
106
                public void keyTyped(KeyEvent e) {
107
                                                
108
                }
109
    }
110
    
111
    /**
112
     * Constructor
113
     * @param tp
114
     */
115
    public EnhancedControl(EnhancedPanel tp, IRasterDataset dataset, FLayer lyr, RasterFilterList rfl){
116
            this.tPanel = tp;
117
            this.dataset = dataset;
118
            filterList = rfl;
119
            this.lyr = lyr;
120
            bcPanel = tPanel.getBrightnessContrastPanel();
121
            ePanel = tPanel.getEnhancedWithTrimPanel();
122
            new BrightnessContrastListener(bcPanel);
123
            setValuesFromFilterToPanel();
124
    }
125
       
126
    /**
127
     * Carga los valores del panel desde el filtro
128
     */
129
    private void setValuesFromFilterToPanel() {
130
            //BRILLO
131
            BrightnessFilter bFilter = (BrightnessFilter)filterList.getByName(BrightnessFilter.genericName);
132
            if(bFilter != null) {
133
                    bcPanel.setControlEnabled(true);
134
                    bcPanel.setBrightnessValue((double)bFilter.getBrightnessIncrease());
135
            } else {
136
                    bcPanel.setControlEnabled(false);
137
                    bcPanel.setBrightnessValue(0);
138
            }
139
                        
140
            //CONTRASTE
141
            ContrastFilter cFilter = (ContrastFilter)filterList.getByName(ContrastFilter.genericName);
142
            if (cFilter != null) {
143
                        bcPanel.setControlEnabled(true);
144
                        bcPanel.setContrastValue((double) cFilter.getContrastIncrease());
145
                } else {
146
                        bcPanel.setControlEnabled(false);
147
                        bcPanel.setContrastValue(0);
148
                }
149
            
150
            // REALCE LINEAL
151
            LinearEnhancementFilter eFilter = (LinearEnhancementFilter) filterList
152
                                .getByName(LinearEnhancementFilter.genericName);
153
                if (eFilter != null) {
154
                        ePanel.setControlEnabled(true);
155
                        if (eFilter.getRemoveEnds().booleanValue())
156
                                ePanel.setRemoveEndsActive(true);
157
                        else
158
                                ePanel.setRemoveEndsActive(false);
159
                        if (eFilter.getTailTrim().doubleValue() != 0) {
160
                                ePanel.setTailTrimCheckActive(true);
161
                                ePanel
162
                                                .setTailTrimValue(eFilter.getTailTrim().doubleValue() * 100);
163
                        } else {
164
                                ePanel.setTailTrimCheckActive(false);
165
                                ePanel.setTailTrimValue(0);
166
                        }
167
                } else {
168
                        ePanel.setControlEnabled(false);
169
                        ePanel.setRemoveEndsActive(false);
170
                        ePanel.setTailTrimCheckActive(false);
171
                        ePanel.setTailTrimValue(0);
172
                }
173
        }
174
    
175
    /**
176
         * Carga los valores del filtro desde el panel
177
         */
178
    private void setValuesFromPanelToFilter() {
179
            RasterFilterListManager manager = new RasterFilterListManager(filterList);
180
            BrightnessContrastListManager bcManager = (BrightnessContrastListManager)manager.getManagerByClass(BrightnessContrastListManager.class);            
181
            
182
            //BRILLO Y CONTRASTE
183
            if(bcPanel.getActive().isSelected()) {
184
                    if((int)bcPanel.getBrightnessValue() != 0)
185
                            bcManager.addBrightnessFilter((int)bcPanel.getBrightnessValue(), RasterFilterList.MODIFY_LAST);
186
                    else
187
                            filterList.remove(BrightnessFilter.genericName);
188
                    
189
                    if((int)bcPanel.getContrastValue() != 0)
190
                            bcManager.addContrastFilter((int)bcPanel.getContrastValue(), RasterFilterList.MODIFY_LAST);
191
                    else
192
                            filterList.remove(ContrastFilter.genericName);
193
            } else {
194
                    filterList.remove(BrightnessFilter.genericName);
195
                    filterList.remove(ContrastFilter.genericName);
196
            }
197
            
198
            //REALCE
199
            EnhancementListManager eManager = (EnhancementListManager)manager.getManagerByClass(EnhancementListManager.class); 
200
            if(ePanel.getActive().isSelected()) {
201
                    IStatistics stats = dataset.getGeoRasterMultiDataset().getStatistics();
202
                    int[] renderBands = new int[]{0, 1, 2};
203
                        if(lyr instanceof IRasterRendering)
204
                                renderBands = ((IRasterRendering)lyr).getRender().getRenderBands();
205
                    if(!ePanel.isTailTrimCheckSelected() || ePanel.getTrimValue() == 0) { //En este caso siempre es necesario el m?ximo y m?nimo
206
                                if(!stats.isCalculated()) {
207
                                        try {
208
                                                stats.calcFullStatistics();
209
                                        } catch (FileNotOpenException e) {
210
                                                JOptionPane.showMessageDialog(null, "error_aplicando_filtro", "Error", JOptionPane.ERROR_MESSAGE);
211
                                        } catch (RasterDriverException e) {
212
                                                JOptionPane.showMessageDialog(null, "error_aplicando_filtro", "Error", JOptionPane.ERROR_MESSAGE);
213
                                        }
214
                                }
215
                                eManager.setStatistics(stats);                
216
                            eManager.addEnhancedFilter(ePanel.isRemoveEndsSelected(), stats, 0, 
217
                                            RasterFilterList.MODIFY_LAST, renderBands);
218
                        } else {
219
                                StatisticsListManager slm = new StatisticsListManager(manager, stats);
220
                                slm.addTailFilter((double)(ePanel.getTrimValue() / 100D), 0D, ePanel.isRemoveEndsSelected(), stats);
221
                                eManager.setStatistics(stats);
222
                            eManager.addEnhancedFilter(ePanel.isRemoveEndsSelected(), stats, 
223
                                            (double)(ePanel.getTrimValue() / 100D), RasterFilterList.MODIFY_LAST, renderBands);
224
                    }
225
            }
226
            
227
            //Redibujamos
228
            lyr.getMapContext().invalidate();
229
    }
230
    
231
    /**
232
         * Acciones a ejecutar cuando se acepta
233
         */
234
        public void accept() {
235
                setValuesFromPanelToFilter();        
236
        }
237
        
238
        /**
239
         * Acciones a ejecutar cuando se aplica
240
         */
241
        public void apply() {
242
                setValuesFromPanelToFilter();
243
        }
244
         
245
        /**
246
         * Acciones a ejecutar cuando se cancela
247
         */
248
        public void cancel() {
249
                
250
        }
251

    
252
}