Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / thememanager / legendmanager / FPanelLegendManager.java @ 2602

History | View | Annotate | Download (19.2 KB)

1
/*
2
 * Created on 08-feb-2005
3
 *
4
 * gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
5
 *
6
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
7
 *
8
 * This program is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU General Public License
10
 * as published by the Free Software Foundation; either version 2
11
 * of the License, or (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
21
 *
22
 * For more information, contact:
23
 *
24
 *  Generalitat Valenciana
25
 *   Conselleria d'Infraestructures i Transport
26
 *   Av. Blasco Ib??ez, 50
27
 *   46010 VALENCIA
28
 *   SPAIN
29
 *
30
 *      +34 963862235
31
 *   gvsig@gva.es
32
 *      www.gvsig.gva.es
33
 *
34
 *    or
35
 *
36
 *   IVER T.I. S.A
37
 *   Salamanca 50
38
 *   46005 Valencia
39
 *   Spain
40
 *
41
 *   +34 963163400
42
 *   dac@iver.es
43
 */
44
package com.iver.cit.gvsig.gui.thememanager.legendmanager;
45

    
46
import java.awt.CardLayout;
47
import java.awt.event.ActionEvent;
48
import java.awt.event.ActionListener;
49

    
50
import javax.swing.ButtonGroup;
51
import javax.swing.ImageIcon;
52
import javax.swing.JButton;
53
import javax.swing.JCheckBox;
54
import javax.swing.JComboBox;
55
import javax.swing.JLabel;
56
import javax.swing.JPanel;
57
import javax.swing.JRadioButton;
58
import javax.swing.JScrollPane;
59
import javax.swing.JTextArea;
60

    
61
import com.iver.andami.PluginServices;
62
import com.iver.cit.gvsig.AddLayer;
63
import com.iver.cit.gvsig.fmap.DriverException;
64
import com.iver.cit.gvsig.fmap.FMap;
65
import com.iver.cit.gvsig.fmap.layers.FLayer;
66
import com.iver.cit.gvsig.fmap.layers.XMLException;
67
import com.iver.cit.gvsig.fmap.layers.layerOperations.ClassifiableVectorial;
68
import com.iver.cit.gvsig.fmap.rendering.IntervalLegend;
69
import com.iver.cit.gvsig.fmap.rendering.Legend;
70
import com.iver.cit.gvsig.fmap.rendering.SingleSymbolLegend;
71
import com.iver.cit.gvsig.fmap.rendering.UniqueValueLegend;
72
import com.iver.cit.gvsig.fmap.rendering.VectorialIntervalLegend;
73
import com.iver.cit.gvsig.fmap.rendering.VectorialUniqueValueLegend;
74
import com.iver.cit.gvsig.gui.thememanager.legendmanager.panels.AbstractPanel;
75
import com.iver.cit.gvsig.gui.thememanager.legendmanager.panels.FPanelLegendDefault;
76
import com.iver.cit.gvsig.gui.thememanager.legendmanager.panels.FPanelLegendLabels;
77
import com.iver.cit.gvsig.gui.thememanager.legendmanager.panels.FPanelLegendValues;
78
import com.iver.cit.gvsig.gui.thememanager.legendmanager.panels.PanelLegendBreaks;
79
/**
80
 * 
81
 * @author jmorell
82
 *
83
 * TODO To change the template for this generated type comment go to
84
 * Window - Preferences - Java - Code Style - Code Templates
85
 */
