Statistics
| Revision:

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

History | View | Annotate | Download (11.6 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.BorderLayout;
22
import java.awt.Color;
23
import java.awt.FlowLayout;
24
import java.awt.GridBagConstraints;
25
import java.awt.GridBagLayout;
26
import java.util.ArrayList;
27
import java.util.EventObject;
28
import java.util.Iterator;
29

    
30
import javax.swing.DefaultListModel;
31
import javax.swing.ImageIcon;
32
import javax.swing.JButton;
33
import javax.swing.JCheckBox;
34
import javax.swing.JList;
35
import javax.swing.JPanel;
36
import javax.swing.JScrollPane;
37
import javax.swing.ListSelectionModel;
38

    
39
import org.gvsig.raster.util.TransparencyRange;
40

    
41
import com.iver.andami.PluginServices;
42
/**
43
 * Panel con los controles para la transparencia por pixel. Incluye los textbox
44
 * para a?adir un RGB a la lista.
45
 * 
46
 * @author Nacho Brodin (nachobrodin@gmail.com)
47
 */
48
public class TranspByPixelPanel extends JPanel {
49
        private static final long               serialVersionUID = -1131297200332579683L;
50
        private boolean                         controlEnabled = false;
51
        private JCheckBox                       activeCheck    = null;
52
        private JList                           jList          = null;
53
        private JPanel                          pixelSelector  = null;
54
        private JPanel                          activeControl  = null;
55
        private JPanel                          pEast          = null;
56
        private JPanel                          pCenter        = null;
57
        private JPanel                          pButtons       = null;
58
        private JButton                         bAdd           = null;
59
        private JButton                         bRemove        = null;
60
        private JScrollPane                     jScrollList    = null;
61
        private TranspByPixelRGBInputPanel      pWest          = null;
62
        private TranspByPixelAndOrSelectorPanel pOperation     = null;
63
        private TranspByPixelListener           listener       = null;
64
        private ArrayList                       actionCommandListeners = new ArrayList();
65

    
66
        /**
67
         * This is the default constructor
68
         */
69
        public TranspByPixelPanel() {
70
                initialize();
71
                // Inicializa el TranspByPixelListener
72
                getListener();
73
                setControlEnabled(false);
74
        }
75

    
76
        /**
77
         * This method initializes this
78
         */
79
        private void initialize() {
80
                setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this, "transp_by_pixel"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
81
                setLayout(new BorderLayout());
82
                add(getActiveControl(), BorderLayout.NORTH);
83
                add(getPixelSelector(), BorderLayout.CENTER);
84
        }
85

    
86
        /**
87
         * Obtiene el panel con los controles principales para introducir valores RGB
88
         * en la lista
89
         * @return JPanel
90
         */
91
        private JPanel getPixelSelector() {
92
                if (pixelSelector == null) {
93

    
94
                        pixelSelector = new JPanel();
95
                        pixelSelector.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 11, 5, 11));
96

    
97
                        pixelSelector.setLayout(new BorderLayout(5, 5));
98

    
99
                        JPanel jpanel1 = new JPanel();
100
                        jpanel1.setLayout(new BorderLayout(5, 5));
101
                        jpanel1.add(getPRGBInput(), BorderLayout.CENTER);
102
                        jpanel1.add(getPCenter(), BorderLayout.EAST);
103

    
104
                        pixelSelector.add(jpanel1, BorderLayout.CENTER);
105
                        pixelSelector.add(getPList(), BorderLayout.EAST);
106
                }
107
                return pixelSelector;
108
        }
109

    
110
        /**
111
         * Obtiene el panel con el control de activaci?n
112
         * @return JPanel
113
         */
114
        private JPanel getActiveControl() {
115
                if (activeControl == null){
116
                        activeControl = new JPanel();
117
                        FlowLayout fl = new FlowLayout();
118
                        fl.setAlignment(FlowLayout.LEFT);
119
                        activeControl.setLayout(fl);
120
                        activeControl.add(getActiveCheck());
121
                }
122
                return activeControl;
123
        }
124

    
125
        /**
126
         * Obtiene el check que activa y desactiva la transparencia por pixel.
127
         * @return JCheckBox
128
         */
129
        public JCheckBox getActiveCheck() {
130
                if(activeCheck == null) {
131
                        activeCheck = new JCheckBox(PluginServices.getText(this, "activar"));
132
                        activeCheck.setSelected(false);
133
                }
134
                return activeCheck;
135
        }
136

    
137
        /**
138
         * This method initializes jPanel        
139
         * @return
140
         */
