Statistics
| Revision:

root / org.gvsig.complexlegend / trunk / org.gvsig.complexlegend / org.gvsig.complexlegend.swing / org.gvsig.complexlegend.swing.impl / src / main / java / org / gvsig / complexlegend / swing / impl / ComplexLegendItemPanel.java @ 86

History | View | Annotate | Download (9.93 KB)

1
package org.gvsig.complexlegend.swing.impl;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Dimension;
5
import java.awt.GridBagConstraints;
6
import java.awt.GridBagLayout;
7
import java.awt.Insets;
8
import java.awt.event.ActionEvent;
9
import java.awt.event.ActionListener;
10
import java.util.ArrayList;
11
import java.util.Iterator;
12
import java.util.List;
13

    
14
import javax.swing.ComboBoxModel;
15
import javax.swing.DefaultComboBoxModel;
16
import javax.swing.JButton;
17
import javax.swing.JCheckBox;
18
import javax.swing.JComboBox;
19
import javax.swing.JLabel;
20
import javax.swing.JOptionPane;
21
import javax.swing.JPanel;
22
import javax.swing.JSpinner;
23
import javax.swing.SpinnerModel;
24
import javax.swing.SpinnerNumberModel;
25

    
26
import org.gvsig.app.project.documents.view.legend.gui.AbstractParentPanel;
27
import org.gvsig.app.project.documents.view.legend.gui.ILegendPanel;
28
import org.gvsig.complexlegend.ComplexLegendItem;
29
import org.gvsig.complexlegend.VectorComplexLegend;
30
import org.gvsig.complexlegend.impl.DefaultComplexLegendItem;
31
import org.gvsig.fmap.mapcontext.layers.FLayer;
32
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
33
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
34
import org.gvsig.symbology.swing.SymbologySwingLocator;
35
import org.gvsig.tools.ToolsLocator;
36
import org.gvsig.tools.i18n.I18nManager;
37
import org.gvsig.tools.observer.Observable;
38
import org.gvsig.tools.observer.Observer;
39

    
40
public class ComplexLegendItemPanel extends JPanel implements Observable{
41

    
42
        /**
43
         * 
44
         */
45
        private static final long serialVersionUID = 8565120915575756286L;
46
        private ComplexLegendItem complexItem;
47
        private JSpinner maxScaleTXT;
48
        private JSpinner minScaleTXT;
49
        private VectorComplexLegend complexLegend;
50
        private JComboBox legendTypeCB;
51
        private FLayer layer;
52
        private DefaultComboBoxModel model;
53
        private JButton cancelButton;
54
        private JButton acceptButton;
55
        private List<Observer> observers;
56
        private I18nManager i18nManager;
57
        private JCheckBox minScaleCk;
58
        private JCheckBox maxScaleCk;
59

    
60
        
61
        public ComplexLegendItemPanel(FLayer layer, VectorComplexLegend vcl){
62
                this.i18nManager = ToolsLocator.getI18nManager();
63
                this.observers = new ArrayList<Observer>();
64
                this.layer = layer;
65
                this.complexLegend = vcl;
66
                initialize();
67
        }
68
        
69
        public ComplexLegendItemPanel(FLayer layer, VectorComplexLegend vcl, ComplexLegendItem cli) {
70
                this(layer, vcl);
71
                this.complexItem = cli;
72
                setData(cli);
73
        }
74

    
75
        private void initialize() {
76
                setPreferredSize(new Dimension(450, 225));
77

    
78
                JPanel mainPanel = new JPanel(new BorderLayout());
79
                mainPanel.setPreferredSize(new Dimension(440, 175));
80

    
81
                JPanel mainDataPanel = new JPanel();
82
                mainDataPanel.setPreferredSize(new Dimension(200, 100));
83
                GridBagLayout gridBagLayout2 = new GridBagLayout();
84
                gridBagLayout2.columnWidths = new int[] { 150, 180, 70 };
85
                gridBagLayout2.rowHeights = new int[] { 0, 0, 0, 0, 0, 0 };
86
                mainDataPanel.setLayout(gridBagLayout2);
87
                //mainDataPanel.setBorder(new TitledBorder( i18nManager.getTranslation("Connection_configuration") + ":"));
88

    
89
                GridBagConstraints c = new GridBagConstraints();
90
                c.fill = GridBagConstraints.HORIZONTAL;
91
                c.anchor = GridBagConstraints.WEST;
92
                c.insets = new Insets(3, 0, 3, 0);
93
                c.ipadx = 10;
94
                c.gridx = 0;
95
                c.gridy = 0;
96
                JLabel labelURL = new JLabel( i18nManager.getTranslation("MinScale")+":");
97
                mainDataPanel.add(labelURL, c);
98

    
99
                c.gridx = 1;
100
                c.gridwidth =2;
101
                mainDataPanel.add(getMinScaleField(), c);
102
                c.gridy = 1;
103
                mainDataPanel.add(getWithoutMinScale(), c);
104

    
105
                c.gridx = 0;
106
                c.gridy = 2;
107
                c.gridwidth =1;
108
                JLabel labelUser = new JLabel( i18nManager.getTranslation("MaxScale")+":");
109
                mainDataPanel.add(labelUser, c);
110

    
111
                c.gridx = 1;
112
                c.gridwidth =2;
113
                mainDataPanel.add(getMaxScaleField(), c);
114
                c.gridy = 3;
115
                mainDataPanel.add(getWithoutMaxScale(), c);
116

    
117
                c.gridx = 0;
118
                c.gridy = 4;
119
                c.gridwidth =1;
120
                JLabel labelPassword = new JLabel( i18nManager.getTranslation("LegendType")+":");
121
                mainDataPanel.add(labelPassword, c);
122

    
123
                c.gridx = 1;
124
                c.gridwidth =2;
125
                mainDataPanel.add(getLegendTypes(), c);
126

    
127
                mainPanel.add(mainDataPanel, BorderLayout.CENTER);
128
                add(mainPanel, BorderLayout.CENTER);
129
                
130
                add(getButtons(), BorderLayout.SOUTH);
131
        }
132
        
133
        private JCheckBox getWithoutMinScale() {
134
                if(minScaleCk == null){
135
                        minScaleCk = new JCheckBox(i18nManager.getTranslation("without_min_scale"));
136
                        minScaleCk.addActionListener(new ActionListener() {
137
                                public void actionPerformed(ActionEvent arg0) {
138
                                        getMinScaleField().setEnabled(!minScaleCk.isSelected());
139
                                }
140
                        });
141
                }
142
                return minScaleCk;
143
        }
144
        
145
        private JCheckBox getWithoutMaxScale() {
146
                if(maxScaleCk == null){
147
                        maxScaleCk = new JCheckBox(i18nManager.getTranslation("without_max_scale"));
148
                        maxScaleCk.addActionListener(new ActionListener() {
149
                                public void actionPerformed(ActionEvent arg0) {
150
                                        getMaxScaleField().setEnabled(!maxScaleCk.isSelected());
151
                                }
152
                        });
153
                }
154
                return maxScaleCk;
155
        }
156

    
157
        private JPanel getButtons() {
158
                JPanel buttons = new JPanel();
159
                buttons.add(getAcceptButton());
160
                buttons.add(getCancelButton());
161
                JPanel aux =new JPanel(new BorderLayout());
162
                aux.add(buttons, BorderLayout.EAST);
163
                return aux;
164
        }
165

    
166
        private JButton getAcceptButton() {
167
                if(this.acceptButton == null){
168
                        this.acceptButton = new JButton( i18nManager.getTranslation("accept"));
169
                        this.acceptButton.addActionListener(new ActionListener() {
170
                                public void actionPerformed(ActionEvent arg0) {
171
                                        acceptWindow();
172
                                }
173
                        });
174
                }
175
                return this.acceptButton;
176
        }
177

    
178
        protected void acceptWindow() {
179
                if(validateValues()){
180
                        notifyObservers(this, true);
181
                }
182
        }
183

    
184
        private JButton getCancelButton() {
185
                if(this.cancelButton == null){
186
                        this.cancelButton = new JButton( i18nManager.getTranslation("cancel"));
187
                        this.cancelButton.addActionListener(new ActionListener() {
188
                                public void actionPerformed(ActionEvent arg0) {
189
                                        hideWindow();
190
                                }
191
                        });
192
                }
193
                return this.cancelButton;
194
        }
195

    
196
        protected void hideWindow() {
197
                notifyObservers(this, false);
198
        }
199

    
200
        private JSpinner getMaxScaleField() {
201
                if(maxScaleTXT == null){
202
                        SpinnerModel model =
203
                                new SpinnerNumberModel(0, 0, 1000000000, 1000000);  
204
                        maxScaleTXT = new JSpinner(model);
205
                }
206
                return maxScaleTXT;
207
        }
208

    
209
        private JSpinner getMinScaleField() {
210
                if(minScaleTXT == null){
211
                        SpinnerModel model =
212
                                new SpinnerNumberModel(0, 0, 1000000000, 1000000);  
213
                        minScaleTXT = new JSpinner(model);
214
                }
215
                return minScaleTXT;
216
        }
217
        
218
        private ComboBoxModel getModel(){
219
                if(model == null){
220
                        model = new DefaultComboBoxModel();
221
                        List<ILegendPanel> legendPanels = 
222
                                        SymbologySwingLocator.getSwingManager().getLegendEditors(layer);
223
                        Iterator<ILegendPanel> it = legendPanels.iterator();
224
                        while(it.hasNext()){
225
                                ILegendPanel legPanel = (ILegendPanel) it.next();
226
                                if(!((legPanel instanceof AbstractParentPanel) ||
227
                                                (legPanel instanceof DefaultComplexLegendPanel))){
228
                                        model.addElement(new LegendPanelCombo(legPanel));
229
                                }
230
                        }
231
                        
232
                }
233
                return model;
234
        }
235
        
236
        public class LegendPanelCombo{
237
                
238
                private ILegendPanel legendPanel;
239

    
240
                public LegendPanelCombo(ILegendPanel panel){
241
                        this.legendPanel = panel;
242
                }
243
                
244
                public ILegendPanel getLegendPanel(){
245
                        return legendPanel;
246
                }
247
                
248
                public String toString(){
249
                        return this.legendPanel.getTitle();
250
                }
251
                
252
        }
253
        
254
        private JComboBox getLegendTypes() {
255
                if(legendTypeCB == null){
256
                        legendTypeCB = new JComboBox(getModel());
257
                        legendTypeCB.setEditable(false);
258
                        legendTypeCB.addActionListener(new ActionListener() {
259
                                public void actionPerformed(ActionEvent arg0) {
260
                                        getLegendPanel();
261
                                }
262
                        });
263
                }
264
                return legendTypeCB;
265
        }
266

    
267
        public ILegendPanel getLegendPanel() {
268
                LegendPanelCombo legPanel = (LegendPanelCombo) getLegendTypes().getSelectedItem();
269
                return legPanel.getLegendPanel();
270
        }
271
        
272
        
273
        private void setData(ComplexLegendItem cli) {
274
                // TODO Auto-generated method stub
275
                
276
        }
277
        
278
        public boolean validateValues(){
279
                ComplexLegendItem auxLeg = getLegendItem();
280
                if(getLegendPanel() == null){
281
                        createErrorDialog("panel_error_title", "panel_error");
282
                        return false;
283
                }
284
                
285
                if(getMinScaleField().getValue() == null ||
286
                                getMaxScaleField().getValue() == null ){
287
                        createErrorDialog("min_max_error_title", "min_max_error");
288
                        return false;
289
                }
290
                
291
                if(auxLeg.getMinScale() > auxLeg.getMaxScale()){
292
                        if(auxLeg.getMaxScale() >= 0){
293
                                createErrorDialog("min_greather_than_max_error_title", "min_greather_than_max_error");
294
                                return false;
295
                        }
296
                }
297
                
298
                if(complexLegend.isOverlapped(auxLeg)){
299
                        createErrorDialog("overlaping_error_title", "overlaping_error");
300
                        return false;
301
                }
302
                
303
                return true;
304
        }
305
        
306
        private void createErrorDialog(String title, String text){
307
                JOptionPane.showMessageDialog(null,
308
                            i18nManager.getTranslation(text),
309
                            i18nManager.getTranslation(title),
310
                            JOptionPane.ERROR_MESSAGE);
311
        }
312
        
313
        
314
        
315
        public ComplexLegendItem getLegendItem(){
316
                if(complexItem == null){
317
                        complexItem = new DefaultComplexLegendItem();
318
                }
319
                
320
                ILegendPanel panelLegend = getLegendPanel();
321
                ILegend leg;
322
                try {
323
                        leg = ((FLyrVect) layer).getLegend();
324
                        panelLegend.setData(layer, leg);
325
                        ILegend leg2 =panelLegend.getLegend();
326
                        if(leg2 != null){
327
                                complexItem.setLegend(leg2);
328
                        }
329
                } catch (Exception e) {
330
                        e.printStackTrace();
331
                }
332
                
333
                //complexItem.setLegend(getLegendPanel().getLegend());
334
                if(getMinScaleField().getValue() != null && !getWithoutMinScale().isSelected()){
335
                        double min = Double.parseDouble(getMinScaleField().getValue().toString());
336
                        complexItem.setMinScale(min);
337
                }else{
338
                        complexItem.setMinScale(-1);
339
                }
340
                if(getMaxScaleField().getValue() != null && !getWithoutMaxScale().isSelected()){
341
                        double max = Double.parseDouble(getMaxScaleField().getValue().toString());
342
                        complexItem.setMaxScale(max);
343
                }else{
344
                        complexItem.setMaxScale(-1);
345
                }
346
                return complexItem;
347
        }
348

    
349
        
350
        public void addObserver(Observer o) {
351
                observers.add(o);
352
        }
353

    
354
        public void deleteObserver(Observer o) {
355
                observers.remove(o);
356
        }
357

    
358
        public void deleteObservers() {
359
                observers.clear();
360
        }
361
        
362
        public synchronized void notifyObservers(Observable observable, Object tableName) {
363
                for(int i =0; i<this.observers.size(); i++ ) {
364
                        Observer o = (Observer) this.observers.get(i);
365
                        o.update(this, tableName);
366
                }
367
        }
368

    
369
        
370
        
371
}