Browse code

Highlight the destination of the edge too.

Also move to center of the destination node, not to the destination
endpoint.

Includes changes that allow highlighting multiple items.

From: Marius Gedminas <marius@gedmin.as>

Jose.R.Fonseca authored on 13/07/2008 03:22:15
Showing 1 changed files

  • xdot.py index a868499..23c76f8 100755
... ...
@@ -280,17 +280,23 @@ class CompoundShape(Shape):
280 280
 
281 281
 class Url(object):
282 282
 
283
-    def __init__(self, item, url):
283
+    def __init__(self, item, url, highlight=None):
284 284
         self.item = item
285 285
         self.url = url
286
+        if highlight is None:
287
+            highlight = set([item])
288
+        self.highlight = highlight
286 289
 
287 290
 
288 291
 class Jump(object):
289 292
 
290
-    def __init__(self, item, x, y):
293
+    def __init__(self, item, x, y, highlight=None):
291 294
         self.item = item
292 295
         self.x = x
293 296
         self.y = y
297
+        if highlight is None:
298
+            highlight = set([item])
299
+        self.highlight = highlight
294 300
 
295 301
 
296 302
 class Element(CompoundShape):
... ...
@@ -356,9 +362,9 @@ class Edge(Element):
356 362
 
357 363
     def get_jump(self, x, y):
358 364
         if square_distance(x, y, *self.points[0]) <= self.RADIUS*self.RADIUS:
359
-            return Jump(self, *self.points[-1])
365
+            return Jump(self, self.dst.x, self.dst.y, highlight=set([self, self.dst]))
360 366
         if square_distance(x, y, *self.points[-1]) <= self.RADIUS*self.RADIUS:
361
-            return Jump(self, *self.points[0])
367
+            return Jump(self, self.src.x, self.src.y, highlight=set([self, self.src]))
362 368
         return None
363 369
 
364 370
 
... ...
@@ -375,16 +381,18 @@ class Graph(Shape):
375 381
     def get_size(self):
376 382
         return self.width, self.height
377 383
 
378
-    def draw(self, cr, highlight_item=None):
384
+    def draw(self, cr, highlight_items=None):
385
+        if highlight_items is None:
386
+            highlight_items = ()
379 387
         cr.set_source_rgba(0.0, 0.0, 0.0, 1.0)
380 388
 
381 389
         cr.set_line_cap(cairo.LINE_CAP_BUTT)
382 390
         cr.set_line_join(cairo.LINE_JOIN_MITER)
383 391
 
384 392
         for edge in self.edges:
385
-            edge.draw(cr, highlight=(edge is highlight_item))
393
+            edge.draw(cr, highlight=(edge in highlight_items))
386 394
         for node in self.nodes:
387
-            node.draw(cr, highlight=(node is highlight_item))
395
+            node.draw(cr, highlight=(node in highlight_items))
388 396
 
389 397
     def get_url(self, x, y):
390 398
         for node in self.nodes:
... ...
@@ -774,7 +782,7 @@ class NullAction(DragAction):
774 782
             item = dot_widget.get_jump(event.x, event.y)
775 783
         if item is not None:
776 784
             dot_widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.HAND2))
777
-            dot_widget.set_highlight(item.item)
785
+            dot_widget.set_highlight(item.highlight)
778 786
         else:
779 787
             dot_widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.ARROW))
780 788
             dot_widget.set_highlight(None)
... ...
@@ -904,7 +912,7 @@ class DotWidget(gtk.DrawingArea):
904 912
         cr.scale(self.zoom_ratio, self.zoom_ratio)
905 913
         cr.translate(-self.x, -self.y)
906 914
 
907
-        self.graph.draw(cr, highlight_item=self.highlight)
915
+        self.graph.draw(cr, highlight_items=self.highlight)
908 916
         cr.restore()
909 917
 
910 918
         self.drag_action.draw(cr)
... ...
@@ -919,9 +927,9 @@ class DotWidget(gtk.DrawingArea):
919 927
         self.y = y
920 928
         self.queue_draw()
921 929
 
922
-    def set_highlight(self, item):
923
-        if self.highlight != item:
924
-            self.highlight = item
930
+    def set_highlight(self, items):
931
+        if self.highlight != items:
932
+            self.highlight = items
925 933
             self.queue_draw()
926 934
 
927 935
     def zoom_image(self, zoom_ratio, center=False):