141
        public TranspByPixelRGBInputPanel getPRGBInput() {
142
                if (pWest == null) {
143
                        pWest = new TranspByPixelRGBInputPanel();
144
                }
145
                return pWest;
146
        }
147

    
148
        /**
149
         * This method initializes jPanel1        
150
         * @return javax.swing.JPanel        
151
         */
152
        public JPanel getPList() {
153
                if (pEast == null) {
154
                        GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
155
                        gridBagConstraints3.fill = java.awt.GridBagConstraints.BOTH;
156
                        gridBagConstraints3.gridx = 0;
157
                        gridBagConstraints3.gridy = 0;
158
                        gridBagConstraints3.weightx = 1.0;
159
                        gridBagConstraints3.weighty = 1.0;
160
                        gridBagConstraints3.insets = new java.awt.Insets(0,0,0,0);
161
                        pEast = new JPanel();
162
                        pEast.setLayout(new GridBagLayout());
163
                        pEast.add(getJScrollList(), gridBagConstraints3);
164
                }
165
                return pEast;
166
        }
167

    
168
        /**
169
         * This method initializes pCenter        
170
         * @return javax.swing.JPanel        
171
         */
172
        private JPanel getPCenter() {
173
                if (pCenter == null) {
174
                        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
175
                        gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
176
                        gridBagConstraints1.gridy = 1;
177
                        gridBagConstraints1.gridx = 0;
178
                        GridBagConstraints gridBagConstraints = new GridBagConstraints();
179
                        gridBagConstraints.insets = new java.awt.Insets(0,0,0,0);
180
                        gridBagConstraints.gridy = 0;
181
                        gridBagConstraints.gridx = 0;
182
                        pCenter = new JPanel();
183
                        pCenter.setLayout(new GridBagLayout());
184
                        pCenter.add(getPButtons(), gridBagConstraints);
185
                        pCenter.add(getPOperation(), gridBagConstraints1);
186
                }
187
                return pCenter;
188
        }
189

    
190

    
191
        /**
192
         * This method initializes bAdd        
193
         *         
194
         * @return javax.swing.JButton        
195
         */
196
        public JButton getBAdd() {
197
                if (bAdd == null) {
198
                        bAdd = new JButton("A?adir");
199
                        bAdd.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);
200
                        bAdd.setIcon(new ImageIcon("./gvSIG/extensiones/com.iver.cit.gvsig/images/forward.png"));
201
                }
202
                return bAdd;
203
        }
204

    
205
        /**
206
         * This method initializes bRemove        
207
         *         
208
         * @return javax.swing.JButton        
209
         */
210
        public JButton getBRemove() {
211
                if (bRemove == null) {
212
                        bRemove = new JButton("Quitar");
213
                        bRemove.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
214
                        bRemove.setIcon(new ImageIcon("./gvSIG/extensiones/com.iver.cit.gvsig/images/backward.png"));
215
                        bRemove.setEnabled(false);
216
                }
217
                return bRemove;
218
        }
219

    
220

    
221
        /**
222
         * This method initializes jPanel        
223
         *         
224
         * @return javax.swing.JPanel        
225
         */
226
        private JPanel getPButtons() {
227
                if (pButtons == null) {
228
                        pButtons = new JPanel();
229
                        pButtons.setLayout(new java.awt.GridBagLayout());
230

    
231
                        GridBagConstraints gridBagConstraints = new GridBagConstraints();
232
                        gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
233
                        gridBagConstraints.gridy = 0;
234
                        gridBagConstraints.gridx = 0;
235
                        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
236
                        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
237
                        gridBagConstraints1.insets = new java.awt.Insets(3, 3, 3, 3);
238
                        gridBagConstraints1.gridy = 1;
239
                        gridBagConstraints1.gridx = 0;
240
                        gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
241
                        pButtons.add(getBAdd(), gridBagConstraints);
242
                        pButtons.add(getBRemove(), gridBagConstraints1);
243
                }
244
                return pButtons;
245
        }
246

    
247
        /**
248
         * This method initializes jPanel1        
249
         *         
250
         * @return javax.swing.JPanel        
251
         */
252
        public TranspByPixelAndOrSelectorPanel getPOperation() {
253
                if (pOperation == null) {
254
                        pOperation = new TranspByPixelAndOrSelectorPanel();
255
                        pOperation.setPreferredSize(new java.awt.Dimension(60,60));
256
                }
257
                return pOperation;
258
        }
259

    
260
        /**
261
         * This method initializes jList        
262
         *         
263
         * @return javax.swing.JList        
264
         */
