Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libUI / src / org / gvsig / gui / beans / filterPanel / filterButtons / FilterButtonsJPanel.java @ 9033

History | View | Annotate | Download (16.7 KB)

1
package org.gvsig.gui.beans.filterPanel.filterButtons;
2

    
3
import java.awt.LayoutManager;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.awt.event.ComponentAdapter;
7
import java.awt.event.ComponentEvent;
8
import java.awt.event.MouseAdapter;
9
import java.awt.event.MouseEvent;
10
import java.beans.PropertyChangeListener;
11
import java.beans.PropertyChangeSupport;
12
import java.io.Serializable;
13
import java.text.DateFormat;
14
import java.util.Date;
15
import java.util.HashMap;
16

    
17
import javax.swing.JPanel;
18

    
19
import org.gvsig.gui.beans.Messages;
20
import org.gvsig.gui.beans.textBoxWithCalendar.JCalendarDateDialog;
21

    
22
import java.awt.Dimension;
23
import java.awt.GridBagLayout;
24
import java.awt.GridBagConstraints;
25

    
26
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
27
 *
28
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
29
 *
30
 * This program is free software; you can redistribute it and/or
31
 * modify it under the terms of the GNU General Public License
32
 * as published by the Free Software Foundation; either version 2
33
 * of the License, or (at your option) any later version.
34
 *
35
 * This program is distributed in the hope that it will be useful,
36
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
37
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
38
 * GNU General Public License for more details.
39
 *
40
 * You should have received a copy of the GNU General Public License
41
 * along with this program; if not, write to the Free Software
42
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
43
 *
44
 * For more information, contact:
45
 *
46
 *  Generalitat Valenciana
47
 *   Conselleria d'Infraestructures i Transport
48
 *   Av. Blasco Ib??ez, 50
49
 *   46010 VALENCIA
50
 *   SPAIN
51
 *
52
 *      +34 963862235
53
 *   gvsig@gva.es
54
 *      www.gvsig.gva.es
55
 *
56
 *    or
57
 *
58
 *   IVER T.I. S.A
59
 *   Salamanca 50
60
 *   46005 Valencia
61
 *   Spain
62
 *
63
 *   +34 963163400
64
 *   dac@iver.es
65
 */
66

    
67
/**
68
 * This class is a panel with buttons for filter operations: AND, OR, NOT, >, <, ...
69
 * 
70
 * @author Pablo Piqueras Bartolom? (p_queras@hotmail.com)
71
 */
