src/Tools/Graphview/graph_panel.scala
changeset 59305 b5e33012180e
parent 59303 15cd9bcd6ddb
child 59386 32b162d1d9b5
equal deleted inserted replaced
59304:848e27e4ac37 59305:b5e33012180e
    24 
    24 
    25   tooltip = ""
    25   tooltip = ""
    26 
    26 
    27   override lazy val peer: JScrollPane = new JScrollPane with SuperMixin {
    27   override lazy val peer: JScrollPane = new JScrollPane with SuperMixin {
    28     override def getToolTipText(event: java.awt.event.MouseEvent): String =
    28     override def getToolTipText(event: java.awt.event.MouseEvent): String =
    29       find_visible_node(Transform.pane_to_graph_coordinates(event.getPoint)) match {
    29       visualizer.find_node(Transform.pane_to_graph_coordinates(event.getPoint)) match {
    30         case Some(node) =>
    30         case Some(node) =>
    31           visualizer.model.full_graph.get_node(node) match {
    31           visualizer.model.full_graph.get_node(node) match {
    32             case Nil => null
    32             case Nil => null
    33             case content => visualizer.make_tooltip(panel.peer, event.getX, event.getY, content)
    33             case content => visualizer.make_tooltip(panel.peer, event.getX, event.getY, content)
    34           }
    34           }
    42   horizontalScrollBarPolicy = ScrollPane.BarPolicy.Always
    42   horizontalScrollBarPolicy = ScrollPane.BarPolicy.Always
    43   verticalScrollBarPolicy = ScrollPane.BarPolicy.Always
    43   verticalScrollBarPolicy = ScrollPane.BarPolicy.Always
    44 
    44 
    45   peer.getVerticalScrollBar.setUnitIncrement(10)
    45   peer.getVerticalScrollBar.setUnitIncrement(10)
    46 
    46 
    47   def find_visible_node(at: Point2D): Option[Graph_Display.Node] =
       
    48     visualizer.visible_graph.keys_iterator.find(node =>
       
    49       Shapes.Node.shape(visualizer, node).contains(at))
       
    50 
       
    51   def refresh()
    47   def refresh()
    52   {
    48   {
    53     if (paint_panel != null) {
    49     if (paint_panel != null) {
    54       paint_panel.set_preferred_size()
    50       paint_panel.set_preferred_size()
    55       paint_panel.repaint()
    51       paint_panel.repaint()
   173         val (_, p, d) = draginfo
   169         val (_, p, d) = draginfo
   174         draginfo = (to, p, d)
   170         draginfo = (to, p, d)
   175       case e @ MouseClicked(_, p, m, n, _) => click(p, m, n, e)
   171       case e @ MouseClicked(_, p, m, n, _) => click(p, m, n, e)
   176     }
   172     }
   177 
   173 
   178     def dummy(at: Point2D): Option[Layout.Dummy] =
       
   179       visualizer.layout.find_dummy(d => Shapes.Dummy.shape(visualizer, d).contains(at))
       
   180 
       
   181     def pressed(at: Point)
   174     def pressed(at: Point)
   182     {
   175     {
   183       val c = Transform.pane_to_graph_coordinates(at)
   176       val c = Transform.pane_to_graph_coordinates(at)
   184       val l =
   177       val l =
   185         find_visible_node(c) match {
   178         visualizer.find_node(c) match {
   186           case Some(node) =>
   179           case Some(node) =>
   187             if (visualizer.Selection.contains(node)) visualizer.Selection.get()
   180             if (visualizer.Selection.contains(node)) visualizer.Selection.get()
   188             else List(node)
   181             else List(node)
   189           case None => Nil
   182           case None => Nil
   190         }
   183         }
   191       val d =
   184       val d =
   192         l match {
   185         l match {
   193           case Nil =>
   186           case Nil => visualizer.find_dummy(c).toList
   194             dummy(c) match {
       
   195               case Some(d) => List(d)
       
   196               case None => Nil
       
   197             }
       
   198           case _ => Nil
   187           case _ => Nil
   199         }
   188         }
   200       draginfo = (at, l, d)
   189       draginfo = (at, l, d)
   201     }
   190     }
   202 
   191 
   204     {
   193     {
   205       val c = Transform.pane_to_graph_coordinates(at)
   194       val c = Transform.pane_to_graph_coordinates(at)
   206 
   195 
   207       def left_click()
   196       def left_click()
   208       {
   197       {
   209         (find_visible_node(c), m) match {
   198         (visualizer.find_node(c), m) match {
   210           case (Some(node), Key.Modifier.Control) => visualizer.Selection.add(node)
   199           case (Some(node), Key.Modifier.Control) => visualizer.Selection.add(node)
   211           case (None, Key.Modifier.Control) =>
   200           case (None, Key.Modifier.Control) =>
   212 
   201 
   213           case (Some(node), Key.Modifier.Shift) => visualizer.Selection.add(node)
   202           case (Some(node), Key.Modifier.Shift) => visualizer.Selection.add(node)
   214           case (None, Key.Modifier.Shift) =>
   203           case (None, Key.Modifier.Shift) =>
   221         }
   210         }
   222       }
   211       }
   223 
   212 
   224       def right_click()
   213       def right_click()
   225       {
   214       {
   226         val menu = Popups(panel, find_visible_node(c), visualizer.Selection.get())
   215         val menu = Popups(panel, visualizer.find_node(c), visualizer.Selection.get())
   227         menu.show(panel.peer, at.x, at.y)
   216         menu.show(panel.peer, at.x, at.y)
   228       }
   217       }
   229 
   218 
   230       if (clicks < 2) {
   219       if (clicks < 2) {
   231         if (SwingUtilities.isRightMouseButton(e.peer)) right_click()
   220         if (SwingUtilities.isRightMouseButton(e.peer)) right_click()