1 package de.fzi.wim.guibase.graphview.controller;
2
3 import java.beans.PropertyChangeSupport;
4 import java.awt.Point;
5 import java.awt.event.MouseEvent;
6
7 import de.fzi.wim.guibase.graphview.graph.*;
8 import de.fzi.wim.guibase.graphview.view.*;
9
10 /***
11 * A manipulator that tracks the currently higlighted element.
12 */
13 public class HighlightingManipulator extends AbstractManipulator {
14 /*** The name of this manipulator. */
15 public static final String NAME="HighlightingManipulator";
16
17 /*** The support for property changes. */
18 protected PropertyChangeSupport m_propertyChangeSupport;
19 /*** The node that is highlighted. */
20 protected Node m_highlightedNode;
21 /*** The edge that is highlighted. */
22 protected Edge m_highlightedEdge;
23
24 /***
25 * Creates an instance of this class.
26 */
27 public HighlightingManipulator() {
28 m_propertyChangeSupport=new PropertyChangeSupport(this);
29 }
30 public String getName() {
31 return NAME;
32 }
33 public Node getHighlightedNode() {
34 return m_highlightedNode;
35 }
36 public void setHighlightedNode(Node highlightedNode) {
37 if (highlightedNode!=m_highlightedNode) {
38 Node oldHighlightedNode=m_highlightedNode;
39 if (oldHighlightedNode!=null)
40 m_graphPane.repaintNode(oldHighlightedNode);
41 m_highlightedNode=highlightedNode;
42 if (m_highlightedNode!=null)
43 m_graphPane.repaintNode(m_highlightedNode);
44 m_propertyChangeSupport.firePropertyChange("highlightedNode",oldHighlightedNode,m_highlightedNode);
45 }
46 }
47 public Edge getHighlightedEdge() {
48 return m_highlightedEdge;
49 }
50 public void setHighlightedEdge(Edge highlightedEdge) {
51 if (highlightedEdge!=m_highlightedEdge) {
52 Edge oldHighlightedEdge=m_highlightedEdge;
53 if (oldHighlightedEdge!=null)
54 m_graphPane.repaintEdge(oldHighlightedEdge);
55 m_highlightedEdge=highlightedEdge;
56 if (m_highlightedEdge!=null)
57 m_graphPane.repaintEdge(m_highlightedEdge);
58 m_propertyChangeSupport.firePropertyChange("highlightedEdge",oldHighlightedEdge,m_highlightedEdge);
59 }
60 }
61 public void mouseEntered(MouseEvent e) {
62 updateHighlight(e);
63 }
64 public void mouseExited(MouseEvent e) {
65 setHighlightedNode(null);
66 setHighlightedEdge(null);
67 }
68 public void mouseDragged(MouseEvent e) {
69 updateHighlight(e);
70 }
71 public void mouseMoved(MouseEvent e) {
72 updateHighlight(e);
73 }
74 protected void updateHighlight(MouseEvent e) {
75 if (m_graphPane.isEnabled()) {
76 Point point=e.getPoint();
77 Node nodeAtPoint=m_graphPane.getNodeAtPoint(point);
78 if (nodeAtPoint!=null) {
79 setHighlightedNode(nodeAtPoint);
80 setHighlightedEdge(null);
81 }
82 else {
83 setHighlightedNode(null);
84 Edge edgeAtPoint=m_graphPane.getNearestEdge(point);
85 setHighlightedEdge(edgeAtPoint);
86 }
87 }
88 else {
89 setHighlightedNode(null);
90 setHighlightedEdge(null);
91 }
92 }
93 }