86
public class FPanelLegendManager extends AbstractPanel {
87
        private ImageIcon iuniqueValues=new ImageIcon(AddLayer.class.getClassLoader()
88
                        .getResource("images/ValoresUnicos.png"));
89
        private ImageIcon iintervalValues=new ImageIcon(AddLayer.class.getClassLoader()
90
                        .getResource("images/Intervalos.png"));
91
        private FMap mapContext;
92
        private FLayer layer;
93
    private Legend renderer; // Le asignaremos la leyenda del primer tema activo.
94
    private FPanelLegendDefault m_defaultLegendPanel;
95
    private FPanelLegendValues m_valuesLegendPanel;
96
    private PanelLegendBreaks m_breaksLegendPanel;
97
    private FPanelLegendLabels m_labelsLegendPanel;
98
    private JPanel cards;
99
    private ComandosListener m_actionListener = new ComandosListener(this);
100
    private int visibleCard;
101
    private final String oneSymHelp = PluginServices.getText(this,"Muestra_todos_los_elementos_de_una_capa_usando_el_mismo_simbolo");
102
    private final String oneValHelp = PluginServices.getText(this,"Dado_un_campo_de_atributos") + "," + PluginServices.getText(this,"muestra_los_elementos_de_la_capa_usando_un_simbolo_por_cada_valor_unico") + ".";
103
    private final String intervalsHelp = PluginServices.getText(this,"Muestra_los_elementos_de_la_capa_usando_una_gama_de_colores_en_funcion_del_valor_de_un_determinado_campo_de_atributos") + ".";
104
    private final String labelsHelp = PluginServices.getText(this,"Permite_etiquetar_los_elementos_del_mapa_con_el_valor_de_un_determinado_campo") + ".";
105
    
106
        private JPanel topPanel = null;
107
        private JLabel jLabel = null;
108
        private JComboBox jComboBox = null;
109
        private JButton jButton = null;
110
        private JButton jButton1 = null;
111
        private JCheckBox jCheckBox = null;
112
        private JPanel jPanel = null;
113
        private JTextArea jTextArea = null;
114
        
115
        private JPanel jPanel1 = null;
116
        
117
        private JRadioButton symbolButton;
118
        private JRadioButton valuesButton;
119
        private JRadioButton intervalsButton;
120
        private JRadioButton labelsButton;
121
        
122
        private JScrollPane jScrollPane = null;
123
        public FPanelLegendManager() {
124
                initialize();
125
                this.setSize(500, 360);
126
        }
127

    
128
    private void initialize() {
129
                visibleCard=0;
130
        JPanel selector = new JPanel();
131
        selector.setLayout(null);
132
        
133
        symbolButton = new JRadioButton();
134
        symbolButton.setText(PluginServices.getText(this,"Simbolo_unico"));
135
        symbolButton.setActionCommand("SYMBOL_CHOOSE");
136
        symbolButton.addActionListener(m_actionListener);
137
        
138
        valuesButton = new JRadioButton();
139
        valuesButton.setText(PluginServices.getText(this,"Valores_unicos"));
140
        valuesButton.setActionCommand("VALUES_CHOOSE");
141
        valuesButton.addActionListener(m_actionListener);
142
        
143
        intervalsButton = new JRadioButton();
144
        intervalsButton.setText(PluginServices.getText(this,"Intervalos"));
145
        intervalsButton.setActionCommand("BREAKS_CHOOSE");
146
        intervalsButton.addActionListener(m_actionListener);
147
        
148
                labelsButton = new JRadioButton();
149
                labelsButton.setText(PluginServices.getText(this,"Etiquetados"));
150
                labelsButton.setActionCommand("LABELS_CHOOSE");
151
                labelsButton.addActionListener(m_actionListener);
152
        
153
                ButtonGroup jButtonGroup = new ButtonGroup();
154
                jButtonGroup.add(symbolButton);
155
                jButtonGroup.add(valuesButton);
156
                jButtonGroup.add(intervalsButton);
157
                jButtonGroup.add(labelsButton);
158
                
159
        
160
            //Create the cards.
161
        m_defaultLegendPanel = new FPanelLegendDefault();
162
        m_valuesLegendPanel = new FPanelLegendValues();
163
        m_breaksLegendPanel = new PanelLegendBreaks();
164
        m_labelsLegendPanel = new FPanelLegendLabels(this);
165
        
166
        //Create the panel that contains the cards.
167
        cards = new JPanel(new CardLayout());
168
        this.setLayout(null);
169
        selector.setBounds(5, 41, 134, 197);
170
        selector.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
171
        selector.setBackground(java.awt.SystemColor.text);
172
        cards.setBounds(143, 88, 502, 270);
173
        cards.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
174
        symbolButton.setBounds(1, 5, 131, 23);
175
        symbolButton.setSelected(true);
176
        symbolButton.setBackground(java.awt.SystemColor.text);
177
        valuesButton.setBounds(1, 28, 131, 23);
178
        valuesButton.setBackground(java.awt.SystemColor.text);
179
        intervalsButton.setBounds(1, 51, 131, 23);
180
        intervalsButton.setBackground(java.awt.SystemColor.text);
181
        labelsButton.setBounds(1, 74, 131, 23);
182
        labelsButton.setBackground(java.awt.SystemColor.text);
183
        this.setSize(649, 377);
184
        cards.add(m_defaultLegendPanel, "symbol");
185
        this.add(selector, null);
186
        selector.add(symbolButton, null);
187
        cards.add(m_valuesLegendPanel, "values");
188
        this.add(cards, null);
189
        selector.add(valuesButton, null);
190
        cards.add(m_breaksLegendPanel, "breaks");
191
        selector.add(intervalsButton, null);
192
        this.add(getTopPanel(), null);
193
        cards.add(m_labelsLegendPanel, "labels");
194
        selector.add(labelsButton, null);
195
        this.add(getJPanel(), null);
196
        this.add(getJPanel1(), null);
197
    }
198
    
199
   
200
    
201
    /**
202
     * En esta funci?n se coge el primer tema activo del TOC y se usa su
203
     * renderer para inicializar. Hay que llamarla SIEMPRE que se abra el
204
     * cuadro de di?logo, en el  openLegendManager() de la vista.
205
     *
206
     * @param mapContext TOC que abre este cuadro de di?logo.
207
     * @throws DriverException
208
     */
209
    public void setMapContext(FMap mapContext) throws DriverException {
210
        this.mapContext = mapContext;
211
        layer = getFirstActiveLayerVect(mapContext.getLayers());
212
                try {
213
                        ClassifiableVectorial aux = (ClassifiableVectorial) layer;
214
                        renderer = (Legend) aux.getLegend().cloneLegend();
215
                } catch (XMLException e) {
216
                        // TODO Auto-generated catch block
217
                        e.printStackTrace();
218
                }
219
        actualizar();
220
    }
221
    
222
    /**
223
     * DOCUMENT ME!
224
     */
225
    public void actualizar() {
226
            FLayer lyrSelected = getFirstActiveLayerVect(mapContext.getLayers());
227
            
228
        m_defaultLegendPanel.setLayer(lyrSelected, renderer);
229
        m_valuesLegendPanel.setLayer(lyrSelected, renderer);
230
        m_breaksLegendPanel.setLayer(lyrSelected, renderer);
231
        m_labelsLegendPanel.setLayer(lyrSelected, renderer);
232
        
233
        CardLayout cl = (CardLayout)(cards.getLayout());
234
        if (renderer instanceof SingleSymbolLegend) {
235
                jTextArea.setText(oneSymHelp);
236
                getJPanel1().removeAll();
237
                    getJPanel1().add(m_defaultLegendPanel.getM_previewSymbol());
238
                    getJPanel1().repaint();
239
                symbolButton.setSelected(true);
240
            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Simbolo_unico") + ")");
241
            cl.show(cards, "symbol");
242
            setVisibleCard(0);
243
        }
244
        if (renderer instanceof UniqueValueLegend) {
245
                jTextArea.setText(oneValHelp);
246
                getJPanel1().removeAll();
247
                getJPanel1().repaint();
248
                valuesButton.setSelected(true);
249
            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Valores_unicos") + ")");
250
            cl.show(cards, "values");
251
            setVisibleCard(1);
252
        }