72
public class FilterButtonsJPanel extends JPanel implements Serializable {
73
        private static final long serialVersionUID = -8707991552239900454L;
74

    
75
        public static final int default_FilterButtonsJPanelWidth = 190;
76
        public static final int default_FilterButtonsJPanellHeight = 130;
77
        private final int buttonsGroupJPanelWidth = 190;
78
        private final int buttonsGroupJPanelHeight = 100;
79
        private final int buttonHeight = 20;
80
        private final int buttonWidthUnit = 40;
81

    
82
        private javax.swing.JButton btnEqual = null;
83
        private javax.swing.JButton btnDistinct = null;
84
        private javax.swing.JButton btnGreater = null;
85
        private javax.swing.JButton btnSmaller = null;
86
        private javax.swing.JButton btnEqualGreater = null;
87
        private javax.swing.JButton btnEqualSmaller = null;
88
        private javax.swing.JButton btnAnd = null;
89
        private javax.swing.JButton btnOr = null;
90
        private javax.swing.JButton btnNot = null;
91
        private javax.swing.JButton btnDate = null;
92
        private javax.swing.JButton btnParenthesis = null;
93
        private javax.swing.JButton btnDeleteText = null;
94
        private javax.swing.JPanel buttonsJPanel = null;        
95
        private javax.swing.JPanel referenceToFilterButtonsJPanel = null;
96
        
97
        // Last selected date
98
        private DateFormat dateFormat = DateFormat.getDateInstance();
99
        private Date lastSelectedDate = null;
100

    
101
        private JCalendarDateDialog jCalendarDateDialog = null;
102
        
103
        // Listener for property change support
104
        private PropertyChangeSupport changes = new PropertyChangeSupport(this);
105
        
106
        // Values of the events fired when has been clicked a button
107
        public static final int DEFAULT = 0;
108
        public static final int EQUAL = 1;
109
        public static final int DISTINCT = 2;
110
        public static final int GREATER = 3;
111
        public static final int SMALLER = 4;
112
        public static final int EQUALGREATER = 5;
113
        public static final int EQUALSMALLER = 6;
114
        public static final int AND = 7;
115
        public static final int OR = 8;
116
        public static final int NOT = 9;
117
        public static final int DATE = 10;
118
        public static final int PARENTHESIS = 11;
119
        public static final int DELETE_TEXT = 12;
120
        
121
        // Values of the type of event fired
122
        public static final int BUTTON_CLICKED_ACTION_ID = 13;
123
        public static final String BUTTON_CLICKED_ACTION_COMMAND = "Button Clicked";
124
        
125
        // Hash map for the items
126
        private HashMap map;
127
        
128
        // Action listener for notify (fire) some events that had happened to this component
129
        private ActionListener actionListener = null;
130

    
131
        /**
132
         * @see JPanel#JPanel()
133
         */
134
        public FilterButtonsJPanel() {
135
                super();
136
                map = new HashMap();
137
                referenceToFilterButtonsJPanel = this;
138
                initialize();
139
        }
140

    
141
        /**
142
         * @see JPanel#JPanel(boolean)
143
         */
144
        public FilterButtonsJPanel(boolean isDoubleBuffered) {
145
                super(isDoubleBuffered);
146
                map = new HashMap();
147
                referenceToFilterButtonsJPanel = this;
148
                initialize();
149
        }
150

    
151
        /**
152
         * @see JPanel#JPanel(java.awt.LayoutManager, boolean)
153
         */
154
        public FilterButtonsJPanel(LayoutManager layout, boolean isDoubleBuffered) {
155
                super(layout, isDoubleBuffered);
156
                map = new HashMap();
157
                referenceToFilterButtonsJPanel = this;
158
                initialize();
159
        }
160

    
161
        /**
162
         * @see JPanel#JPanel(java.awt.LayoutManager)
163
         */
164
        public FilterButtonsJPanel(LayoutManager layout) {
165
                super(layout);
166
                map = new HashMap();
167
                referenceToFilterButtonsJPanel = this;
168
                initialize();
169
        }
170
        
171
        /**
172
         * This method initializes this
173
         */
174
        private void initialize() {
175
                this.setPreferredSize(new Dimension(default_FilterButtonsJPanelWidth, default_FilterButtonsJPanellHeight));
176
                this.setLayout(new GridBagLayout());
177
                
178
                // Vertical center
179
                GridBagConstraints gridBagConstraints = new GridBagConstraints();
180
                gridBagConstraints.fill = GridBagConstraints.BOTH;
181
                gridBagConstraints.anchor = GridBagConstraints.CENTER;
182

    
183
                this.add(getButtonsJPanel(), gridBagConstraints);
184
        }
185
        
186
        /**
187
         * This method initializes buttonsJPanel
188
         *
189
         * @return javax.swing.JPanel
190
         */        
191
        private javax.swing.JPanel getButtonsJPanel() {
192
                if (buttonsJPanel == null) {
193
                        buttonsJPanel = new JPanel();
194
                        
195
                        buttonsJPanel.setPreferredSize(new Dimension(buttonsGroupJPanelWidth, buttonsGroupJPanelHeight));
196
                        buttonsJPanel.add(getBtnEqual());
197
                        buttonsJPanel.add(getBtnDistinct());
198
                        buttonsJPanel.add(getBtnDate());
199
                        buttonsJPanel.add(getBtnSmaller());
200
                        buttonsJPanel.add(getBtnGreater());
201
                        buttonsJPanel.add(getBtnEqualSmaller());
202
                        buttonsJPanel.add(getBtnEqualGreater());
203
                        buttonsJPanel.add(getBtnAnd());
204
                        buttonsJPanel.add(getBtnOr());
205
                        buttonsJPanel.add(getBtnNot());
206
                        buttonsJPanel.add(getBtnParenthesis());                        
207
                        buttonsJPanel.add(getBtnDeleteText());
208
                }
209
                
210
                return buttonsJPanel;
211
        }
212
        
213
        /**
214
         * This method initializes btnAnd
215
         *
216
         * @return javax.swing.JButton
217
         */        
218
        private javax.swing.JButton getBtnAnd() {
219
                if (btnAnd == null) {
220
                        btnAnd = new javax.swing.JButton();
221
                        btnAnd.setText("And");
222
                        btnAnd.setMargin(new java.awt.Insets(2, 2, 2, 2));
223
                        btnAnd.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
224
                        map.put("And", new Integer(FilterButtonsJPanel.AND));
225
                        
226
                        btnAnd.addActionListener(this.getActionListener());
227
                }
228

    
229
                return btnAnd;
230
        }
231

    
232
        /**
233
         * This method initializes btnDistinct
234
         *
235
         * @return javax.swing.JButton
236
         */
237
        private javax.swing.JButton getBtnDistinct() {
238
                if (btnDistinct == null) {
239
                        btnDistinct = new javax.swing.JButton();
240
                        btnDistinct.setText("!=");
241
                        btnDistinct.setMargin(new java.awt.Insets(2, 2, 2, 2));
242
                        btnDistinct.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
243
                        map.put("!=", new Integer(FilterButtonsJPanel.DISTINCT));
244
                        
245
                        btnDistinct.addActionListener(this.getActionListener());
246
                }
247
                
248
                return btnDistinct;
249
        }
250
        
251
        
252
        /**
253
         * This method initializes btnEqua
254
         *
255
         * @return javax.swing.JButton
256
         */
257
        private javax.swing.JButton getBtnEqual() {
258
                if (btnEqual == null) {
259
                        btnEqual = new javax.swing.JButton();
260
                        btnEqual.setText("=");
261
                        btnEqual.setMargin(new java.awt.Insets(2, 2, 2, 2));
262
                        btnEqual.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
263
                        map.put("=", new Integer(FilterButtonsJPanel.EQUAL));
264

    
265
                        btnEqual.addActionListener(this.getActionListener());
266
                }
267

    
268
                return btnEqual;
269
        }
270

    
271
        /**
272
         * This method initializes btnGreater
273
         *
274
         * @return javax.swing.JButton
275
         */
276
        private javax.swing.JButton getBtnGreater() {
277
                if (btnGreater == null) {
278
                        btnGreater = new javax.swing.JButton();
279
                        btnGreater.setText(">");
280
                        btnGreater.setMargin(new java.awt.Insets(2, 2, 2, 2));
281
                        btnGreater.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
282
                        map.put(">", new Integer(FilterButtonsJPanel.GREATER));
283
                        
284
                        btnGreater.addActionListener(this.getActionListener());
285
                }
286

    
287
                return btnGreater;
288
        }
289

    
290
        /**
291
         * This method initializes btnEqualGreater
292
         *
293
         * @return javax.swing.JButton
294
         */
295
        private javax.swing.JButton getBtnEqualGreater() {
296
                if (btnEqualGreater == null) {
297
                        btnEqualGreater = new javax.swing.JButton();
298
                        btnEqualGreater.setText(">=");
299
                        btnEqualGreater.setMargin(new java.awt.Insets(2, 2, 2, 2));
300
                        btnEqualGreater.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
301
                        map.put(">=", new Integer(FilterButtonsJPanel.EQUALGREATER));
302
                        
303
                        btnEqualGreater.addActionListener(this.getActionListener());
304
                }
305

    
306
                return btnEqualGreater;
307
        }
308

    
309
        /**
310
         * This method initializes btnSmaller
311
         *
312
         * @return javax.swing.JButton
313
         */
314
        private javax.swing.JButton getBtnSmaller() {
315
                if (btnSmaller == null) {
316
                        btnSmaller = new javax.swing.JButton();
317
                        btnSmaller.setText("<");
318
                        btnSmaller.setMargin(new java.awt.Insets(2, 2, 2, 2));
319
                        btnSmaller.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
320
                        map.put("<", new Integer(FilterButtonsJPanel.SMALLER));
321
                        
322
                        btnSmaller.addActionListener(this.getActionListener());
323
                }
324

    
325
                return btnSmaller;
326
        }
327

    
328
        /**
329
         * This method initializes btnEqualSmaller
330
         *
331
         * @return javax.swing.JButton
332
         */
333
        private javax.swing.JButton getBtnEqualSmaller() {
334
                if (btnEqualSmaller == null) {
335
                        btnEqualSmaller = new javax.swing.JButton();
336
                        btnEqualSmaller.setText("<=");
337
                        btnEqualSmaller.setMargin(new java.awt.Insets(2, 2, 2, 2));
338
                        btnEqualSmaller.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
339
                        map.put("<=", new Integer(FilterButtonsJPanel.EQUALSMALLER));
340
                        
341
                        btnEqualSmaller.addActionListener(this.getActionListener());
342
                }
343

    
344
                return btnEqualSmaller;
345
        }
346

    
347
        /**
348
         * This method initializes btnDate
349
         *
350
         * @return javax.swing.JButton
351
         */
352
        private javax.swing.JButton getBtnDate() {
353
                if (btnDate == null) {
354
                        btnDate = new javax.swing.JButton();
355
                        btnDate.setText("Date");
356
                        btnDate.setMargin(new java.awt.Insets(2, 2, 2, 2));
357
                        btnDate.setPreferredSize(new java.awt.Dimension(86, buttonHeight));
358
                        map.put("Date", new Integer(FilterButtonsJPanel.DATE));
359
                        
360
                        btnDate.addMouseListener(new MouseAdapter() {
361
                                /*
362
                                 *  (non-Javadoc)
363
                                 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
364
                                 */
365
                                public void mouseClicked(MouseEvent e) {
366
                                        getCDD().show();
367
                                }                                
368
                        });                        
369
                }
370

    
371
                return btnDate;
372
        }
373

    
374
        /**
375
         * This method initializes a JCalendarDateDialog        
376
         *         
377
         * @return         
378
         */
379
        protected JCalendarDateDialog getCDD() {
380
                if (jCalendarDateDialog == null) {
381
                        jCalendarDateDialog = new JCalendarDateDialog(350, 230);
382
                        jCalendarDateDialog.setModal(true);
383
                        jCalendarDateDialog.setLocationRelativeTo(btnDate);
384
        
385
                        // Adds a listener for get the date when the 
386
                        jCalendarDateDialog.addComponentListener(new ComponentAdapter() {
387
                                /*
388
                                 *  (non-Javadoc)
389
                                 * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.ComponentEvent)
390
                                 */
391
                                public void componentHidden(ComponentEvent e) {
392
                                        lastSelectedDate = jCalendarDateDialog.getDate();
393
                                        
394
                                        actionListener.actionPerformed(new ActionEvent(btnDate, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND));
395

    
396
                                }                        
397
                        });
398
                
399
                }
400
                
401
                return jCalendarDateDialog;
402
        }        
403
        
404
        /**
405
         * This method initializes btnNot
406
         *
407
         * @return javax.swing.JButton
408
         */
409
        private javax.swing.JButton getBtnNot() {
410
                if (btnNot == null) {
411
                        btnNot = new javax.swing.JButton();
412
                        btnNot.setText("Not");
413
                        btnNot.setMargin(new java.awt.Insets(2, 2, 2, 2));
414
                        btnNot.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));                        
415
                        map.put("Not", new Integer(FilterButtonsJPanel.NOT));
416
                        
417
                        btnNot.addMouseListener(new MouseAdapter() {
418
                                /*
419
                                 *  (non-Javadoc)
420
                                 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
421
                                 */
422
                                public void mouseClicked(MouseEvent e) {
423
                                        new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
424
                                }                                
425
                        });
426
                        
427
                        btnNot.addActionListener(this.getActionListener());
428

    
429
                }
