Revision 1098
trunk/applications/appgvSIG/src/com/iver/cit/gvsig/gui/toc/TOC.java | ||
---|---|---|
20 | 20 |
import java.awt.event.MouseEvent; |
21 | 21 |
import java.util.ArrayList; |
22 | 22 |
import java.util.Enumeration; |
23 |
import java.util.HashMap; |
|
23 | 24 |
|
24 | 25 |
import javax.swing.BorderFactory; |
25 | 26 |
import javax.swing.JColorChooser; |
... | ... | |
29 | 30 |
import javax.swing.JTree; |
30 | 31 |
import javax.swing.SwingUtilities; |
31 | 32 |
import javax.swing.UIManager; |
33 |
import javax.swing.event.TreeExpansionEvent; |
|
34 |
import javax.swing.event.TreeExpansionListener; |
|
32 | 35 |
import javax.swing.tree.DefaultMutableTreeNode; |
33 | 36 |
import javax.swing.tree.DefaultTreeModel; |
34 | 37 |
import javax.swing.tree.TreePath; |
... | ... | |
40 | 43 |
import com.iver.cit.gvsig.fmap.DriverException; |
41 | 44 |
import com.iver.cit.gvsig.fmap.FMap; |
42 | 45 |
import com.iver.cit.gvsig.fmap.core.v02.FSymbol; |
43 |
import com.iver.cit.gvsig.fmap.drivers.DriverIOException; |
|
44 | 46 |
import com.iver.cit.gvsig.fmap.layers.CancelationException; |
45 | 47 |
import com.iver.cit.gvsig.fmap.layers.FLayer; |
46 | 48 |
import com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent; |
... | ... | |
52 | 54 |
import com.iver.cit.gvsig.fmap.rendering.ClassifiedLegendInfo; |
53 | 55 |
import com.iver.cit.gvsig.fmap.rendering.Legend; |
54 | 56 |
import com.iver.cit.gvsig.fmap.rendering.LegendChangedEvent; |
55 |
import com.iver.cit.gvsig.fmap.rendering.styling.FStyle2D; |
|
56 | 57 |
|
57 | 58 |
/** |
58 | 59 |
* @author fjp |
... | ... | |
61 | 62 |
* Window>Preferences>Java>Code Generation>Code and Comments |
62 | 63 |
*/ |
63 | 64 |
public class TOC extends JComponent implements ITocOrderListener, |
64 |
LegendListener, LayerCollectionListener, ComponentListener { |
|
65 |
LegendListener, LayerCollectionListener, |
|
66 |
TreeExpansionListener, ComponentListener { |
|
65 | 67 |
private FMap mapContext; |
66 | 68 |
private DnDJTree m_Tree; |
67 | 69 |
private DefaultTreeModel m_TreeModel; |
... | ... | |
69 | 71 |
private TOCRenderer m_TocRenderer; |
70 | 72 |
private JScrollPane m_Scroller; |
71 | 73 |
private ArrayList m_Listeners; |
74 |
private HashMap m_ItemsExpanded = new HashMap(); |
|
72 | 75 |
|
73 | 76 |
/** |
74 | 77 |
* Clase Listener que reacciona al pulsar sobre el checkbox de un nodo y |
... | ... | |
196 | 199 |
m_Tree.setBackground(UIManager.getColor("Button.background")); |
197 | 200 |
m_Tree.setBorder(BorderFactory.createEtchedBorder()); |
198 | 201 |
|
199 |
this.addComponentListener(this);
|
|
202 |
this.addComponentListener(this); |
|
200 | 203 |
|
204 |
m_Tree.addTreeExpansionListener(this); |
|
205 |
|
|
201 | 206 |
m_Tree.addOrderListener(this); |
202 | 207 |
|
203 | 208 |
m_Tree.setRowHeight(0); // Para que lo determine el renderer |
... | ... | |
253 | 258 |
}); |
254 | 259 |
} |
255 | 260 |
|
261 |
private void setExpandedNodes() |
|
262 |
{ |
|
263 |
int i = 0; |
|
264 |
// Las claves sobrantes de m_ItemsExpanded (provocadas |
|
265 |
// por layerRemove, se quitan en el evento layerRemoved |
|
266 |
// de este TOC |
|
267 |
DefaultMutableTreeNode n; |
|
268 |
Enumeration enum = m_Root.children(); |
|
269 |
while (enum.hasMoreElements()) |
|
270 |
{ |
|
271 |
n = (DefaultMutableTreeNode) enum.nextElement(); |
|
272 |
TreePath path = new TreePath(m_TreeModel.getPathToRoot(n)); |
|
273 |
ITocItem item = (ITocItem) n.getUserObject(); |
|
274 |
Boolean b = (Boolean) m_ItemsExpanded.get(item.getLabel()); |
|
275 |
if (b == null) // No estaba en el hash todav?a: valor por defecto |
|
276 |
{ |
|
277 |
// System.out.println("Primera expansi?n de " + item.getLabel()); |
|
278 |
m_Tree.expandPath(path); |
|
279 |
return; |
|
280 |
} |
|
281 |
if (b.booleanValue()) |
|
282 |
{ |
|
283 |
// System.out.println("Expansi?n de " + item.getLabel()); |
|
284 |
m_Tree.expandPath(path); |
|
285 |
} |
|
286 |
else |
|
287 |
{ |
|
288 |
// System.out.println("Colapso de " + item.getLabel()); |
|
289 |
m_Tree.collapsePath(path); |
|
290 |
} |
|
291 |
} |
|
292 |
|
|
293 |
} |
|
294 |
|
|
256 | 295 |
/* (non-Javadoc) |
257 | 296 |
* @see com.iver.cit.opensig.gui.IToc#refresh() |
258 | 297 |
*/ |
... | ... | |
264 | 303 |
doRefresh(theLayers, m_Root); |
265 | 304 |
|
266 | 305 |
m_TreeModel.reload(); |
306 |
|
|
307 |
setExpandedNodes(); |
|
267 | 308 |
} |
268 | 309 |
private void doRefresh(LayerCollection theLayers, DefaultMutableTreeNode parentNode) |
269 | 310 |
{ |
... | ... | |
278 | 319 |
|
279 | 320 |
m_TreeModel.insertNodeInto(nodeLayer, parentNode, parentNode.getChildCount()); |
280 | 321 |
TreePath path = new TreePath(m_TreeModel.getPathToRoot(nodeLayer)); |
281 |
m_Tree.makeVisible(path); |
|
322 |
// m_Tree.makeVisible(path);
|
|
282 | 323 |
if (lyr instanceof LayerCollection) |
283 | 324 |
{ |
284 | 325 |
LayerCollection group = (LayerCollection) lyr; |
... | ... | |
304 | 345 |
DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(itemLeaf); |
305 | 346 |
m_TreeModel.insertNodeInto(nodeValue, nodeLayer, nodeLayer.getChildCount()); |
306 | 347 |
TreePath pathSymbol = new TreePath(m_TreeModel.getPathToRoot(nodeValue)); |
307 |
m_Tree.makeVisible(pathSymbol); |
|
348 |
// m_Tree.makeVisible(pathSymbol);
|
|
308 | 349 |
} |
309 | 350 |
} |
310 | 351 |
if (legendInfo.getDefaultSymbol() != null) |
... | ... | |
315 | 356 |
DefaultMutableTreeNode nodeValue = new DefaultMutableTreeNode(itemLeaf); |
316 | 357 |
m_TreeModel.insertNodeInto(nodeValue, nodeLayer, nodeLayer.getChildCount()); |
317 | 358 |
TreePath pathSymbol = new TreePath(m_TreeModel.getPathToRoot(nodeValue)); |
318 |
m_Tree.makeVisible(pathSymbol); |
|
359 |
// m_Tree.makeVisible(pathSymbol);
|
|
319 | 360 |
} |
320 | 361 |
} catch (DriverException e) { |
321 | 362 |
// TODO Auto-generated catch block |
... | ... | |
387 | 428 |
|
388 | 429 |
ITocItem item = (ITocItem) n.getUserObject(); |
389 | 430 |
Dimension szAnt = item.getSize(); |
390 |
item.setSize(new Dimension(this.getWidth()-30,szAnt.height));
|
|
431 |
item.setSize(new Dimension(this.getWidth()-40,szAnt.height));
|
|
391 | 432 |
} |
392 | 433 |
System.out.println("i=" + i++); |
393 | 434 |
} |
... | ... | |
445 | 486 |
* @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent) |
446 | 487 |
*/ |
447 | 488 |
public void layerRemoved(LayerCollectionEvent e) { |
489 |
m_ItemsExpanded.remove(e.getAffectedLayer().getName()); |
|
448 | 490 |
refresh(); |
449 | 491 |
|
450 | 492 |
} |
... | ... | |
497 | 539 |
} |
498 | 540 |
|
499 | 541 |
|
542 |
|
|
543 |
/* (non-Javadoc) |
|
544 |
* @see javax.swing.event.TreeExpansionListener#treeCollapsed(javax.swing.event.TreeExpansionEvent) |
|
545 |
*/ |
|
546 |
public void treeCollapsed(TreeExpansionEvent event) { |
|
547 |
TreePath path = event.getPath(); |
|
548 |
DefaultMutableTreeNode n = (DefaultMutableTreeNode)path.getLastPathComponent(); |
|
549 |
if (n.getUserObject() instanceof ITocItem) |
|
550 |
{ |
|
551 |
ITocItem item = (ITocItem) n.getUserObject(); |
|
552 |
Boolean b = Boolean.FALSE; |
|
553 |
// System.out.println("Collapsed: " + item.getLabel()); |
|
554 |
m_ItemsExpanded.put(item.getLabel(), b); |
|
555 |
} |
|
556 |
} |
|
557 |
|
|
558 |
|
|
559 |
|
|
560 |
/* (non-Javadoc) |
|
561 |
* @see javax.swing.event.TreeExpansionListener#treeExpanded(javax.swing.event.TreeExpansionEvent) |
|
562 |
*/ |
|
563 |
public void treeExpanded(TreeExpansionEvent event) { |
|
564 |
TreePath path = event.getPath(); |
|
565 |
DefaultMutableTreeNode n = (DefaultMutableTreeNode)path.getLastPathComponent(); |
|
566 |
if (n.getUserObject() instanceof ITocItem) |
|
567 |
{ |
|
568 |
ITocItem item = (ITocItem) n.getUserObject(); |
|
569 |
Boolean b = Boolean.TRUE; |
|
570 |
// System.out.println("Expanded: " + item.getLabel()); |
|
571 |
m_ItemsExpanded.put(item.getLabel(), b); |
|
572 |
} |
|
573 |
|
|
574 |
} |
|
575 |
|
|
576 |
|
|
500 | 577 |
} |
Also available in: Unified diff