253
        if (renderer instanceof IntervalLegend) {
254
                jTextArea.setText(intervalsHelp);
255
                getJPanel1().removeAll();
256
                    getJPanel1().repaint();
257
                intervalsButton.setSelected(true);
258
            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Intervalos") + ")");
259
            cl.show(cards, "breaks");
260
            setVisibleCard(2);
261
        }
262
       
263
    }
264
    
265
        public void setLayer(FLayer lyr, Legend r) {
266
                layer = lyr;
267
                if (r instanceof SingleSymbolLegend) {
268
                        getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Simbolo_unico") + ")");
269
                        renderer = (SingleSymbolLegend)r;
270
                        getJPanel1().add(m_defaultLegendPanel.getM_previewSymbol());
271
            CardLayout cl = (CardLayout)(cards.getLayout());
272
            cl.show(cards, "symbol");
273
            setVisibleCard(0);
274
                } else if (r instanceof VectorialUniqueValueLegend) {
275
            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Valores_unicos") + ")");
276
                        renderer = (VectorialUniqueValueLegend)r;
277
            CardLayout cl = (CardLayout)(cards.getLayout());
278
            cl.show(cards, "values");
279
            setVisibleCard(1);
280
                } else if (r instanceof VectorialIntervalLegend) {
281
            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Intervalos") + ")");
