root / trunk / libraries / libUIComponent_praster / src / org / gvsig / gui / beans / treelist / listeners / TreeListListener.java @ 8026
History | View | Annotate | Download (8.06 KB)
1 | 8026 | nacho | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
|
||
4 | *
|
||
5 | * This program is free software; you can redistribute it and/or
|
||
6 | * modify it under the terms of the GNU General Public License
|
||
7 | * as published by the Free Software Foundation; either version 2
|
||
8 | * of the License, or (at your option) any later version.
|
||
9 | *
|
||
10 | * This program is distributed in the hope that it will be useful,
|
||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
13 | * GNU General Public License for more details.
|
||
14 | *
|
||
15 | * You should have received a copy of the GNU General Public License
|
||
16 | * along with this program; if not, write to the Free Software
|
||
17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
18 | */
|
||
19 | package org.gvsig.gui.beans.treelist.listeners; |
||
20 | |||
21 | import java.awt.event.MouseEvent; |
||
22 | import java.awt.event.MouseListener; |
||
23 | import java.awt.event.MouseMotionListener; |
||
24 | import java.util.ArrayList; |
||
25 | |||
26 | import javax.swing.DefaultListModel; |
||
27 | import javax.swing.JList; |
||
28 | import javax.swing.JTree; |
||
29 | import javax.swing.tree.DefaultMutableTreeNode; |
||
30 | import javax.swing.tree.TreePath; |
||
31 | |||
32 | import org.gvsig.gui.beans.treelist.event.TreeListEvent; |
||
33 | |||
34 | /**
|
||
35 | * Esta clase contiene la l?gica que a?ade elementos desde el arbol a la lista, arrastrando o
|
||
36 | * haciendo doble click sobre el elemento en el arbol, elimina elementos de la lista haciendo
|
||
37 | * doble click sobre ellos o intercambia elementos arrastrando en la lista de una posici?n
|
||
38 | * a otra.
|
||
39 | * Nacho Brodin (brodin_ign@gva.es)
|
||
40 | */
|
||
41 | |||
42 | public class TreeListListener implements MouseListener, MouseMotionListener, TreeListComponentListener{ |
||
43 | |||
44 | private JTree tree = null; |
||
45 | private JList list = null; |
||
46 | private DefaultMutableTreeNode raiz = null; |
||
47 | private ArrayList listListeners = null; |
||
48 | private TreeListEvent ev = new TreeListEvent(); |
||
49 | |||
50 | |||
51 | /**
|
||
52 | * This method initializes
|
||
53 | *
|
||
54 | */
|
||
55 | public TreeListListener() {
|
||
56 | } |
||
57 | |||
58 | /**
|
||
59 | * Asigna la lista
|
||
60 | * @param list
|
||
61 | */
|
||
62 | public void setList(JList list) { |
||
63 | this.list = list;
|
||
64 | } |
||
65 | |||
66 | /**
|
||
67 | * Asigna el arbol
|
||
68 | * @param tree
|
||
69 | */
|
||
70 | public void setTree(JTree tree) { |
||
71 | this.tree = tree;
|
||
72 | } |
||
73 | |||
74 | //-------------------------------------------
|
||
75 | //M?TODOS DEL LISTENER
|
||
76 | |||
77 | //A?ADIR A LA LISTA
|
||
78 | //Pinchar con doble click el elemento del arbol
|
||
79 | |||
80 | //Pichar lista -> obtiene draggLabel
|
||
81 | //Arrastrar -> draggActive
|
||
82 | //Released -> !draggActive. Si enterList y se ha arrastrado y se ha pichado un elemento de la lista -> a?ade elemento
|
||
83 | |||
84 | //ELIMINAR DE LA LISTA
|
||
85 | //Pinchar con doble click el elemento de la lista.
|
||
86 | |||
87 | //CAMBIAR EL ORDEN DE LOS ELEMENTOS DE LA LISTA
|
||
88 | //Pinchar lista -> Obtiene index del elem pinchado
|
||
89 | //Arrastrar -> draggElement a true
|
||
90 | //Soltar -> si hay elemento seleccionado estamos dentro de la lista y draggElement es true -> se intercambiar
|
||
91 | |||
92 | /**
|
||
93 | * Variable que contiene la etiqueta seleccionada y arrastrado hasta la lista
|
||
94 | */
|
||
95 | private String draggLabel = null; |
||
96 | /**
|
||
97 | * Variable que est? a true si estamos arrastrando una etiqueta
|
||
98 | */
|
||
99 | private boolean draggActive = false; |
||
100 | /**
|
||
101 | * Variable que est? a true si el rat?n ha entrado en la lista
|
||
102 | */
|
||
103 | private boolean enterInList = false; |
||
104 | /**
|
||
105 | * Elemento seleccionado de la lista. -1 si no hay ninguno;
|
||
106 | */
|
||
107 | private int selectElement = -1; |
||
108 | /**
|
||
109 | * Variable que est? a true si estamos arrastrando un elemento de la lista
|
||
110 | */
|
||
111 | private boolean draggElement = false; |
||
112 | |||
113 | public void mouseClicked(MouseEvent e) { |
||
114 | |||
115 | if(e.getSource() == list){
|
||
116 | //Si es doble click y hay alg?n elemento seleccionado en la lista lo eliminamos
|
||
117 | if(e.getClickCount() == 2 && list.getSelectedIndex() != -1){ |
||
118 | DefaultListModel model = (DefaultListModel)list.getModel(); |
||
119 | |||
120 | //Lanzamos el evento de eliminar un elemento
|
||
121 | ev.resetValues(); |
||
122 | ev.setElementRemoved((String)list.getSelectedValue());
|
||
123 | elementRemoved(ev); |
||
124 | |||
125 | model.remove(list.getSelectedIndex()); |
||
126 | } |
||
127 | } |
||
128 | |||
129 | if(e.getSource() == tree){
|
||
130 | //Si es doble click y hay alg?n elemento seleccionado en el arbol lo a?adimos
|
||
131 | if(e.getClickCount() == 2 && draggLabel != null){ |
||
132 | DefaultListModel model = (DefaultListModel)list.getModel(); |
||
133 | |||
134 | //Lanzamos el evento de a?adir un elemento
|
||
135 | ev.resetValues(); |
||
136 | ev.setElementAdded(draggLabel); |
||
137 | elementAdded(ev); |
||
138 | |||
139 | model.addElement(draggLabel); |
||
140 | draggLabel = null;
|
||
141 | } |
||
142 | } |
||
143 | } |
||
144 | |||
145 | public void mouseEntered(MouseEvent e) { |
||
146 | if(e.getSource() == list)
|
||
147 | enterInList = true;
|
||
148 | |||
149 | } |
||
150 | |||
151 | public void mouseExited(MouseEvent e) { |
||
152 | if(e.getSource() == list)
|
||
153 | enterInList = false;
|
||
154 | } |
||
155 | |||
156 | |||
157 | |||
158 | public void mousePressed(MouseEvent e) { |
||
159 | selectElement = -1;
|
||
160 | |||
161 | //Al pulsar sobre el Arbol se captura el elemento seleccionado
|
||
162 | if(e.getSource() == tree){
|
||
163 | TreePath[] tp = tree.getSelectionPaths(); |
||
164 | if(tp != null){ |
||
165 | String val = tp[0].toString(); |
||
166 | //Comprobamos que se haya pinchado sobre una rama
|
||
167 | String[] pathTree = val.split(", "); |
||
168 | if(pathTree.length <= 2) |
||
169 | draggLabel = null;
|
||
170 | else
|
||
171 | draggLabel = val.substring(val.lastIndexOf(", ") + 2, val.lastIndexOf("]")); |
||
172 | } |
||
173 | } |
||
174 | |||
175 | //Al pulsar sobre la lista capturamos el elemento seleccionado
|
||
176 | if(e.getSource() == list){
|
||
177 | selectElement = list.getSelectedIndex(); |
||
178 | if(selectElement < 0) |
||
179 | return;
|
||
180 | |||
181 | //Capturamos datos para el evento elementMoved
|
||
182 | ev.resetValues(); |
||
183 | ev.setPositionSourceElement(selectElement); |
||
184 | ev.setSourceElement((String)((DefaultListModel)list.getModel()).getElementAt(selectElement)); |
||
185 | } |
||
186 | } |
||
187 | |||
188 | |||
189 | public void mouseReleased(MouseEvent e) { |
||
190 | |||
191 | //Si se ha pinchado sobre un elemento del arbol y se ha arrastrado lo a?adimos
|
||
192 | if(enterInList){
|
||
193 | if(draggLabel != null && draggActive == true){ |
||
194 | DefaultListModel model = (DefaultListModel)list.getModel(); |
||
195 | |||
196 | //Lanzamos el evento de a?adir un elemento
|
||
197 | ev.setElementAdded(draggLabel); |
||
198 | elementAdded(ev); |
||
199 | |||
200 | model.addElement(draggLabel); |
||
201 | draggLabel = null;
|
||
202 | } |
||
203 | } |
||
204 | |||
205 | //Si se est? arrastrando un elemento de la lista se intercambia por el lugar donde se suelta
|
||
206 | if(draggElement && e.getSource() == list && selectElement != -1){ |
||
207 | if(list.getSelectedIndex() != selectElement){
|
||
208 | DefaultListModel model = (DefaultListModel)list.getModel(); |
||
209 | int posDst = list.getSelectedIndex();
|
||
210 | String elemOrig = (String)model.getElementAt(selectElement); |
||
211 | |||
212 | ev.setPositionDestElement(posDst); |
||
213 | ev.setDestElement((String)((DefaultListModel)list.getModel()).getElementAt(posDst)); |
||
214 | |||
215 | model.remove(selectElement); |
||
216 | model.insertElementAt(elemOrig, posDst); |
||
217 | } |
||
218 | } |
||
219 | |||
220 | //Al levantar el click del rat?n desactivamos los arrastres
|
||
221 | draggActive = false;
|
||
222 | draggElement = false;
|
||
223 | selectElement = -1;
|
||
224 | |||
225 | } |
||
226 | |||
227 | public void mouseDragged(MouseEvent e) { |
||
228 | //Al arrastrar desde el arbor se pone draggActive a true se se ha pinchado antes en un elemento
|
||
229 | if(e.getSource() == tree){
|
||
230 | if(draggLabel != null) |
||
231 | draggActive = true;
|
||
232 | } |
||
233 | |||
234 | if(e.getSource() == list){
|
||
235 | if(selectElement != -1) |
||
236 | draggElement = true;
|
||
237 | } |
||
238 | } |
||
239 | |||
240 | public void mouseMoved(MouseEvent e) { |
||
241 | |||
242 | } |
||
243 | |||
244 | /**
|
||
245 | * A?ade la lista de listeners
|
||
246 | * @param l
|
||
247 | */
|
||
248 | public void setListeners(ArrayList l){ |
||
249 | this.listListeners = l;
|
||
250 | } |
||
251 | |||
252 | /**
|
||
253 | * Ejecutamos el m?todo elementAdded de todos los listeners registrados
|
||
254 | * @param e TreeListEvent
|
||
255 | */
|
||
256 | public void elementAdded(TreeListEvent e) { |
||
257 | if(listListeners == null || listListeners.size() == 0) |
||
258 | return;
|
||
259 | for(int i = 0; i < listListeners.size(); i++) |
||
260 | ((TreeListComponentListener)listListeners.get(i)).elementAdded(e); |
||
261 | } |
||
262 | |||
263 | /**
|
||
264 | * Ejecutamos el m?todo elementRemoved de todos los listeners registrados
|
||
265 | * @param e TreeListEvent
|
||
266 | */
|
||
267 | public void elementRemoved(TreeListEvent e) { |
||
268 | if(listListeners == null || listListeners.size() == 0) |
||
269 | return;
|
||
270 | for(int i = 0; i < listListeners.size(); i++) |
||
271 | ((TreeListComponentListener)listListeners.get(i)).elementRemoved(e); |
||
272 | } |
||
273 | |||
274 | /**
|
||
275 | * Ejecutamos el m?todo elementMoved de todos los listeners registrados
|
||
276 | * @param e TreeListEvent
|
||
277 | */
|
||
278 | public void elementMoved(TreeListEvent e) { |
||
279 | if(listListeners == null || listListeners.size() == 0) |
||
280 | return;
|
||
281 | for(int i = 0; i < listListeners.size(); i++) |
||
282 | ((TreeListComponentListener)listListeners.get(i)).elementMoved(e); |
||
283 | } |
||
284 | |||
285 | } |