430

    
431
                return btnNot;
432
        }
433

    
434
        /**
435
         * This method initializes btnOr
436
         *
437
         * @return javax.swing.JButton
438
         */
439
        private javax.swing.JButton getBtnOr() {
440
                if (btnOr == null) {
441
                        btnOr = new javax.swing.JButton();
442
                        btnOr.setText("Or");
443
                        btnOr.setMargin(new java.awt.Insets(2, 2, 2, 2));
444
                        btnOr.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
445
                        map.put("Or", new Integer(FilterButtonsJPanel.OR));
446
                        
447
                        btnOr.addMouseListener(new MouseAdapter() {
448
                                /*
449
                                 *  (non-Javadoc)
450
                                 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
451
                                 */
452
                                public void mouseClicked(MouseEvent e) {
453
                                        new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
454
                                }                                
455
                        });
456
                        
457
                        btnOr.addActionListener(this.getActionListener());
458
                }
459

    
460
                return btnOr;
461
        }
462

    
463
        /**
464
         * This method initializes btnParenthesis
465
         *
466
         * @return javax.swing.JButton
467
         */
468
        private javax.swing.JButton getBtnParenthesis() {
469
                if (btnParenthesis == null) {
470
                        btnParenthesis = new javax.swing.JButton();
471
                        btnParenthesis.setText("()");
472
                        btnParenthesis.setMargin(new java.awt.Insets(2, 2, 2, 2));
473
                        btnParenthesis.setPreferredSize(new java.awt.Dimension(buttonWidthUnit, buttonHeight));
474
                        map.put("()", new Integer(FilterButtonsJPanel.PARENTHESIS));
475
                        
476
                        btnParenthesis.addMouseListener(new MouseAdapter() {
477
                                /*
478
                                 *  (non-Javadoc)
479
                                 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
480
                                 */
481
                                public void mouseClicked(MouseEvent e) {
482
                                        new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
483
                                }                                
484
                        });
485
                        
486
                        btnParenthesis.addActionListener(this.getActionListener());
487
                }
488

    
489
                return btnParenthesis;
490
        }