282
                        renderer = (VectorialIntervalLegend)r;
283
            CardLayout cl = (CardLayout)(cards.getLayout());
284
            cl.show(cards, "breaks");
285
            setVisibleCard(2);
286
                } else {
287
            getJComboBox().getModel().setSelectedItem(layer.getName() + " (" + PluginServices.getText(this,"Etiquetas_estandar") + ")");
288
                        renderer = (SingleSymbolLegend)r;
289
            CardLayout cl = (CardLayout)(cards.getLayout());
290
            cl.show(cards, "labels");
291
            setVisibleCard(3);
292
                }
293
        }
294
        
295
    private class ComandosListener implements ActionListener {
296
     //   private FPanelLegendManager fPanSimMan;
297

    
298
        public ComandosListener(FPanelLegendManager fPanSimMan) {
299
        //        this.fPanSimMan = fPanSimMan;
300
        }
301

    
302
        public void actionPerformed(ActionEvent e) {
303
            if (e.getActionCommand() == "SYMBOL_CHOOSE") {
304
                    jTextArea.setText(oneSymHelp);
305
                        getJPanel1().removeAll();
306
                        getJPanel1().add(m_defaultLegendPanel.getM_previewSymbol());
307
                        getJPanel1().repaint();
308
                CardLayout cl = (CardLayout)(cards.getLayout());
309
                cl.show(cards, "symbol");
310
                visibleCard=0;
311
                System.out.println("Symbol");
312
            } else if (e.getActionCommand() == "VALUES_CHOOSE") {
313
                    jTextArea.setText(oneValHelp);
314
                        getJPanel1().removeAll();
315
                        getJPanel1().add(new JLabel(iuniqueValues));
316
                        getJPanel1().repaint();
317
                CardLayout cl = (CardLayout)(cards.getLayout());
318
                cl.show(cards, "values");
319
                visibleCard=1;
320
                    System.out.println("Values");
321
            } else if (e.getActionCommand() == "BREAKS_CHOOSE") {
322
                    jTextArea.setText(intervalsHelp);
323
                        getJPanel1().removeAll();
324
                        getJPanel1().add(new JLabel(iintervalValues));
325
                        getJPanel1().repaint();
326
                CardLayout cl = (CardLayout)(cards.getLayout());
327
                cl.show(cards, "breaks");
328
                visibleCard=2;
329
                    System.out.println("Breaks");
330
            } else if (e.getActionCommand() == "LABELS_CHOOSE") {
331
                    jTextArea.setText(labelsHelp);
332
                        getJPanel1().removeAll();
333
                        getJPanel1().add(m_labelsLegendPanel.getFPreviewSymbol());
334
                        getJPanel1().repaint();
335
                CardLayout cl = (CardLayout)(cards.getLayout());
336
                cl.show(cards, "labels");
337
                visibleCard=3;
338
                    System.out.println("Labels");
339
            } else {}
340
        }
341
    }
