01: package com.jgraph.example.groupeditor;
02:
03: import java.awt.Component;
04: import java.awt.event.MouseEvent;
05: import java.awt.geom.Point2D;
06: import java.awt.geom.Rectangle2D;
07:
08: import javax.swing.event.MouseInputAdapter;
09:
10: import org.jgraph.JGraph;
11: import org.jgraph.graph.CellView;
12:
13: /**
14: * Mananges the edition of the groups
15: * @see com.jgraph.example.JGraphFoldingManager
16: */
17: public class GroupManager extends MouseInputAdapter {
18:
19: /**
20: * Called when the mouse button is released to see if a collapse or expand
21: * request has been made
22: */
23: public void mouseReleased(MouseEvent e) {
24: if (e.getSource() instanceof JGraph) {
25: final JGraph graph = (JGraph) e.getSource();
26: getGroupByFoldingHandle(graph, e.getPoint());
27: e.consume();
28: }
29: }
30:
31: /**
32: * Called when the mouse button is released to see if a collapse or expand
33: * request has been made
34: */
35: public static CellView getGroupByFoldingHandle(JGraph graph,
36: Point2D pt) {
37: CellView[] views = graph.getGraphLayoutCache().getCellViews();
38: for (int i = 0; i < views.length; i++) {
39: if (views[i].getBounds().contains(pt.getX(), pt.getY())) {
40: Rectangle2D rectBounds = views[i].getBounds();
41: Point2D containerPoint = graph.fromScreen((Point2D) pt
42: .clone());
43: containerPoint.setLocation(containerPoint.getX()
44: - rectBounds.getX(), containerPoint.getY()
45: - rectBounds.getY());
46: Component renderer = views[i].getRendererComponent(
47: graph, false, false, false);
48: if (renderer instanceof EditableGroupRenderer) {
49: Object[] list = { views[i].getCell() };
50: graph.getGraphLayoutCache().toFront(list);
51: graph.getGraphLayoutCache()
52: .refresh(views[i], false);
53: EditableGroupRenderer group = (EditableGroupRenderer) renderer;
54: if (group.isEditAsked(containerPoint, rectBounds)) {
55: graph.startEditingAtCell(views[i].getCell());
56: }
57: }
58: }
59: }
60: return null;
61: }
62:
63: }
|