491
        
492
        /**
493
         * This method initializes btnDeleteText
494
         * 
495
         * @return javax.swing.JButton
496
         */
497
        private javax.swing.JButton getBtnDeleteText() {
498
                if (btnDeleteText == null) {
499
                        btnDeleteText = new javax.swing.JButton();
500
                        btnDeleteText.setText(Messages.getText("deleteText"));
501
                        btnDeleteText.setMargin(new java.awt.Insets(2, 2, 2, 2));
502
                        btnDeleteText.setPreferredSize(new java.awt.Dimension(176, buttonHeight));
503
                        map.put(Messages.getText("deleteText"), new Integer(FilterButtonsJPanel.DELETE_TEXT));
504
                        
505
                        btnDeleteText.addMouseListener(new MouseAdapter() {
506
                                /*
507
                                 *  (non-Javadoc)
508
                                 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
509
                                 */
510
                                public void mouseClicked(MouseEvent e) {
511
                                        new ActionEvent(this, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_ID, FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND);
512
                                }                                
513
                        });
514
                        
515
                        btnDeleteText.addActionListener(this.getActionListener());
516
                }
517
                        
518
                return btnDeleteText;        
519
        }
520
        
521
        /**
522
         * This method initializes the "actionListener" ActionListener
523
         * 
524
         * @return ActionListener
525
         */
