svn-gvsig-desktop / tags / v1_1_Build_1006 / libraries / libCq_CMS_praster / src / org / cresques / ui / filter / RasterTransparencyPanel.java @ 12458
History | View | Annotate | Download (13.6 KB)
1 | 8026 | nacho | /*
|
---|---|---|---|
2 | * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
|
||
3 | *
|
||
4 | * Copyright (C) 2004-5.
|
||
5 | *
|
||
6 | * This program is free software; you can redistribute it and/or
|
||
7 | * modify it under the terms of the GNU General Public License
|
||
8 | * as published by the Free Software Foundation; either version 2
|
||
9 | * of the License, or (at your option) any later version.
|
||
10 | *
|
||
11 | * This program is distributed in the hope that it will be useful,
|
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | * GNU General Public License for more details.
|
||
15 | *
|
||
16 | * You should have received a copy of the GNU General Public License
|
||
17 | * along with this program; if not, write to the Free Software
|
||
18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
19 | *
|
||
20 | * For more information, contact:
|
||
21 | *
|
||
22 | * cresques@gmail.com
|
||
23 | */
|
||
24 | package org.cresques.ui.filter; |
||
25 | |||
26 | import java.awt.BorderLayout; |
||
27 | import java.awt.GridBagConstraints; |
||
28 | import java.awt.GridBagLayout; |
||
29 | import java.awt.event.ActionEvent; |
||
30 | import java.awt.event.ActionListener; |
||
31 | import java.awt.event.FocusEvent; |
||
32 | import java.awt.event.FocusListener; |
||
33 | |||
34 | import javax.swing.JCheckBox; |
||
35 | import javax.swing.JPanel; |
||
36 | import javax.swing.JSlider; |
||
37 | import javax.swing.JTextField; |
||
38 | import javax.swing.event.ChangeEvent; |
||
39 | import javax.swing.event.ChangeListener; |
||
40 | |||
41 | 10645 | nacho | import org.cresques.ui.raster.IResize; |
42 | 8026 | nacho | import org.cresques.ui.raster.RGBInputPanel; |
43 | |||
44 | |||
45 | /**
|
||
46 | * Dialogo para asignar la transparencia por pixel y global al raster.
|
||
47 | * @author Nacho Brodin (brodin_ign@gva.es)
|
||
48 | */
|
||
49 | 10645 | nacho | public class RasterTransparencyPanel extends JPanel implements ActionListener, FocusListener, ChangeListener, IResize{ |
50 | 8026 | nacho | final private static long serialVersionUID = -3370601314380922368L; |
51 | |||
52 | /**
|
||
53 | 10645 | nacho | * Variables para la asignaci?n de tama?o de los componentes del panel.
|
54 | */
|
||
55 | private int wComp = 445, hComp = 239; |
||
56 | private int wPixel = wComp - 15, hPixel = hComp - 59; |
||
57 | private int wList = wPixel - 20, hList = hPixel - 60; |
||
58 | private int wGeneral = wPixel, hGeneral = 55; |
||
59 | private int wSlider = wGeneral - 160; |
||
60 | |||
61 | |||
62 | /**
|
||
63 | 8026 | nacho | * Nombre del panel
|
64 | */
|
||
65 | private String nom = "Transparencia"; |
||
66 | FilterRasterDialogPanel parent = null;
|
||
67 | |||
68 | /**
|
||
69 | * N?mero de bandas del raster
|
||
70 | */
|
||
71 | public int nBands = 3; |
||
72 | private JPanel jPanel1 = null; |
||
73 | private JCheckBox cbTransparencia = null; |
||
74 | |||
75 | /**
|
||
76 | * Variable p?blica para la traducci?n
|
||
77 | */
|
||
78 | public JPanel pGeneralTrans = null; |
||
79 | private JCheckBox cbOpacidad = null; |
||
80 | private JSlider slOpacidad = null; |
||
81 | private JTextField tOpacidad = null; |
||
82 | private TransparencyByPixelPanel pTranspByPixel = null; |
||
83 | private JPanel pTransparencyByPixel = null; |
||
84 | |||
85 | /**
|
||
86 | * Constructor. Asigna la variable panel que contiene este
|
||
87 | * @param parent FilterRasterDialogPanel
|
||
88 | */
|
||
89 | public RasterTransparencyPanel(FilterRasterDialogPanel parent) {
|
||
90 | this.parent = parent;
|
||
91 | initialize(); |
||
92 | } |
||
93 | |||
94 | /**
|
||
95 | * This method initializes this
|
||
96 | *
|
||
97 | * @return void
|
||
98 | */
|
||
99 | private void initialize() { |
||
100 | GridBagConstraints gridBagConstraints4 = new GridBagConstraints(); |
||
101 | gridBagConstraints4.insets = new java.awt.Insets(0,0,0,0); |
||
102 | gridBagConstraints4.gridx = 0;
|
||
103 | gridBagConstraints4.gridy = 1;
|
||
104 | gridBagConstraints4.gridwidth = 1;
|
||
105 | GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); |
||
106 | gridBagConstraints1.gridx = 0;
|
||
107 | gridBagConstraints1.gridy = 0;
|
||
108 | this.setLayout(new GridBagLayout()); |
||
109 | 10645 | nacho | this.setBounds(0, 0, wComp, hComp); |
110 | this.setPreferredSize(new java.awt.Dimension(wComp, hComp)); |
||
111 | 8026 | nacho | this.add(getPTransparencyByPixel(), gridBagConstraints1);
|
112 | this.add(getOpacityPanel(), gridBagConstraints4);
|
||
113 | initControls(); |
||
114 | 10645 | nacho | //this.setComponentSize(wComp, hComp);
|
115 | 8026 | nacho | } |
116 | |||
117 | /**
|
||
118 | * Obtiene el nombre del panel
|
||
119 | * @return Cadena con el nombre del panel
|
||
120 | */
|
||
121 | public String getName(){ |
||
122 | return this.nom; |
||
123 | } |
||
124 | |||
125 | /**
|
||
126 | * Asigna el n?mero de bandas de la imagen
|
||
127 | * @param nBands
|
||
128 | */
|
||
129 | public void setBands(int nBands) { |
||
130 | this.nBands = nBands;
|
||
131 | } |
||
132 | |||
133 | /**
|
||
134 | * Inicializa controles a sus valores por defecto
|
||
135 | */
|
||
136 | public void initControls() { |
||
137 | this.getOpacityText().setText("100"); |
||
138 | this.setActiveOpacityControl(false); |
||
139 | this.setActiveTransparencyControl(false); |
||
140 | } |
||
141 | |||
142 | /**
|
||
143 | * This method initializes jPanel1
|
||
144 | *
|
||
145 | * @return javax.swing.JPanel
|
||
146 | */
|
||
147 | private JPanel getJPanel1() { |
||
148 | if (jPanel1 == null) { |
||
149 | jPanel1 = new JPanel(); |
||
150 | jPanel1.setLayout(new BorderLayout()); |
||
151 | jPanel1.setPreferredSize(new java.awt.Dimension(415,25)); |
||
152 | jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0)); |
||
153 | jPanel1.add(getTransparencyCheck(), java.awt.BorderLayout.NORTH); |
||
154 | } |
||
155 | |||
156 | return jPanel1;
|
||
157 | } |
||
158 | |||
159 | /**
|
||
160 | * This method initializes jCheckBox
|
||
161 | *
|
||
162 | * @return javax.swing.JCheckBox
|
||
163 | */
|
||
164 | public JCheckBox getTransparencyCheck() { |
||
165 | if (cbTransparencia == null) { |
||
166 | cbTransparencia = new JCheckBox(); |
||
167 | cbTransparencia.setText("Activar");
|
||
168 | cbTransparencia.addActionListener(this);
|
||
169 | } |
||
170 | |||
171 | return cbTransparencia;
|
||
172 | } |
||
173 | |||
174 | /**
|
||
175 | * This method initializes jPanel4
|
||
176 | *
|
||
177 | * @return javax.swing.JPanel
|
||
178 | */
|
||
179 | public JPanel getOpacityPanel() { |
||
180 | if (pGeneralTrans == null) { |
||
181 | pGeneralTrans = new JPanel(); |
||
182 | pGeneralTrans.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Opacidad", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
183 | 10645 | nacho | pGeneralTrans.setPreferredSize(new java.awt.Dimension(wGeneral,hGeneral));
|
184 | 8026 | nacho | pGeneralTrans.add(getOpacityCheck(), null);
|
185 | pGeneralTrans.add(getOpacitySlider(), null);
|
||
186 | pGeneralTrans.add(getOpacityText(), null);
|
||
187 | } |
||
188 | |||
189 | return pGeneralTrans;
|
||
190 | } |
||
191 | |||
192 | /**
|
||
193 | * This method initializes jCheckBox1
|
||
194 | *
|
||
195 | * @return javax.swing.JCheckBox
|
||
196 | */
|
||
197 | public JCheckBox getOpacityCheck() { |
||
198 | if (cbOpacidad == null) { |
||
199 | cbOpacidad = new JCheckBox(); |
||
200 | cbOpacidad.setText("Activar");
|
||
201 | cbOpacidad.addActionListener(this);
|
||
202 | cbOpacidad.addFocusListener(this);
|
||
203 | } |
||
204 | |||
205 | return cbOpacidad;
|
||
206 | } |
||
207 | |||
208 | /**
|
||
209 | * This method initializes jSlider
|
||
210 | *
|
||
211 | * @return javax.swing.JSlider
|
||
212 | */
|
||
213 | public JSlider getOpacitySlider() { |
||
214 | if (slOpacidad == null) { |
||
215 | slOpacidad = new JSlider(); |
||
216 | 10645 | nacho | slOpacidad.setPreferredSize(new java.awt.Dimension(wSlider, 16)); |
217 | 8026 | nacho | slOpacidad.addChangeListener(this);
|
218 | } |
||
219 | |||
220 | return slOpacidad;
|
||
221 | } |
||
222 | |||
223 | /**
|
||
224 | * This method initializes jTextField3
|
||
225 | *
|
||
226 | * @return javax.swing.JTextField
|
||
227 | */
|
||
228 | public JTextField getOpacityText() { |
||
229 | if (tOpacidad == null) { |
||
230 | tOpacidad = new JTextField(); |
||
231 | tOpacidad.setPreferredSize(new java.awt.Dimension(30, 19)); |
||
232 | tOpacidad.addActionListener(this);
|
||
233 | } |
||
234 | |||
235 | return tOpacidad;
|
||
236 | } |
||
237 | |||
238 | /**
|
||
239 | * Activa/Desactiva los controles de opacidad
|
||
240 | * @param active
|
||
241 | */
|
||
242 | public void setActiveOpacityControl(boolean active) { |
||
243 | this.getOpacityCheck().setSelected(active);
|
||
244 | this.getOpacitySlider().setEnabled(active);
|
||
245 | this.getOpacityText().setEnabled(active);
|
||
246 | } |
||
247 | |||
248 | /**
|
||
249 | * Activa/Desactiva los controles de transparencia
|
||
250 | * @param active
|
||
251 | */
|
||
252 | public void setActiveTransparencyControl(boolean active) { |
||
253 | this.getTransparencyCheck().setSelected(active);
|
||
254 | RGBInputPanel rgbPanel = this.getPTranspByPixel().getPRGBInput();
|
||
255 | rgbPanel.getTRed().setEnabled(active); |
||
256 | |||
257 | if (parent.nbands == 2) { |
||
258 | rgbPanel.getTGreen().setEnabled(active); |
||
259 | rgbPanel.getTBlue().setEnabled(false);
|
||
260 | } |
||
261 | |||
262 | if (parent.nbands == 3) { |
||
263 | rgbPanel.getTGreen().setEnabled(active); |
||
264 | rgbPanel.getTBlue().setEnabled(active); |
||
265 | } |
||
266 | } |
||
267 | |||
268 | /**
|
||
269 | * Asigna el valor de opacidad a los controles de la ventana
|
||
270 | * para que cuando esta se abra tenga los valores seleccionados en la
|
||
271 | * imagen.
|
||
272 | * @param alpha
|
||
273 | */
|
||
274 | public void setOpacity(int alpha) { |
||
275 | int opacityPercent = (int) ((alpha * 100) / 255); |
||
276 | this.getOpacityText().setText(String.valueOf(opacityPercent)); |
||
277 | this.getOpacitySlider().setValue(opacityPercent);
|
||
278 | this.setActiveOpacityControl(true); |
||
279 | |||
280 | if (opacityPercent == 100) { |
||
281 | this.setActiveOpacityControl(false); |
||
282 | } |
||
283 | } |
||
284 | |||
285 | /**
|
||
286 | * This method initializes jPanel2
|
||
287 | *
|
||
288 | * @return javax.swing.JPanel
|
||
289 | */
|
||
290 | public TransparencyByPixelPanel getPTranspByPixel() {
|
||
291 | if (pTranspByPixel == null) { |
||
292 | pTranspByPixel = new TransparencyByPixelPanel();
|
||
293 | 10645 | nacho | pTranspByPixel.setPreferredSize(new java.awt.Dimension(wList,hList));
|
294 | 8026 | nacho | pTranspByPixel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0)); |
295 | pTranspByPixel.setControlEnabled(false);
|
||
296 | } |
||
297 | return pTranspByPixel;
|
||
298 | } |
||
299 | |||
300 | /**
|
||
301 | * This method initializes jPanel2
|
||
302 | *
|
||
303 | * @return javax.swing.JPanel
|
||
304 | */
|
||
305 | public JPanel getPTransparencyByPixel() { |
||
306 | if (pTransparencyByPixel == null) { |
||
307 | GridBagConstraints gridBagConstraints = new GridBagConstraints(); |
||
308 | gridBagConstraints.gridx = 0;
|
||
309 | gridBagConstraints.gridy = 1;
|
||
310 | GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); |
||
311 | gridBagConstraints2.anchor = GridBagConstraints.WEST;
|
||
312 | gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0); |
||
313 | gridBagConstraints2.gridheight = 1;
|
||
314 | gridBagConstraints2.gridwidth = 1;
|
||
315 | gridBagConstraints2.gridx = 0;
|
||
316 | gridBagConstraints2.gridy = 0;
|
||
317 | gridBagConstraints2.ipady = 0;
|
||
318 | gridBagConstraints2.fill = GridBagConstraints.NONE;
|
||
319 | pTransparencyByPixel = new JPanel(); |
||
320 | pTransparencyByPixel.setLayout(new GridBagLayout()); |
||
321 | pTransparencyByPixel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Transparencia por pixel", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null)); |
||
322 | 10645 | nacho | pTransparencyByPixel.setPreferredSize(new java.awt.Dimension(wPixel,hPixel));
|
323 | 8026 | nacho | pTransparencyByPixel.add(getJPanel1(), gridBagConstraints2); |
324 | pTransparencyByPixel.add(getPTranspByPixel(), gridBagConstraints); |
||
325 | } |
||
326 | return pTransparencyByPixel;
|
||
327 | } |
||
328 | |||
329 | /**
|
||
330 | 10645 | nacho | * Ajusta el tama?o de todos los componentes a partir del tama?o
|
331 | * introducido para el panel.
|
||
332 | * @param w
|
||
333 | * @param h
|
||
334 | 8026 | nacho | */
|
335 | 10645 | nacho | public void setComponentSize(int w, int h){ |
336 | wComp = w; hComp = h; |
||
337 | wPixel = wComp - 15; hPixel = hComp - 59; |
||
338 | wList = wPixel - 20; hList = hPixel - 60; |
||
339 | wGeneral = wComp - 15; hGeneral = 55; |
||
340 | wSlider = wGeneral - 160;
|
||
341 | |||
342 | this.setPreferredSize(new java.awt.Dimension(wComp, hComp)); |
||
343 | pTransparencyByPixel.setPreferredSize(new java.awt.Dimension(wPixel,hPixel));
|
||
344 | pGeneralTrans.setPreferredSize(new java.awt.Dimension(wGeneral,hGeneral));
|
||
345 | pTranspByPixel.setPreferredSize(new java.awt.Dimension(wList,hList));
|
||
346 | pTranspByPixel.setComponentSize(wList, hList); |
||
347 | slOpacidad.setPreferredSize(new java.awt.Dimension(wSlider, 16)); |
||
348 | |||
349 | 8026 | nacho | |
350 | } |
||
351 | |||
352 | /**
|
||
353 | * Eventos sobre TextField y CheckBox. Controla eventos de checkbox de opacidad, transparencia,
|
||
354 | * recorte de colas y los textfield de opacidad, valores de transparencia por banda y
|
||
355 | * porcentaje de recorte.
|
||
356 | */
|
||
357 | public void actionPerformed(ActionEvent e) { |
||
358 | //Evento sobre el checkbox de opacidad
|
||
359 | if (e.getSource().equals(getOpacityCheck())) {
|
||
360 | //Check de opacidad activado -> Activar controles de opacidad
|
||
361 | if (getOpacityCheck().isSelected()) {
|
||
362 | getOpacitySlider().setEnabled(true);
|
||
363 | getOpacityText().setEnabled(true);
|
||
364 | } else {
|
||
365 | getOpacitySlider().setEnabled(false);
|
||
366 | getOpacityText().setEnabled(false);
|
||
367 | } |
||
368 | } |
||
369 | |||
370 | //Evento sobre el checkbox de transparencia
|
||
371 | if (e.getSource().equals(getTransparencyCheck())) {
|
||
372 | //Check de opacidad activado -> Activar controles de opacidad
|
||
373 | if (getTransparencyCheck().isSelected()) {
|
||
374 | getPTranspByPixel().setControlEnabled(true);
|
||
375 | getPTranspByPixel().getPRGBInput().setActiveBands(nBands); |
||
376 | }else
|
||
377 | getPTranspByPixel().setControlEnabled(false);
|
||
378 | } |
||
379 | |||
380 | //Evento sobre el textfield de opacidad
|
||
381 | if (e.getSource().equals(getOpacityText()))
|
||
382 | checkOpacityText(); |
||
383 | } |
||
384 | |||
385 | public void focusGained(FocusEvent e) { |
||
386 | //pTrans.updateTextBox();
|
||
387 | } |
||
388 | |||
389 | public void focusLost(FocusEvent e) { |
||
390 | checkOpacityText(); |
||
391 | } |
||
392 | |||
393 | /*
|
||
394 | *
|
||
395 | */
|
||
396 | public void stateChanged(ChangeEvent e) { |
||
397 | //Ponemos el valor del texto de la opacidad de pendiendo de la posici?n del Slider
|
||
398 | if (e.getSource().equals(getOpacitySlider())) {
|
||
399 | getOpacityText().setText( |
||
400 | String.valueOf(getOpacitySlider().getValue()));
|
||
401 | } |
||
402 | } |
||
403 | |||
404 | /**
|
||
405 | * Controla que si el formato introducido en el textfield
|
||
406 | * de opacidad es numerico se actualiza la posici?n del
|
||
407 | * slider.
|
||
408 | */
|
||
409 | private void checkOpacityText() { |
||
410 | String op = getOpacityText().getText();
|
||
411 | int value = 0; |
||
412 | |||
413 | try {
|
||
414 | if (!op.equals("")) { |
||
415 | value = Integer.parseInt(op);
|
||
416 | } |
||
417 | |||
418 | getOpacitySlider().setValue(value); |
||
419 | } catch (NumberFormatException exc) { |
||
420 | System.err.println("Formato no numerico"); |
||
421 | getOpacityText().setText("100");
|
||
422 | getOpacitySlider().setValue(100);
|
||
423 | } |
||
424 | } |
||
425 | |||
426 | } // @jve:decl-index=0:visual-constraint="36,15" |