Statistics
| Revision:

root / trunk / libraries / libUIComponent / src / org / gvsig / gui / beans / slidertext / ColorSliderTextContainer.java @ 13136

History | View | Annotate | Download (8.28 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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.gui.beans.slidertext;
20

    
21
import java.awt.BorderLayout;
22
import java.awt.Color;
23
import java.awt.Dimension;
24
import java.awt.GridBagConstraints;
25
import java.awt.GridBagLayout;
26
import java.util.ArrayList;
27
import java.util.Iterator;
28

    
29
import javax.swing.JPanel;
30
import javax.swing.JSpinner;
31
import javax.swing.event.ChangeEvent;
32
import javax.swing.event.ChangeListener;
33

    
34
import org.gvsig.gui.beans.doubleslider.DoubleSlider;
35
import org.gvsig.gui.beans.doubleslider.DoubleSliderEvent;
36
import org.gvsig.gui.beans.doubleslider.DoubleSliderListener;
37
/**
38
 * Barra de deslizamiento con una ventana de texto que tiene el valor de la
39
 * posici?n de la barra. En este control podr? controlarse mediante la entrada
40
 * de datos por la caja de texto la posibilidad de introducir valores decimales.
41
 *
42
 * @version 15/06/2007
43
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
44
 */
45
public class ColorSliderTextContainer extends JPanel implements ChangeListener, DoubleSliderListener {
46
        private static final long serialVersionUID = 1876415954410511634L;
47
        private ArrayList actionCommandListeners = new ArrayList();
48

    
49
        private JPanel       pText            = null;
50
        private DoubleSlider slider           = null;
51
        private JSpinner     jSpinner         = null;
52
        private int          min              = 0;
53
        private int          max              = 255;
54
        private int          defaultPos       = 0;
55

    
56
        /**
57
         * Contructor
58
         * @param min Valor m?nimo de la barra
59
         * @param max Valor m?ximo de la barra
60
         * @param defaultPos Posici?n por defecto
61
         */
62
        public ColorSliderTextContainer(int min, int max, int defaultPos) {
63
                super();
64
                this.min = min;
65
                this.max = max;
66
                this.defaultPos = defaultPos;
67

    
68
                initialize();
69
                slider.setTwoSliders(false);
70
        }
71

    
72
        /**
73
         * Constructor vacio
74
         */
75
        public ColorSliderTextContainer() {
76
                this(0, 100, 0);
77
        }
78

    
79
        /**
80
         * This method initializes this
81
         *
82
         */
83
        private void initialize() {
84
                this.setLayout(new BorderLayout(5, 5));
85
                this.add(getSlider(), BorderLayout.CENTER);
86
                this.add(getPText(), BorderLayout.EAST);
87
        }
88

    
89
        /**
90
         * This method initializes jPanel1
91
         *
92
         * @return javax.swing.JPanel
93
         */
94
        private JPanel getPText() {
95
                if (pText == null) {
96
                        pText = new JPanel();
97
                        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
98
                        gridBagConstraints1.insets = new java.awt.Insets(0, 10, 8, 0);
99
                        pText.setLayout(new GridBagLayout());
100
                        pText.add(getJSpinner(), gridBagConstraints1);
101
                }
102
                return pText;
103
        }
104

    
105
        /**
106
         * This method initializes jSlider
107
         *
108
         * @return javax.swing.JSlider
109
         */
110
        public DoubleSlider getSlider() {
111
                if (slider == null) {
112
                        slider = new DoubleSlider();
113
                        slider.setMinimum(min);
114
                        slider.setMaximum(max);
115
                        slider.setValue(defaultPos);
116
                        slider.addValueChangedListener(this);
117
                }
118
                return slider;
119
        }
120

    
121
        /**
122
         * This method initializes jTextField
123
         *
124
         * @return javax.swing.JTextField
125
         */
126
        public JSpinner getJSpinner() {
127
                if (jSpinner == null) {
128
                        jSpinner = new JSpinner();
129
                        jSpinner.setValue(new Integer(defaultPos));
130
                        jSpinner.setPreferredSize(new Dimension(50, 26));
131
                        jSpinner.setMinimumSize(new Dimension(50, 26));
132
                        jSpinner.addChangeListener(this);
133
                }
134
                return jSpinner;
135
        }
136

    
137
        public void setComponentSize(int w, int h){
138
        }
139

    
140
        /**
141
         * Obtiene el valor del control.
142
         * @return Valor del control en formato double.
143
         */
144
        public int getValue() {
145
                return new Integer(getJSpinner().getValue() + "").intValue();
146
        }
147

    
148
        /**
149
         * Asigna el valor del control.
150
         * @return Valor del control en formato double.
151
         */
152
        public void setValue(int value) {
153
                getJSpinner().setValue(new Integer(value));
154
                getSlider().setValue(value);
155
        }
156

    
157
        /**
158
         * Activa o desactiva el control del panel
159
         * @param active
160
         */
161
        public void setControlEnabled(boolean active){
162
                getSlider().setEnabled(active);
163
                getJSpinner().setEnabled(active);
164
        }
165

    
166
        /**
167
         * Obtiene el valor m?ximo del slider
168
         * @return Entero con el valor m?ximo
169
         */
170
        public int getMax() {
171
                return max;
172
        }
173

    
174
        /**
175
         * Asigna el valor m?ximo del slider
176
         * @param Entero con el valor m?ximo
177
         * @deprecated Usar setMaximum en su lugar
178
         */
179
        public void setMax(int max) {
180
                this.setMaximum(max);
181
        }
182

    
183
        /**
184
         * Asigna el valor m?ximo del slider
185
         * @param Entero con el valor m?ximo
186
         */
187
        public void setMaximum(int max) {
188
                this.max = max;
189
                updateInterval();
190
        }
191

    
192
        /**
193
         * Obtiene el valor m?nimo del slider
194
         * @return Entero con el valor m?nimo
195
         */
196
        public int getMin() {
197
                return min;
198
        }
199

    
200
        /**
201
         * Asigna el valor m?nimo del slider
202
         * @param Entero con el valor m?nimo
203
         * @deprecated Usar setMinimum
204
         */
205
        public void setMin(int min) {
206
                this.setMinimum(min);
207
        }
208

    
209
        /**
210
         * Asigna el valor m?nimo del slider
211
         * @param Entero con el valor m?nimo
212
         */
213
        public void setMinimum(int min) {
214
                this.min = min;
215
                updateInterval();
216
        }
217

    
218
        private void updateInterval() {
219
                int aux = this.getValue();
220
                getSlider().setMinimum(min);
221
                getSlider().setMaximum(max);
222
                setValue(aux);
223
        }
224

    
225
        /**
226
         * Especificar el color izquierdo del control
227
         * @param color
228
         */
229
        public void setColor1(Color color, boolean refresh) {
230
                slider.setColor1(color, refresh);
231
        }
232

    
233
        /**
234
         * Especificar el color derecho del control
235
         * @param color
236
         */
237
        public void setColor2(Color color, boolean refresh) {
238
                slider.setColor2(color, refresh);
239
        }
240

    
241
        /**
242
         * Controla cuando cambia el spinner
243
         */
244
        public void stateChanged(ChangeEvent e) {
245
                int value = new Integer(getJSpinner().getValue().toString()).intValue();
246
                if (value != getSlider().getValue())
247
                        getSlider().setValue(value);
248
                if (new Integer(getJSpinner().getValue().toString()).intValue() != getSlider().getValue())
249
                        getJSpinner().setValue(new Integer(getSlider().getValue()));
250

    
251
                if (spinnerEvent)
252
                        callChangeValue();
253
        }
254

    
255
        /**
256
         * Dispara el evento del cambio del control
257
         */
258
        protected void callChangeValue() {
259
                Iterator acIterator = actionCommandListeners.iterator();
260
                while (acIterator.hasNext()) {
261
                        DoubleSliderListener listener = (DoubleSliderListener) acIterator.next();
262
                        listener.actionValueChanged(new DoubleSliderEvent(this));
263
                }
264
        }
265

    
266
        /**
267
         * Dispara el evento del cambio del control
268
         */
269
        protected void callDraggedValue() {
270
                Iterator acIterator = actionCommandListeners.iterator();
271
                while (acIterator.hasNext()) {
272
                        DoubleSliderListener listener = (DoubleSliderListener) acIterator.next();
273
                        listener.actionValueDragged(new DoubleSliderEvent(this));
274
                }
275
        }
276

    
277
        /**
278
         * A?adir un listener a la lista de eventos
279
         * @param listener
280
         */
281
        public void addValueChangedListener(DoubleSliderListener listener) {
282
                if (!actionCommandListeners.contains(listener))
283
                        actionCommandListeners.add(listener);
284
        }
285

    
286
        /**
287
         * Borrar un listener de la lista de eventos
288
         * @param listener
289
         */
290
        public void removeValueChangedListener(DoubleSliderListener listener) {
291
                actionCommandListeners.remove(listener);
292
        }
293

    
294
        /* (non-Javadoc)
295
         * @see javax.swing.JComponent#setEnabled(boolean)
296
         */
297
        public void setEnabled(boolean enabled) {
298
                super.setEnabled(enabled);
299
                jSpinner.setEnabled(enabled);
300
                slider.setEnabled(enabled);
301
        }
302

    
303
        /**
304
         * Controla cuando cambia el slider
305
         */
306
        public void actionValueChanged(DoubleSliderEvent e) {
307
                int value = getSlider().getValue();
308
                getJSpinner().setValue(new Integer(value));
309

    
310
                if (isEnabled())
311
                        callChangeValue();
312
        }
313

    
314
        /*
315
         * (non-Javadoc)
316
         * @see org.gvsig.gui.beans.doubleslider.DoubleSliderListener#actionValueDragged(java.util.EventObject)
317
         */
318
        boolean spinnerEvent = true;
319
        public void actionValueDragged(DoubleSliderEvent e) {
320
                int value = getSlider().getValue();
321
                spinnerEvent = false;
322
                getJSpinner().setValue(new Integer(value));
323
                spinnerEvent = true;
324

    
325
                if (isEnabled())
326
                        callDraggedValue();
327
        }
328
}