View Javadoc

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  }