342
        
343
        public int getVisibleCard() {
344
                return visibleCard;
345
        }
346
        
347
        /**
348
         * This method initializes jPanel        
349
         *         
350
         * @return javax.swing.JPanel        
351
         */    
352
        private JPanel getTopPanel() {
353
                if (topPanel == null) {
354
                        jLabel = new JLabel();
355
                        topPanel = new JPanel();
356
                        topPanel.setLayout(null);
357
                        topPanel.setBounds(5, 5, 638, 31);
358
                        topPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
359
                        jLabel.setBounds(6, 4, 68, 22);
360
                        jLabel.setText(PluginServices.getText(this,"Leyenda") + ":");
361
                        topPanel.add(jLabel, null);
362
                        topPanel.add(getJComboBox(), null);
363
                        topPanel.add(getJButton(), null);
364
                        topPanel.add(getJButton1(), null);
365
                        topPanel.add(getJCheckBox(), null);
366
                }
367
                return topPanel;
368
        }
369
        /**
370
         * This method initializes jComboBox        
371
         *         
372
         * @return javax.swing.JComboBox        
373
         */    
374
        public JComboBox getJComboBox() {
375
                if (jComboBox == null) {
376
                        jComboBox = new JComboBox();
377
                        jComboBox.setBounds(78, 5, 250, 22);
378
                }
379
                return jComboBox;
380
        }
381
        /**
382
         * This method initializes jButton        
383
         *         
384
         * @return javax.swing.JButton        
385
         */    
386
        private JButton getJButton() {
387
                if (jButton == null) {
388
                        jButton = new JButton();
389
                        jButton.setBounds(345, 4, 22, 22);
390
                        jButton.setEnabled(false);
391
                }
392
                return jButton;
393
        }
394
        /**
395
         * This method initializes jButton1        
396
         *         
397
         * @return javax.swing.JButton        
398
         */    
399
        private JButton getJButton1() {
400
                if (jButton1 == null) {
401
                        jButton1 = new JButton();
402
                        jButton1.setBounds(371, 4, 22, 22);
403
                        jButton1.setEnabled(false);
404
                }
405
                return jButton1;
406
        }
407
        /**
408
         * This method initializes jCheckBox        
409
         *         
410
         * @return javax.swing.JCheckBox        
411
         */    
412
        private JCheckBox getJCheckBox() {
413
                if (jCheckBox == null) {
414
                        jCheckBox = new JCheckBox();
415
                        jCheckBox.setBounds(417, 4, 202, 22);
416
                        jCheckBox.setText(PluginServices.getText(this,"Leyenda_Por_Defecto"));
417
                        jCheckBox.setEnabled(false);
418
                }
419
                return jCheckBox;
420
        }
421
        /**
422
         * This method initializes jPanel        
423
         *         
424
         * @return javax.swing.JPanel        
425
         */    
426
        private JPanel getJPanel() {
427
                if (jPanel == null) {
428
                        jPanel = new JPanel();
429
                        jPanel.setLayout(null);
430
                        jPanel.setBounds(143, 39, 501, 46);
431
                        jPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
432
                        jPanel.add(getJScrollPane(), null);
433
                }
434
                return jPanel;
435
        }
436
        /**
437
         * This method initializes jTextArea        
438
         *         
439
         * @return javax.swing.JTextArea        
440
         */    
