Statistics
| Revision:

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

History | View | Annotate | Download (7.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.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

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

    
43

    
44
/**
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 MouseListener, KeyListener{
64
            
65
            /**
66
             * Constructor. Registra los listener
67
             * @param panel 
68
             */
69
            public BrightnessContrastListener(EnhancedBrightnessContrastPanel panel){
70
                    panel.addBrightnessMouseListener(this);
71
                    panel.addContrastMouseListener(this);
72
                    panel.addBrightnessKeyListener(this);
73
                    panel.addContrastKeyListener(this);
74
            }
75

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

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

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

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

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

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

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

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

    
238
}