Browse code

Use signals.

Jose.R.Fonseca authored on 03/01/2008 12:39:18
Showing 2 changed files

... ...
@@ -11,11 +11,9 @@ class MyDotWindow(xdot.DotWindow):
11 11
 
12 12
 	def __init__(self):
13 13
 		xdot.DotWindow.__init__(self)
14
+		self.widget.connect('clicked', self.on_url_clicked)
14 15
 
15
-	def get_name(self, name):
16
-		return 'My Dot Window'
17
-
18
-	def on_url_clicked(self, url, event):
16
+	def on_url_clicked(self, widget, url, event):
19 17
 		dialog = gtk.MessageDialog(
20 18
 				parent = self, 
21 19
 				buttons = gtk.BUTTONS_OK,
... ...
@@ -3,13 +3,14 @@
3 3
 
4 4
 __author__ = "Jose Fonseca"
5 5
 
6
-__version__ = "0.2"
6
+__version__ = "0.3"
7 7
 
8 8
 
9 9
 import sys
10 10
 import subprocess
11 11
 import math
12 12
 
13
+import gobject
13 14
 import gtk
14 15
 import gtk.gdk
15 16
 import gtk.keysyms
... ...
@@ -472,13 +473,16 @@ class XDotParser:
472 473
 
473 474
 class DotWidget(gtk.DrawingArea):
474 475
 
476
+	__gsignals__ = {
477
+		'expose-event': 'override',
478
+		'clicked' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, gtk.gdk.Event))
479
+	}
480
+
475 481
 	def __init__(self):
476 482
 		gtk.DrawingArea.__init__(self)
477 483
 
478 484
 		self.graph = Graph()
479 485
 
480
-		self.connect("expose_event", self.on_expose)
481
-
482 486
 		self.set_flags(gtk.CAN_FOCUS)
483 487
 
484 488
 		self.add_events(gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK)
... ...
@@ -510,8 +514,8 @@ class DotWidget(gtk.DrawingArea):
510 514
 		self.graph = parser.parse()
511 515
 		self.zoom_image(self.zoom_ratio, center=True)
512 516
 
513
-	def on_expose(self, area, event):
514
-		cr = area.window.cairo_create()
517
+	def do_expose_event(self, event):
518
+		cr = self.window.cairo_create()
515 519
 
516 520
 		# set a clip region for the expose event
517 521
 		cr.rectangle(
... ...
@@ -606,7 +610,8 @@ class DotWidget(gtk.DrawingArea):
606 610
 		x, y = int(event.x), int(event.y)
607 611
 		url = self.get_url(x, y)
608 612
 		if url is not None:
609
-			return self.on_url_clicked(url, event)
613
+			self.emit('clicked', unicode(url), event)
614
+			return True
610 615
 
611 616
 		return False
612 617
 
... ...
@@ -658,9 +663,6 @@ class DotWidget(gtk.DrawingArea):
658 663
 		y = self.graph.height - y
659 664
 		return self.graph.get_url(x, y)
660 665
 
661
-	def on_url_clicked(self, url, event):
662
-		return False
663
-
664 666
 
665 667
 class DotWindow(gtk.Window):
666 668
 
... ...
@@ -722,16 +724,11 @@ class DotWindow(gtk.Window):
722 724
 
723 725
 		self.set_focus(self.widget)
724 726
 
725
-		self.widget.on_url_clicked = self.on_url_clicked
726
-
727 727
 		self.show_all()
728 728
 
729 729
 	def set_dotcode(self, dotcode):
730 730
 		self.widget.set_dotcode(dotcode)
731 731
 
732
-	def on_url_clicked(self, url, event):
733
-		return False
734
-
735 732
 
736 733
 def main():
737 734
 	import optparse