265
        public JList getJList() {
266
                if (jList == null) {
267
                        jList = new JList(new DefaultListModel());
268
                        jList.setFont(new java.awt.Font("Monospaced", java.awt.Font.PLAIN, 10));
269
                        jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
270
                }
271
                return jList;
272
        }
273

    
274
        /**
275
         * Inicializa el scroll para el jList
276
         * @return
277
         */
278
        public JScrollPane getJScrollList() {
279
                if (jScrollList == null) {
280
                        jScrollList = new JScrollPane();
281
                        jScrollList.setViewportView(getJList());
282
                        jScrollList.setPreferredSize(new java.awt.Dimension(120,100));
283
                }
284
                return jScrollList;
285
        }
286

    
287
        /**
288
         * Obtiene el ListModel de la lista
289
         * @return DefaultListModel
290
         */
291
        public DefaultListModel getListModel(){
292
                return (DefaultListModel) getJList().getModel();
293
        }
294

    
295
        /**
296
         * Activa o desactiva el control
297
         * @param enable True activa el control y false lo desactiva
298
         */
299
        public void setControlEnabled(boolean enabled){
300
                this.getActiveCheck().setSelected(enabled);
301
                getJList().setEnabled(enabled);
302
                if (enabled)
303
                        getJList().setBackground(Color.WHITE);
304
                else
305
                        getJList().setBackground(this.getBackground());
306
                getPRGBInput().setControlEnabled(enabled);
307
                getBAdd().setEnabled(enabled);
308

    
309
                if (enabled)
310
                        getBRemove().setEnabled(getJList().getModel().getSize()>0);
311
                else
312
                        getBRemove().setEnabled(false);
313

    
314
                getPOperation().setControlEnabled(enabled);
315
                controlEnabled = enabled;
316
        }
317

    
318
        /**
319
         * Obtiene true si el control est? activo y false si no lo est?
320
         * @return
321
         */
322
        public boolean isControlEnabled(){
323
                return controlEnabled;
324
        }
325

    
326
        /**
327
         * Asigna el n?mero de bandas activas 
328
         * @param n N?mero de bandas
329
         */
330
        public void setActiveBands(int n){
331
                ((TranspByPixelRGBInputPanel)getPRGBInput()).setActiveBands(n);
332
        }
333

    
334
        /**
335
         * Obtiene el array de entradas de valores a?adidos a la lista
336
         * @return ArrayList
337
         */
338
        public ArrayList getEntries(){
339
                return getListener().getEntries();
340
        }
341

    
342
        /**
343
         * Obtiene la clase manejadora de eventos asociada a esta
344
         * @return TransparencyByPixelListener
345
         */
346
        public TranspByPixelListener getListener() {
347
                if (listener == null) {
348
                        listener = new TranspByPixelListener(this);
349
                }
350
                return listener;
351
        }
352

    
353
        /**
354
         * A?ade una entrada a la tabla
355
         * @param entry Cadena en formato definido por TransparencyRange
356
         */
357
        public void addStringElement(String entry){
358
                getEntries().add(new TransparencyRange(entry));
359
                getListModel().addElement(entry);
360
        }
361

    
362
        /**
363
         * A?ade una entrada a la tabla
364
         * @param entry objeto TransparencyRange
365
         */
366
        public void addStringElement(TransparencyRange entry){
367
                getEntries().add(entry);
368
                getListModel().addElement(entry.getStrEntry());
369
        }
370

    
371
        /**
372
         * Borra las entradas de la tabla 
373
         */
374
        public void clear(){
375
                getPRGBInput().clear();
376
                getListModel().clear();
377
                getEntries().clear();
378
        }
379

    
380
        /**
381
         * A?adir un listener a la lista de eventos
382
         * @param listener
383
         */
384
        public void addValueChangedListener(TranspByPixelEventListener listener) {
385
                if (!actionCommandListeners.contains(listener))
386
                        actionCommandListeners.add(listener);
387
        }
388

    
389
        /**
390
         * Borrar un listener de la lista de eventos
391
         * @param listener
392
         */
393
        public void removeValueChangedListener(TranspByPixelEventListener listener) {
394
                actionCommandListeners.remove(listener);
395
        }
396

    
397
        /**
398
         * Dispara todos los manejadores que estan apuntando a este evento
399
         */
400
        public void callValueChanged() {
401
                Iterator acIterator = actionCommandListeners.iterator();
402
                while (acIterator.hasNext()) {
403
                        TranspByPixelEventListener listener = (TranspByPixelEventListener) acIterator.next();
404
                        listener.actionPixelListChanged(new EventObject(this));
405
                }
406
        }
407
}