Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / properties / control / TransparencyListener.java @ 18061

History | View | Annotate | Download (8.27 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.control;
20

    
21
import java.util.ArrayList;
22
import java.util.EventObject;
23

    
24
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
25
import org.gvsig.raster.Configuration;
26
import org.gvsig.raster.datastruct.TransparencyRange;
27
import org.gvsig.raster.grid.GridTransparency;
28
import org.gvsig.raster.grid.filter.RasterFilterListManager;
29
import org.gvsig.raster.gui.properties.dialog.RasterPropertiesTocMenuEntry;
30
import org.gvsig.raster.hierarchy.IRasterProperties;
31
import org.gvsig.rastertools.RasterModule;
32
import org.gvsig.rastertools.properties.panels.INoDataPanel;
33
import org.gvsig.rastertools.properties.panels.NoDataPanel;
34
import org.gvsig.rastertools.properties.panels.TransparencyPanel;
35
/**
36
 * Clase que hace de interfaz entre los objetos que contienen la informaci?n de
37
 * transparencia y el panel.
38
 *
39
 * @author Nacho Brodin (nachobrodin@gmail.com)
40
 */
41
public class TransparencyListener implements TranspByPixelEventListener, INoDataPanel {
42
        private GridTransparency  transparency      = null;
43
        private TransparencyPanel tPanel            = null;
44
        private IRasterProperties layer             = null;
45

    
46
        /**
47
         * Construye un TransparencyControl
48
         * @param tp
49
         */
50
        public TransparencyListener(TransparencyPanel tp) {
51
                this.tPanel = tp;
52
                tPanel.getPTranspByPixel().addValueChangedListener(this);
53
        }
54

    
55
        /**
56
         * Carga los valores del panel desde el objeto con la transparencia
57
         */
58
        private void setValuesFromGridTransparencyToPanel() {
59
                //Asignamos la opacidad al panel
60
                if (transparency.getOpacity() != 255) {
61
                        tPanel.getOpacityPanel().setControlEnabled(true);
62
                        tPanel.getOpacityPanel().setValue((int) (transparency.getOpacity() * 100) / 255);
63
                } else {
64
                        tPanel.getOpacityPanel().setControlEnabled(false);
65
                        tPanel.getOpacityPanel().setValue(100);
66
                }
67

    
68
                // Asignamos los rangos de transparencia al panel
69
                tPanel.getPTranspByPixel().getListener().setEventsDisabled(true);
70
                if (transparency.getTransparencyRange().size() > 0) {
71
                        tPanel.getPTranspByPixel().clear();
72
                        tPanel.getPTranspByPixel().setControlEnabled(true);
73
                        for (int i = 0; i < transparency.getTransparencyRange().size(); i++) {
74
                                TransparencyRange range = (TransparencyRange) transparency.getTransparencyRange().get(i);
75
                                tPanel.getPTranspByPixel().addStringElement(range);
76
                        }
77
                } else {
78
                        tPanel.getPTranspByPixel().clear();
79
                        tPanel.getPTranspByPixel().setControlEnabled(false);
80
                }
81
                tPanel.getPTranspByPixel().getListener().setEventsDisabled(false);
82
        }
83

    
84
        /**
85
         * Carga los valores del objeto transparencia desde el panel
86
         */
87
        private void setValuesFromPanelToGridTransparency() {
88
                if (transparency == null)
89
                        return;
90
                // Asignamos la opacidad al objeto
91
                if (tPanel.getOpacityPanel().getCheck().isSelected()) {
92
                        transparency.setOpacity((int) Math.round((tPanel.getOpacityPanel().getValue() * 255) / 100));
93
                } else
94
                        transparency.setOpacity(255);
95

    
96
                // Asignamos los rangos de transparencia al objeto
97
                if (tPanel.getPTranspByPixel().getActiveCheck().isSelected()) {
98
                        transparency.clearListOfTransparencyRange();
99
                        ArrayList entries = tPanel.getPTranspByPixel().getEntries();
100
                        for (int i = 0; i < entries.size(); i++)
101
                                transparency.setTransparencyRange((TransparencyRange) entries.get(i));
102
                } else
103
                        transparency.clearListOfTransparencyRange();
104

    
105
                transparency.activeTransparency();
106

    
107
                ((FLyrRasterSE) layer).setNoDataValue(tPanel.getNoDataPanel().getNoDataValue());
108

    
109
                ((FLyrRasterSE) layer).applyNoData(new RasterFilterListManager(((FLyrRasterSE) layer).getRenderFilterList()));
110

    
111
                ((FLyrRasterSE) layer).setNoDataType(tPanel.getNoDataPanel().getComboSetupIndex());
112

    
113
                // Redibujamos
114
                if (tPanel.getLayer() != null)
115
                        tPanel.getLayer().getMapContext().invalidate();
116
        }
117

    
118
        /**
119
         * Aplica y guarda los cambios del panel
120
         */
121
        public void apply() {
122
                onlyApply();
123
                saveStatus();
124
        }
125

    
126
        /**
127
         * Aplicar los cambios sin guardar su estado
128
         */
129
        public void onlyApply() {
130
                if (RasterPropertiesTocMenuEntry.enableEvents)
131
                        setValuesFromPanelToGridTransparency();
132
        }
133

    
134
        /**
135
         * Guarda el estado actual del panel
136
         */
137
        private void saveStatus() {
138
                tPanel.getPanelGroup().getProperties().put("opacity", new Integer(transparency.getOpacity()));
139
                tPanel.getPanelGroup().getProperties().put("nodatavalue", new Double(tPanel.getNoDataPanel().getNoDataValue()));
140
                tPanel.getPanelGroup().getProperties().put("nodatatype", new Integer(((FLyrRasterSE) layer).getNoDataType()));
141

    
142
                tPanel.getPanelGroup().getProperties().put("transparencyActive", new Boolean(transparency.isTransparencyActive()));
143

    
144
                ArrayList newArray = new ArrayList();
145
                for (int i = 0; i < transparency.getTransparencyRange().size(); i++) {
146
                        newArray.add(transparency.getTransparencyRange().get(i));
147
                }
148
                tPanel.getPanelGroup().getProperties().put("transparencyRange", newArray);
149
        }
150

    
151
        /**
152
         * Deja la capa en el ?ltimo estado guardado y la refresca
153
         */
154
        public void restoreStatus() {
155
                ((FLyrRasterSE) layer).setNoDataValue(((Double) tPanel.getPanelGroup().getProperties().get("nodatavalue")).doubleValue());
156
                ((FLyrRasterSE) layer).setNoDataType(((Integer) tPanel.getPanelGroup().getProperties().get("nodatatype")).intValue());
157

    
158
                transparency.setOpacity(((Integer) tPanel.getPanelGroup().getProperties().get("opacity")).intValue());
159
                transparency.setTransparencyActive(((Boolean) tPanel.getPanelGroup().getProperties().get("transparencyActive")).booleanValue());
160

    
161
                ArrayList newArray = (ArrayList) tPanel.getPanelGroup().getProperties().get("transparencyRange");
162
                transparency.clearListOfTransparencyRange();
163
                for (int i = 0; i < newArray.size(); i++) {
164
                        transparency.setTransparencyRange((TransparencyRange) newArray.get(i));
165
                }
166

    
167
                if (tPanel.getLayer() != null)
168
                        tPanel.getLayer().getMapContext().invalidate();
169
        }
170

    
171
        /**
172
         * Acciones a ejecutar cuando se acepta
173
         */
174
        public void accept() {
175
                onlyApply();
176
        }
177

    
178
        /**
179
         * Acciones a ejecutar cuando se cancela
180
         */
181
        public void cancel() {
182
                restoreStatus();
183
        }
184

    
185
        /*
186
         * (non-Javadoc)
187
         * @see org.gvsig.rastertools.properties.panels.TranspByPixelEventListener#actionPixelListChanged(java.util.EventObject)
188
         */
189
        public void actionPixelListChanged(EventObject e) {
190
                if (!RasterModule.autoRefreshView)
191
                        return;
192

    
193
                onlyApply();
194
        }
195

    
196
        /*
197
         * (non-Javadoc)
198
         * @see org.gvsig.rastertools.properties.panels.interfaces.INoDataPanel#ComboStateChanged(org.gvsig.rastertools.properties.panels.NoDataPanel, int)
199
         */
200
        public void SourceStateChanged(NoDataPanel noDataPanel, int newIndex) {
201
                RefreshValues(noDataPanel);
202
        }
203

    
204
        /*
205
         * (non-Javadoc)
206
         * @see org.gvsig.rastertools.properties.panels.interfaces.INoDataPanel#BandStateChanged(org.gvsig.rastertools.properties.panels.NoDataPanel, int)
207
         */
208
        public void BandStateChanged(NoDataPanel noDataPanel, int newIndex) {
209
                RefreshValues(noDataPanel);
210
        }
211

    
212
        /**
213
         * Aqui se definen los parametros iniciales para la transparencia del panel
214
         * @param t
215
         */
216
        public void setLayer(IRasterProperties layer) {
217
                this.layer = layer;
218

    
219
                transparency = layer.getRenderTransparency();
220

    
221
                saveStatus();
222

    
223
                setValuesFromGridTransparencyToPanel();
224
        }
225

    
226
        public void RefreshValues(NoDataPanel noDataPanel) {
227
                if (layer == null) {
228
                        noDataPanel.setEnabledComponents(false);
229
                        return;
230
                }
231

    
232
                noDataPanel.setEnabledComponents(noDataPanel.getComboSetupIndex() == 2);
233
                switch (noDataPanel.getComboSetupIndex()) {
234
                        case 0: // General
235
                                noDataPanel.setNoDataValue(((Double)Configuration.getDefaultValue("nodata_value")).doubleValue());
236
                                break;
237
                        case 1: // Capa
238
                                ((FLyrRasterSE) layer).getDataSource().resetNoDataValue();
239
                                noDataPanel.setNoDataValue(((FLyrRasterSE) layer).getNoDataValue());
240
                                break;
241
                }
242
        }
243
}