Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extWFS2 / src / com / iver / cit / gvsig / gui / panels / attributesTree / CheckBoxTreeCellEditor.java @ 8388

History | View | Annotate | Download (5.01 KB)

1
package com.iver.cit.gvsig.gui.panels.attributesTree;
2

    
3
import java.awt.Component;
4
import java.awt.event.MouseEvent;
5
import java.util.EventObject;
6

    
7
import javax.swing.AbstractCellEditor;
8
import javax.swing.JCheckBox;
9
import javax.swing.JTree;
10
import javax.swing.event.ChangeEvent;
11
import javax.swing.tree.TreeCellEditor;
12
import javax.swing.tree.TreePath;
13

    
14
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
15
 *
16
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
17
 *
18
 * This program is free software; you can redistribute it and/or
19
 * modify it under the terms of the GNU General Public License
20
 * as published by the Free Software Foundation; either version 2
21
 * of the License, or (at your option) any later version.
22
 *
23
 * This program is distributed in the hope that it will be useful,
24
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
 * GNU General Public License for more details.
27
 *
28
 * You should have received a copy of the GNU General Public License
29
 * along with this program; if not, write to the Free Software
30
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
31
 *
32
 * For more information, contact:
33
 *
34
 *  Generalitat Valenciana
35
 *   Conselleria d'Infraestructures i Transport
36
 *   Av. Blasco Ib??ez, 50
37
 *   46010 VALENCIA
38
 *   SPAIN
39
 *
40
 *      +34 963862235
41
 *   gvsig@gva.es
42
 *      www.gvsig.gva.es
43
 *
44
 *    or
45
 *
46
 *   IVER T.I. S.A
47
 *   Salamanca 50
48
 *   46005 Valencia
49
 *   Spain
50
 *
51
 *   +34 963163400
52
 *   dac@iver.es
53
 */
54
/* CVS MESSAGES:
55
 *
56
 * $Id: CheckBoxTreeCellEditor.java 8388 2006-10-27 11:33:19Z jorpiell $
57
 * $Log$
58
 * Revision 1.1  2006-10-27 11:33:19  jorpiell
59
 * A?adida la treetable con los check box para seleccionar los atributos
60
 *
61
 *
62
 */
63
/**
64
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
65
 */
66
public class CheckBoxTreeCellEditor extends AbstractCellEditor implements TreeCellEditor {
67
        CheckBoxTreeCellRenderer renderer = null;
68
        ChangeEvent changeEvent = null;
69
        JTree tree;
70
        AttributesTreeTable treetable;
71
        
72
        public CheckBoxTreeCellEditor(AttributesTreeTable treetable) {
73
                this.treetable = treetable;
74
                this.tree = (JTree)treetable.getTree();
75
                this.renderer = new CheckBoxTreeCellRenderer(treetable);
76
        }        
77
        
78
        /*
79
         *  (non-Javadoc)
80
         * @see javax.swing.CellEditor#getCellEditorValue()
81
         */
82
        public Object getCellEditorValue() {
83
                return null;
84
        }
85
        
86
        /*
87
         *  (non-Javadoc)
88
         * @see javax.swing.CellEditor#isCellEditable(java.util.EventObject)
89
         */
90
        public boolean isCellEditable(EventObject event) {
91
                if (event instanceof MouseEvent) {
92
                        MouseEvent mouseEvent = (MouseEvent) event;
93
                        TreePath path = tree.getPathForLocation(mouseEvent.getX(),
94
                                        mouseEvent.getY());
95
                        if (path != null) {
96
                                Object node = path.getLastPathComponent();
97
                                if ((node != null) && (node instanceof CheckBoxNode)) {
98
                                        CheckBoxNode selectedNode = (CheckBoxNode)node;
99
                                        if (mouseEvent.getClickCount() == 2){
100
                                                
101
                                        }else if(mouseEvent.getClickCount() == 1){
102
                                                changeAllChildren(selectedNode,!selectedNode.isSelected());
103
                                                changeParentState(selectedNode,!selectedNode.isSelected());
104
                                                tree.repaint();
105
                                        }
106
                                }
107
                        }
108
                }
109
                return false;
110
        }
111
        
112
        /*
113
         *  (non-Javadoc)
114
         * @see javax.swing.tree.TreeCellEditor#getTreeCellEditorComponent(javax.swing.JTree, java.lang.Object, boolean, boolean, boolean, int)
115
         */
116
        public Component getTreeCellEditorComponent(JTree tree, Object value,
117
                        boolean selected, boolean expanded, boolean leaf, int row) {
118
                Component editor = renderer.getTreeCellRendererComponent(tree, value,
119
                                true, expanded, leaf, row, true);
120
                
121
                if (editor instanceof JCheckBox) {
122
                        //((JCheckBox) editor).addItemListener(new CheckBoxListener());
123
                }                
124
                return editor;
125
        }        
126
        
127
        /**
128
         * It enable or disable the parent node state depending of its children values
129
         * @param selectedNode
130
         * Selected node
131
         * @param isSelected
132
         * Current node status
133
         */
134
        private void changeParentState(CheckBoxNode selectedNode,boolean isSelected){
135
                CheckBoxNode parent = selectedNode.getParentNode();
136
                while (parent != null){                        
137
                        if (isSelected != parent.isSelected()){
138
                                parent.setColor(TetraStateCheckBox.GREY);
139
                        }else{        
140
                                boolean isEnabled = true;
141
                                for (int i=0 ; i<parent.getChildren().size() ; i++){
142
                                        CheckBoxNode child = (CheckBoxNode)parent.getChildren().get(i);
143
                                        if (child != selectedNode){
144
                                                if (parent.isSelected() != child.isSelected()){
145
                                                        isEnabled = false;
146
                                                }
147
                                        }
148
                                }
149
                                if (!isEnabled){
150
                                        parent.setColor(TetraStateCheckBox.GREY);
151
                                }else{
152
                                        parent.setColor(TetraStateCheckBox.WHITE);
153
                                }                                        
154
                                
155
                        }                        
156
                        selectedNode = parent;
157
                        parent = selectedNode.getParentNode();                        
158
                }
159
        }
160
        
161
        
162
        /**
163
         * It changes all the children status
164
         * @param selectedNode
165
         * Root node
166
         * @param selected
167
         * New state
168
         */
169
        private void changeAllChildren(CheckBoxNode selectedNode,boolean selected){
170
                for (int i=0 ; i<selectedNode.getChildren().size() ; i++){
171
                        CheckBoxNode child = ((CheckBoxNode)selectedNode.getChildren().get(i));
172
                        child.setSelected(selected);                        
173
                        if (child.getChildren().size() > 0){
174
                                changeAllChildren(child,selected);
175
                        }                        
176
                }
177
        }
178
}