The unified diff between revisions [8d083408..] and [20675585..] is displayed below. It can also be downloaded as a raw diff.

This diff has been restricted to the following files: 'dprobe.py'

#
#
# patch "dprobe.py"
#  from [6b75d21a92d5e37b6625bf7c3154cc5a6602660a]
#    to [9d2a100820cd8ed51ff6dade30999c6ff8f8b1f5]
#
============================================================
--- dprobe.py	6b75d21a92d5e37b6625bf7c3154cc5a6602660a
+++ dprobe.py	9d2a100820cd8ed51ff6dade30999c6ff8f8b1f5
@@ -12,33 +12,31 @@ import gtk.glade
 import gtk
 import gtk.glade

-class DBusInfo:
-	def __init__(self):
-		self.bus = dbus.Bus.get_system()
-		self.dbus_object = self.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-	def get_bus_names(self):
-		iface = dbus.Interface(self.dbus_object, 'org.freedesktop.DBus')
-		return iface.ListNames()
-	def ping(self, named_service, object_path):
-		obj = self.bus.get_object(named_service, object_path)
-		iface = dbus.Interface(obj, 'org.freedesktop.DBus.Peer')
-		print iface.Ping()
-	def get_introspection_xml(self, named_service, object_path):
-		obj = self.bus.get_object(named_service, object_path)
-		iface = dbus.Interface(obj, 'org.freedesktop.DBus.Introspectable')
-		return iface.Introspect()
-
 class NameInfo:
 	def __init__(self, bus, store):
 		self.bus, self.store = bus, store
 		self.dbus_obj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
 		self.dbus_interface = dbus.Interface(self.dbus_obj, 'org.freedesktop.DBus')
-		self.refresh()
-	def refresh(self):
+		self.update()
+	def update(self):
 		self.store.clear()
+		rv = {}
 		for name in self.dbus_interface.ListNames():
-			self.store.append([name])
+			if name.startswith(':'):
+				rv.setdefault(name, [])
+			else:
+				connection_name = self.dbus_interface.GetNameOwner(name)
+				val = rv.setdefault(connection_name, [])
+				val.append(name)
+		for connection_name in rv:
+			parent = self.store.append(None, [connection_name])
+			for name in rv[connection_name]:
+				self.store.append(parent, [name])

+class InterfaceInfo:
+	def __init__(self, bus, name, store):
+		self.bus, self.name, self.store = bus, name, store
+
 class DProbe:
 	def __init__(self):
 		xml = open('dprobe.glade').read()
@@ -49,22 +47,12 @@ class DProbe:

 		# window and other stuff
 		self.window = self.glade.get_widget("main_window")
+		self.object_path = self.glade.get_widget("object_path")
+		self.object_path.connect("changed", self.object_path_changed)

-		# set up the tree of interfaces and methods
-		self.interface_tree = self.glade.get_widget("interface_tree")
-		self.interface_store = gtk.TreeStore(str)
-		self.interface_tree.set_model(self.interface_store)
-
-		# interface name column
-		name_column = gtk.TreeViewColumn("Interface")
-		self.interface_tree.append_column(name_column)
-		name_cell = gtk.CellRendererText()
-		name_column.pack_start(name_cell, True)
-		name_column.set_attributes(name_cell, text=0)
-
 		# set up the list of names on the bus
 		self.name_list = self.glade.get_widget("name_list")
-		self.name_list_store = gtk.ListStore(str)
+		self.name_list_store = gtk.TreeStore(str)
 		self.name_list.set_model(self.name_list_store)

 		# filename column
@@ -82,8 +70,11 @@ class DProbe:
 		self.name_info = NameInfo(self.bus, self.name_list_store)

 		# hook up signals
+		self.introspect_button = self.glade.get_widget("introspect_button")
+		self.introspect_button.connect("clicked", self.introspect_clicked)
 		sel = self.name_list.get_selection()
-		sel.connect("changed", self.name_list_select)
+		sel.connect("changed", self.name_list_selection_changed)
+		self.name_list_selection_changed(sel)

 		quit_menu = self.glade.get_widget("quit1")
 		quit_menu.connect("activate", self.window_destroy)
@@ -93,14 +84,30 @@ class DProbe:

 		# go...
 		self.window.show_all()
-	def name_list_select(self, sel):
+	def object_path_changed(self, widget):
+		print widget
+		print widget.get_property("sensitive")
+		if not widget.get_property("sensitive") or len(widget.get_text()) == 0:
+			self.introspect_button.set_sensitive(False)
+		else:
+			self.introspect_button.set_sensitive(True)
+	def name_list_selection_changed(self, sel):
 		(model, iter) = sel.get_selected()
+		# the selection has changed;
+		# this means clearing the notebook to the right (TODO)
 		if not iter:
 			# in which case, no interface to show
-			self.interface_tree.clear()
+			self.object_path.set_sensitive(False)
 		else:
+			self.object_path.set_sensitive(True)
 			name = self.name_list_store.get_value(iter, 0)
-			print name
+		self.object_path_changed(self.object_path)
+	def introspect_clicked(self, widget, data=None):
+		path = self.object_path.get_text()
+		print path
+		# ok, if we've already introspected this path then switch to that
+		# page in the notebook. Otherwise, create a new notebook page
+		# and introspect this sucker..
 	def window_destroy(self, widget, user=None):
 		gtk.main_quit()
 	def about(self, widget, user=None):
@@ -135,13 +142,4 @@ if __name__ == '__main__':
 	gnome.init('dprobe', '0.1')
 	dprobe = DProbe()
 	gtk.main()
-#	i = DBusInfo()
-#	for name in i.get_bus_names():
-#		if name.startswith(':'): continue
-#		print name
-#		print i.get_introspection_xml(name, '/org/freedesktop/DBus')

-
-
-
-