441
        private JTextArea getJTextArea() {
442
                if (jTextArea == null) {
443
                        jTextArea = new JTextArea();
444
                        jTextArea.setText(oneSymHelp);
445
                        jTextArea.setBackground(java.awt.SystemColor.control);
446
                        jTextArea.setLineWrap(true);
447
                        jTextArea.setRows(0);
448
                        jTextArea.setWrapStyleWord(false);
449
                        jTextArea.setEditable(false);
450
                        jTextArea.setPreferredSize(new java.awt.Dimension(495,40));
451
                }
452
                return jTextArea;
453
        }
454
        /**
455
         * This method initializes jPanel1        
456
         *         
457
         * @return javax.swing.JPanel        
458
         */    
459
        private JPanel getJPanel1() {
460
                if (jPanel1 == null) {
461
                        jPanel1 = new JPanel();
462
                        jPanel1.setBounds(6, 242, 132, 117);
463
                        jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
464
                        jPanel1.setBackground(java.awt.SystemColor.text);
465
                }
466
                return jPanel1;
467
        }
468
        /**
469
         * @return Returns the m_breaksLegendPanel.
470
         */
471
        public PanelLegendBreaks getM_breaksLegendPanel() {
472
                return m_breaksLegendPanel;
473
        }
474
        /**
475
         * @param legendPanel The m_breaksLegendPanel to set.
476
         */
477
        public void setM_breaksLegendPanel(PanelLegendBreaks legendPanel) {
478
                m_breaksLegendPanel = legendPanel;
479
        }
480
        /**
481
         * @return Returns the m_defaultLegendPanel.
482
         */
483
        public FPanelLegendDefault getM_defaultLegendPanel() {
484
                return m_defaultLegendPanel;
485
        }
486
        /**
487
         * @param legendPanel The m_defaultLegendPanel to set.
488
         */
489
        public void setM_defaultLegendPanel(FPanelLegendDefault legendPanel) {
490
                m_defaultLegendPanel = legendPanel;
491
        }
492
        /**
493
         * @return Returns the m_labelsLegendPanel.
494
         */
495
        public FPanelLegendLabels getM_labelsLegendPanel() {
496
                return m_labelsLegendPanel;
497
        }
498
        /**
499
         * @param legendPanel The m_labelsLegendPanel to set.
500
         */
501
        public void setM_labelsLegendPanel(FPanelLegendLabels legendPanel) {
502
                m_labelsLegendPanel = legendPanel;
503
        }
504
        /**
505
         * @return Returns the m_valuesLegendPanel.
506
         */
507
        public FPanelLegendValues getM_valuesLegendPanel() {
508
                return m_valuesLegendPanel;
509
        }
510
        /**
511
         * @param legendPanel The m_valuesLegendPanel to set.
512
         */
513
        public void setM_valuesLegendPanel(FPanelLegendValues legendPanel) {
514
                m_valuesLegendPanel = legendPanel;
515
        }
516
        /**
517
         * @return Returns the renderer.
518
         */
519
        public Legend getRenderer() {
520
                return renderer;
521
        }
522
        /**
523
         * @param renderer The renderer to set.
524
         */
525
        public void setRenderer(Legend renderer) {
526
                this.renderer = renderer;
527
        }
528
        /**
529
         * @param visibleCard The visibleCard to set.
530
         */
531
        public void setVisibleCard(int visibleCard) {
532
                this.visibleCard = visibleCard;
533
        }
534
        /**
535
         * This method initializes jScrollPane        
536
         *         
537
         * @return javax.swing.JScrollPane        
538
         */    
539
        private JScrollPane getJScrollPane() {
540
                if (jScrollPane == null) {
541
                        jScrollPane = new JScrollPane();
542
                        jScrollPane.setBounds(2, 2, 498, 42);
543
                        jScrollPane.setViewportView(getJTextArea());
544
                }
545
                return jScrollPane;
546
        }
547
         }  //  @jve:decl-index=0:visual-constraint="26,17"