526
        private ActionListener getActionListener() {
527
                if (actionListener == null) {
528
                        actionListener = new ActionListener() {
529
                                /*
530
                                 *  (non-Javadoc)
531
                                 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
532
                                 */
533
                                public void actionPerformed(ActionEvent event) {
534
                                           // Notifies that has been clicked a button
535
                                       changes.firePropertyChange(FilterButtonsJPanel.BUTTON_CLICKED_ACTION_COMMAND, FilterButtonsJPanel.DEFAULT, ((Integer) map.get( ((javax.swing.JButton)event.getSource()).getText())).intValue());
536
                        }
537
                    };
538
                }
539
                return actionListener;
540
        }
541
        
542
        /**
543
         * Returns the las selected date, formatted
544
         * 
545
         * @return A formatted date
546
         */
547
        public String getLastSelectedDate() {
548
                if (lastSelectedDate == null)
549
                        return "";
550
                else
551
                        return "Date(" + dateFormat.format(lastSelectedDate) + ")"; 
552
        }
553
        
554
        /**
555
         * Returns the 'DateFormat' private attribute
556
         * 
557
         * @return A 'DateFormat' reference
558
         */
559
        public DateFormat getDateFormat() {
560
                return dateFormat;
561
        }
562

    
563
    /**
564
     * Adds a "Property Change Listener"
565
     */
566
    public void addPropertyChangeListener(PropertyChangeListener l) {
567
            changes.addPropertyChangeListener(l);
568
    }
569

    
570
    /**
571
     * Removes a "Property Change Listener"
572
     */
573
    public void removePropertyChangeListener(PropertyChangeListener l) {
574
            changes.removePropertyChangeListener(l);
575
    }
576
}