Statistics
| Revision:

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

History | View | Annotate | Download (8.28 KB)

1 12166 bsanchez
/* 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 17670 bsanchez
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
25 12383 nacho
import org.gvsig.raster.datastruct.TransparencyRange;
26 12166 bsanchez
import org.gvsig.raster.grid.GridTransparency;
27 17670 bsanchez
import org.gvsig.raster.grid.filter.RasterFilterListManager;
28 12425 nacho
import org.gvsig.raster.gui.properties.dialog.RasterPropertiesTocMenuEntry;
29 17045 bsanchez
import org.gvsig.raster.hierarchy.IRasterProperties;
30 18002 bsanchez
import org.gvsig.rastertools.Configuration;
31 17495 bsanchez
import org.gvsig.rastertools.RasterModule;
32 17045 bsanchez
import org.gvsig.rastertools.properties.panels.NoDataPanel;
33 12166 bsanchez
import org.gvsig.rastertools.properties.panels.TransparencyPanel;
34 17045 bsanchez
import org.gvsig.rastertools.properties.panels.interfaces.INoDataPanel;
35 12166 bsanchez
/**
36 15804 bsanchez
 * Clase que hace de interfaz entre los objetos que contienen la informaci?n de
37
 * transparencia y el panel.
38
 *
39 12166 bsanchez
 * @author Nacho Brodin (nachobrodin@gmail.com)
40
 */
41 17045 bsanchez
public class TransparencyListener implements TranspByPixelEventListener, INoDataPanel {
42 12166 bsanchez
        private GridTransparency  transparency      = null;
43
        private TransparencyPanel tPanel            = null;
44 17045 bsanchez
        private IRasterProperties layer             = null;
45 12166 bsanchez
46
        /**
47
         * Construye un TransparencyControl
48
         * @param tp
49
         */
50 17045 bsanchez
        public TransparencyListener(TransparencyPanel tp) {
51 12166 bsanchez
                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 17670 bsanchez
                ((FLyrRasterSE) layer).setNoDataValue(tPanel.getNoDataPanel().getNoDataValue());
108 17045 bsanchez
109 18002 bsanchez
                ((FLyrRasterSE) layer).applyNoData(new RasterFilterListManager(((FLyrRasterSE) layer).getRenderFilterList()));
110 17670 bsanchez
111 17720 bsanchez
                ((FLyrRasterSE) layer).setNoDataType(tPanel.getNoDataPanel().getComboSetupIndex());
112 17670 bsanchez
113 12166 bsanchez
                // 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 12198 bsanchez
                if (RasterPropertiesTocMenuEntry.enableEvents)
131
                        setValuesFromPanelToGridTransparency();
132 12166 bsanchez
        }
133
134
        /**
135
         * Guarda el estado actual del panel
136
         */
137
        private void saveStatus() {
138 15781 bsanchez
                tPanel.getPanelGroup().getProperties().put("opacity", new Integer(transparency.getOpacity()));
139 17670 bsanchez
                tPanel.getPanelGroup().getProperties().put("nodatavalue", new Double(tPanel.getNoDataPanel().getNoDataValue()));
140 17720 bsanchez
                tPanel.getPanelGroup().getProperties().put("nodatatype", new Integer(((FLyrRasterSE) layer).getNoDataType()));
141 17670 bsanchez
142 15781 bsanchez
                tPanel.getPanelGroup().getProperties().put("transparencyActive", new Boolean(transparency.isTransparencyActive()));
143 12166 bsanchez
144
                ArrayList newArray = new ArrayList();
145
                for (int i = 0; i < transparency.getTransparencyRange().size(); i++) {
146
                        newArray.add(transparency.getTransparencyRange().get(i));
147
                }
148 15781 bsanchez
                tPanel.getPanelGroup().getProperties().put("transparencyRange", newArray);
149 12166 bsanchez
        }
150
151
        /**
152
         * Deja la capa en el ?ltimo estado guardado y la refresca
153
         */
154
        public void restoreStatus() {
155 17670 bsanchez
                ((FLyrRasterSE) layer).setNoDataValue(((Double) tPanel.getPanelGroup().getProperties().get("nodatavalue")).doubleValue());
156 17720 bsanchez
                ((FLyrRasterSE) layer).setNoDataType(((Integer) tPanel.getPanelGroup().getProperties().get("nodatatype")).intValue());
157 17670 bsanchez
158 15781 bsanchez
                transparency.setOpacity(((Integer) tPanel.getPanelGroup().getProperties().get("opacity")).intValue());
159
                transparency.setTransparencyActive(((Boolean) tPanel.getPanelGroup().getProperties().get("transparencyActive")).booleanValue());
160 12166 bsanchez
161 15781 bsanchez
                ArrayList newArray = (ArrayList) tPanel.getPanelGroup().getProperties().get("transparencyRange");
162 12166 bsanchez
                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 12193 bsanchez
                onlyApply();
176 12166 bsanchez
        }
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 17495 bsanchez
                if (!RasterModule.autoRefreshView)
191
                        return;
192
193 12166 bsanchez
                onlyApply();
194
        }
195 17045 bsanchez
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 17670 bsanchez
                                noDataPanel.setNoDataValue(((Double)Configuration.getDefaultValue("nodata_value")).doubleValue());
236 17045 bsanchez
                                break;
237
                        case 1: // Capa
238 17670 bsanchez
                                ((FLyrRasterSE) layer).getDataSource().resetNoDataValue();
239
                                noDataPanel.setNoDataValue(((FLyrRasterSE) layer).getNoDataValue());
240 17045 bsanchez
                                break;
241
                }
242
        }
243 12166 bsanchez
}