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 | } |