Statistics
| Revision:

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

History | View | Annotate | Download (9.61 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.ActionEvent;
22
import java.awt.event.ActionListener;
23
import java.awt.event.MouseEvent;
24
import java.awt.event.MouseListener;
25
import java.util.ArrayList;
26

    
27
import javax.swing.JButton;
28
import javax.swing.JCheckBox;
29
import javax.swing.JList;
30
import javax.swing.JRadioButton;
31
import javax.swing.event.ListSelectionEvent;
32
import javax.swing.event.ListSelectionListener;
33

    
34
import org.gvsig.gui.beans.doubleslider.DoubleSliderEvent;
35
import org.gvsig.gui.beans.doubleslider.DoubleSliderListener;
36
import org.gvsig.raster.util.TransparencyRange;
37
/**
38
 * Maneja los eventos para el panel de transparencia por pixel.
39
 * 
40
 * @author Nacho Brodin (nachobrodin@gmail.com)
41
 */
42
public class TranspByPixelListener implements ActionListener, ListSelectionListener, DoubleSliderListener, MouseListener {
43
        private ArrayList                  entries        = new ArrayList();
44
        private JButton                    addButton      = null;
45
        private JButton                    removeButton   = null;
46
        private JCheckBox                  cbActivar      = null;
47
        private JList                      list           = null;
48
        private JRadioButton               andRb          = null;
49
        private JRadioButton               orRb           = null;
50
        private TranspByPixelPanel         panel          = null;
51
        private TranspByPixelRGBInputPanel rgbInputPanel  = null;
52
        boolean                            eventsDisabled = false;
53
        private int                        itemSelected   = -1;
54

    
55
        /**
56
         * This is the default constructor
57
         */
58
        public TranspByPixelListener(TranspByPixelPanel panel) {
59
                this.panel = panel;
60
                rgbInputPanel = panel.getPRGBInput();
61
                list = panel.getJList();
62

    
63
                addButton = panel.getBAdd();
64
                removeButton = panel.getBRemove();
65
                andRb = panel.getPOperation().getRbAnd();
66
                orRb = panel.getPOperation().getRbOr();
67
                cbActivar = panel.getActiveCheck();
68

    
69
                addButton.addActionListener(this);
70
                removeButton.addActionListener(this);
71
                andRb.addActionListener(this);
72
                orRb.addActionListener(this);
73
                cbActivar.addActionListener(this);
74

    
75
                list.addListSelectionListener(this);
76

    
77
                panel.getPRGBInput().getTBlue().addValueChangedListener(this);
78
                panel.getPRGBInput().getTGreen().addValueChangedListener(this);
79
                panel.getPRGBInput().getTRed().addValueChangedListener(this);
80
                panel.getPRGBInput().getTAlpha().addValueChangedListener(this);
81
                list.addMouseListener(this);
82
        }
83

    
84
        /**
85
         * Obtiene el objeto TransparencyRange equivalente a los valores RGBA
86
         * seleccionados.
87
         *
88
         * @return TransparencyRange o null si la selecci?n no es correcta.
89
         */
90
        private TransparencyRange getEntrySelected() {
91
                if (!rgbInputPanel.isValidValue())
92
                        return null;
93

    
94
                TransparencyRange entry = new TransparencyRange();
95
                entry.setRed(rgbInputPanel.getRangeRed());
96
                entry.setGreen(rgbInputPanel.getRangeGreen());
97
                entry.setBlue(rgbInputPanel.getRangeBlue());
98
                if (rgbInputPanel.getTAlpha().isChecked())
99
                        entry.setAlpha(255 - rgbInputPanel.getTAlpha().getValue());
100
                else
101
                        entry.setAlpha(0);
102

    
103
                String textR = rgbInputPanel.getTRed().getValue() + "";
104
                if (!rgbInputPanel.getTRed().isChecked())
105
                        textR = "*";
106
                String textG = rgbInputPanel.getTGreen().getValue() + "";
107
                if (!rgbInputPanel.getTGreen().isChecked())
108
                        textG = "*";
109
                String textB = rgbInputPanel.getTBlue().getValue() + "";
110
                if (!rgbInputPanel.getTBlue().isChecked())
111
                        textB = "*";
112

    
113
                if (andRb.isSelected()) {
114
                        entry.setStrEntry(textR + " & " + textG + " & " + textB);
115
                        entry.setAnd(true);
116
                }
117

    
118
                if (orRb.isSelected()) {
119
                        entry.setStrEntry(textR + " | " + textG + " | " + textB);
120
                        entry.setAnd(false);
121
                }
122
                return entry;
123
        }
124

    
125
        /**
126
         * Actualiza el item seleccionado cogiendo los valores del RGB
127
         */
128
        private void updateData() {
129
                if (itemSelected == -1)
130
                        return;
131

    
132
                TransparencyRange entry = getEntrySelected();
133
                if (entry != null) {
134
                        entries.set(itemSelected, entry);
135
                        panel.getListModel().set(itemSelected, entry.getStrEntry());
136
                        panel.callValueChanged();
137
                }
138
        }
139

    
140
        /*
141
         * (non-Javadoc)
142
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
143
         */
144
        public void actionPerformed(ActionEvent e) {
145

    
146
                if ((e.getSource() == andRb) || (e.getSource() == orRb)) {
147
                        updateData();
148
                        return;
149
                }
150

    
151
                // A?ade elementos a la lista
152
                if (e.getSource() == addButton) {
153
                        TransparencyRange entry = getEntrySelected();
154
                        if (entry != null) {
155
                                entries.add(entry);
156
                                itemSelected = entries.size() - 1;
157
                                panel.getListModel().addElement(entry.getStrEntry());
158
                                setValues(itemSelected);
159

    
160
                                removeButton.setEnabled(true);
161
                                panel.callValueChanged();
162
                        }
163
                        return;
164
                }
165

    
166
                // Elimina elementos de la lista
167
                if (e.getSource() == removeButton) {
168
                        deleteSelected();
169
                        return;
170
                }
171

    
172
                if (e.getSource() == cbActivar) {
173
                        panel.setControlEnabled(cbActivar.isSelected());
174
                        panel.callValueChanged();
175
                        return;
176
                }
177
        }
178

    
179
        private void deleteSelected() {
180
                if (itemSelected == -1)
181
                        return;
182

    
183
                entries.remove(itemSelected);
184
                panel.getListModel().remove(itemSelected);
185

    
186
                if (itemSelected >= entries.size()) {
187
                        itemSelected = entries.size() - 1;
188
                }
189
                setValues(itemSelected);
190

    
191
                if (entries.size() == 0)
192
                        removeButton.setEnabled(false);
193
                panel.callValueChanged();
194
        }
195

    
196
        /**
197
         * Establece los valores RGBA a sus componentes segun la seleccion
198
         * @param item
199
         */
200
        private void setValues(int item) {
201

    
202
                if (item >= entries.size()) {
203
                        item = entries.size() - 1;
204
                }
205

    
206
                if (entries.size() == 0) {
207
                        rgbInputPanel.getTRed().setValue(0);
208
                        rgbInputPanel.getTRed().setChecked(true);
209
                        rgbInputPanel.getTGreen().setValue(0);
210
                        rgbInputPanel.getTGreen().setChecked(true);
211
                        rgbInputPanel.getTBlue().setValue(0);
212
                        rgbInputPanel.getTBlue().setChecked(true);
213
                        rgbInputPanel.getTAlpha().setValue(255);
214
                        rgbInputPanel.getTAlpha().setChecked(false);
215
                        andRb.setSelected(true);
216
                        orRb.setSelected(false);
217
                        return;
218
                }
219
                TransparencyRange tr = (TransparencyRange) entries.get(item);
220

    
221
                andRb.setSelected(tr.isAnd());
222
                orRb.setSelected(!tr.isAnd());
223

    
224
                if (tr.getRed() == null) {
225
                        rgbInputPanel.getTRed().setValue(0);
226
                        rgbInputPanel.getTRed().setChecked(false);
227
                } else {
228
                        rgbInputPanel.getTRed().setValue(tr.getRed()[0]);
229
                        rgbInputPanel.getTRed().setChecked(true);
230
                }
231

    
232
                if (tr.getGreen() == null) {
233
                        rgbInputPanel.getTGreen().setValue(0);
234
                        rgbInputPanel.getTGreen().setChecked(false);
235
                } else {
236
                        rgbInputPanel.getTGreen().setValue(tr.getGreen()[0]);
237
                        rgbInputPanel.getTGreen().setChecked(true);
238
                }
239

    
240
                if (tr.getBlue() == null) {
241
                        rgbInputPanel.getTBlue().setValue(0);
242
                        rgbInputPanel.getTBlue().setChecked(false);
243
                } else {
244
                        rgbInputPanel.getTBlue().setValue(tr.getBlue()[0]);
245
                        rgbInputPanel.getTBlue().setChecked(true);
246
                }
247

    
248
                int alpha = 255 - tr.getAlpha();
249
                rgbInputPanel.getTAlpha().setValue(alpha);
250
                rgbInputPanel.getTAlpha().setChecked(alpha != 255);
251

    
252
                if (list.getSelectedIndex() != item) {
253
                        list.setSelectedIndex(item);
254
                }
255
        }
256

    
257
        /**
258
         * Obtiene el array de entradas de valores a?adidos a la lista
259
         * @return ArrayList
260
         */
261
        public ArrayList getEntries() {
262
                return entries;
263
        }
264

    
265
        /*
266
         * (non-Javadoc)
267
         * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
268
         */
269
        public void valueChanged(ListSelectionEvent e) {
270
                eventsDisabled = true;
271
                if (list.getSelectedIndex() != -1)
272
                        itemSelected = list.getSelectedIndex();
273

    
274
                setValues(itemSelected);
275
                eventsDisabled = false;
276
        }
277

    
278
        /*
279
         * (non-Javadoc)
280
         * @see org.gvsig.gui.beans.doubleslider.DoubleSliderListener#actionValueChanged(org.gvsig.gui.beans.doubleslider.DoubleSliderEvent)
281
         */
282
        public void actionValueChanged(DoubleSliderEvent e) {
283
                if (eventsDisabled)
284
                        return;
285
                eventsDisabled = true;
286
                updateData();
287
                eventsDisabled = false;
288
        }
289

    
290
        /**
291
         * Habilita o deshabilita la gestion de eventos
292
         * @param value
293
         */
294
        public void setEventsDisabled(boolean value) {
295
                eventsDisabled = value;
296
        }
297

    
298
        /*
299
         * (non-Javadoc)
300
         * @see org.gvsig.gui.beans.doubleslider.DoubleSliderListener#actionValueDragged(org.gvsig.gui.beans.doubleslider.DoubleSliderEvent)
301
         */
302
        public void actionValueDragged(DoubleSliderEvent e) {
303
        }
304

    
305
        /*
306
         * (non-Javadoc)
307
         * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
308
         */
309
        public void mouseClicked(MouseEvent e) {
310
                if (e.getSource() == list)
311
                        // Si es doble click borramos el seleccionado
312
                        if (e.getClickCount() == 2)
313
                                deleteSelected();
314
        }
315

    
316
        /*
317
         * (non-Javadoc)
318
         * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
319
         */
320
        public void mouseEntered(MouseEvent e) {
321
        }
322

    
323
        /*
324
         * (non-Javadoc)
325
         * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
326
         */
327
        public void mouseExited(MouseEvent e) {
328
        }
329

    
330
        /*
331
         * (non-Javadoc)
332
         * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
333
         */
334
        public void mousePressed(MouseEvent e) {
335
        }
336

    
337
        /*
338
         * (non-Javadoc)
339
         * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
340
         */
341
        public void mouseReleased(MouseEvent e) {
342
        }
343
}