equal
deleted
inserted
replaced
8 package isabelle.graphview |
8 package isabelle.graphview |
9 |
9 |
10 |
10 |
11 import isabelle._ |
11 import isabelle._ |
12 |
12 |
13 import java.awt.{Dimension, Graphics2D, Point} |
13 import java.awt.{Dimension, Graphics2D, Point, Rectangle} |
14 import java.awt.geom.{AffineTransform, Point2D} |
14 import java.awt.geom.{AffineTransform, Point2D} |
15 import javax.swing.{JScrollPane, JComponent, SwingUtilities} |
15 import javax.swing.{JScrollPane, JComponent, SwingUtilities} |
16 |
16 |
17 import scala.swing.{Panel, ScrollPane} |
17 import scala.swing.{Panel, ScrollPane} |
18 import scala.swing.event.{Event, Key, MousePressed, MouseDragged, MouseClicked, MouseEvent} |
18 import scala.swing.event.{Event, Key, MousePressed, MouseDragged, MouseClicked, MouseEvent} |
103 visualizer.model.Colors.events += { case _ => repaint() } |
103 visualizer.model.Colors.events += { case _ => repaint() } |
104 visualizer.model.Mutators.events += { case _ => repaint() } |
104 visualizer.model.Mutators.events += { case _ => repaint() } |
105 |
105 |
106 rescale(1.0) |
106 rescale(1.0) |
107 |
107 |
|
108 |
|
109 def scroll_to_node(node: Graph_Display.Node) |
|
110 { |
|
111 val gap = visualizer.metrics.gap |
|
112 val info = visualizer.layout.get_node(node) |
|
113 |
|
114 val t = Transform() |
|
115 val p = |
|
116 t.transform(new Point2D.Double(info.x - info.width2 - gap, info.y - info.height2 - gap), null) |
|
117 val q = |
|
118 t.transform(new Point2D.Double(info.x + info.width2 + gap, info.y + info.height2 + gap), null) |
|
119 |
|
120 paint_panel.peer.scrollRectToVisible( |
|
121 new Rectangle(p.getX.toInt, p.getY.toInt, |
|
122 (q.getX - p.getX).ceil.toInt, (q.getY - p.getY).ceil.toInt)) |
|
123 } |
|
124 |
|
125 |
108 private object Transform |
126 private object Transform |
109 { |
127 { |
110 private var _scale: Double = 1.0 |
128 private var _scale: Double = 1.0 |
111 def scale: Double = _scale |
129 def scale: Double = _scale |
112 def scale_=(s: Double) |
130 def scale_=(s: Double) |
121 } |
139 } |
122 |
140 |
123 def apply() = |
141 def apply() = |
124 { |
142 { |
125 val box = visualizer.bounding_box() |
143 val box = visualizer.bounding_box() |
126 val at = AffineTransform.getScaleInstance(scale_discrete, scale_discrete) |
144 val t = AffineTransform.getScaleInstance(scale_discrete, scale_discrete) |
127 at.translate(- box.x, - box.y) |
145 t.translate(- box.x, - box.y) |
128 at |
146 t |
129 } |
147 } |
130 |
148 |
131 def fit_to_window() |
149 def fit_to_window() |
132 { |
150 { |
133 if (visualizer.visible_graph.is_empty) |
151 if (visualizer.visible_graph.is_empty) |