Statistics
| Revision:

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

History | View | Annotate | Download (7.88 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.util.Configuration;
25
import org.gvsig.raster.RasterLibrary;
26
import org.gvsig.raster.datastruct.TransparencyRange;
27
import org.gvsig.raster.grid.GridTransparency;
28
import org.gvsig.raster.gui.properties.dialog.RasterPropertiesTocMenuEntry;
29
import org.gvsig.raster.hierarchy.IRasterProperties;
30
import org.gvsig.rastertools.RasterModule;
31
import org.gvsig.rastertools.properties.panels.NoDataPanel;
32
import org.gvsig.rastertools.properties.panels.TransparencyPanel;
33
import org.gvsig.rastertools.properties.panels.interfaces.INoDataPanel;
34
/**
35
 * Clase que hace de interfaz entre los objetos que contienen la informaci?n de
36
 * transparencia y el panel.
37
 *
38
 * @author Nacho Brodin (nachobrodin@gmail.com)
39
 */
40
public class TransparencyListener implements TranspByPixelEventListener, INoDataPanel {
41
        private GridTransparency  transparency      = null;
42
        private TransparencyPanel tPanel            = null;
43
        private IRasterProperties layer             = null;
44

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

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

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

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

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

    
104
                transparency.activeTransparency();
105

    
106
                layer.getRender().getLastRenderBuffer().setNoDataValue(1);
107

    
108
                // Redibujamos
109
                if (tPanel.getLayer() != null)
110
                        tPanel.getLayer().getMapContext().invalidate();
111
        }
112

    
113
        /**
114
         * Aplica y guarda los cambios del panel
115
         */
116
        public void apply() {
117
                onlyApply();
118
                saveStatus();
119
        }
120

    
121
        /**
122
         * Aplicar los cambios sin guardar su estado
123
         */
124
        public void onlyApply() {
125
                if (RasterPropertiesTocMenuEntry.enableEvents)
126
                        setValuesFromPanelToGridTransparency();
127
        }
128

    
129
        /**
130
         * Guarda el estado actual del panel
131
         */
132
        private void saveStatus() {
133
                tPanel.getPanelGroup().getProperties().put("opacity", new Integer(transparency.getOpacity()));
134
                tPanel.getPanelGroup().getProperties().put("transparencyActive", new Boolean(transparency.isTransparencyActive()));
135

    
136
                ArrayList newArray = new ArrayList();
137
                for (int i = 0; i < transparency.getTransparencyRange().size(); i++) {
138
                        newArray.add(transparency.getTransparencyRange().get(i));
139
                }
140
                tPanel.getPanelGroup().getProperties().put("transparencyRange", newArray);
141
        }
142

    
143
        /**
144
         * Deja la capa en el ?ltimo estado guardado y la refresca
145
         */
146
        public void restoreStatus() {
147
                transparency.setOpacity(((Integer) tPanel.getPanelGroup().getProperties().get("opacity")).intValue());
148
                transparency.setTransparencyActive(((Boolean) tPanel.getPanelGroup().getProperties().get("transparencyActive")).booleanValue());
149

    
150
                ArrayList newArray = (ArrayList) tPanel.getPanelGroup().getProperties().get("transparencyRange");
151
                transparency.clearListOfTransparencyRange();
152
                for (int i = 0; i < newArray.size(); i++) {
153
                        transparency.setTransparencyRange((TransparencyRange) newArray.get(i));
154
                }
155

    
156
                if (tPanel.getLayer() != null)
157
                        tPanel.getLayer().getMapContext().invalidate();
158
        }
159

    
160
        /**
161
         * Acciones a ejecutar cuando se acepta
162
         */
163
        public void accept() {
164
                onlyApply();
165
        }
166

    
167
        /**
168
         * Acciones a ejecutar cuando se cancela
169
         */
170
        public void cancel() {
171
                restoreStatus();
172
        }
173

    
174
        /*
175
         * (non-Javadoc)
176
         * @see org.gvsig.rastertools.properties.panels.TranspByPixelEventListener#actionPixelListChanged(java.util.EventObject)
177
         */
178
        public void actionPixelListChanged(EventObject e) {
179
                if (!RasterModule.autoRefreshView)
180
                        return;
181

    
182
                onlyApply();
183
        }
184

    
185
        /*
186
         * (non-Javadoc)
187
         * @see org.gvsig.rastertools.properties.panels.interfaces.INoDataPanel#ComboStateChanged(org.gvsig.rastertools.properties.panels.NoDataPanel, int)
188
         */
189
        public void SourceStateChanged(NoDataPanel noDataPanel, int newIndex) {
190
                RefreshValues(noDataPanel);
191
        }
192

    
193
        /*
194
         * (non-Javadoc)
195
         * @see org.gvsig.rastertools.properties.panels.interfaces.INoDataPanel#BandStateChanged(org.gvsig.rastertools.properties.panels.NoDataPanel, int)
196
         */
197
        public void BandStateChanged(NoDataPanel noDataPanel, int newIndex) {
198
                RefreshValues(noDataPanel);
199
        }
200

    
201
        /**
202
         * Aqui se definen los parametros iniciales para la transparencia del panel
203
         * @param t
204
         */
205
        public void setLayer(IRasterProperties layer) {
206
                this.layer = layer;
207

    
208
                transparency = layer.getRenderTransparency();
209

    
210
                saveStatus();
211

    
212
                setValuesFromGridTransparencyToPanel();
213
        }
214

    
215
        public void RefreshValues(NoDataPanel noDataPanel) {
216
                if (layer == null) {
217
                        noDataPanel.setEnabledComponents(false);
218
                        return;
219
                }
220

    
221
                noDataPanel.setEnabledComponents(noDataPanel.getComboSetupIndex() == 2);
222
                switch (noDataPanel.getComboSetupIndex()) {
223
                        case 0: // General
224
                                noDataPanel.setTransparent(Configuration.getValue("nodata_transparent", Boolean.valueOf(RasterLibrary.noDataTransparent)).booleanValue());
225
                                noDataPanel.setNoDataValue(Configuration.getValue("nodata_value", Double.valueOf(RasterLibrary.noDataValue)).doubleValue());
226
                                break;
227
                        case 1: // Capa
228
                                if (layer.getMetadata()[0] != null)
229
                                        noDataPanel.setNoDataValue(layer.getMetadata()[0].getNoDataValue(0));
230
                                else
231
                                        noDataPanel.setNoDataValue(Configuration.getValue("nodata_value", Double.valueOf(RasterLibrary.noDataValue)).doubleValue());
232

    
233
                                noDataPanel.setTransparent(RasterLibrary.noDataTransparent);
234
                                break;
235
                }
236
        }
237
}