summaryrefslogtreecommitdiffstats
path: root/src/service-discovery-config.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/service-discovery-config.in')
-rwxr-xr-xsrc/service-discovery-config.in201
1 files changed, 201 insertions, 0 deletions
diff --git a/src/service-discovery-config.in b/src/service-discovery-config.in
new file mode 100755
index 0000000..420ec7e
--- /dev/null
+++ b/src/service-discovery-config.in
@@ -0,0 +1,201 @@
+#!@PYTHON@
+# -*-python-*-
+# This file is part of service-discovery-applet (sd-applet).
+#
+# sd-applet is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# sd-applet is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with sd-applet; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# $id$
+#
+
+import os
+import avahi, gtk, gobject
+import gconf
+
+from avahi.SimpleGladeApp import SimpleGladeApp
+
+(
+ COLUMN_ENABLED,
+ COLUMN_SERVICE,
+ COLUMN_NAME,
+ COLUMN_ACTION,
+ COLUMN_EDITABLE
+) = range(5)
+
+glade_dir = "@interfacesdir@"
+
+gc_options = "/apps/service-discovery-applet/options"
+gc_services = "/apps/service-discovery-applet/services"
+
+class Config_window(SimpleGladeApp):
+ def __init__(self, path="service-discovery-config.glade", root="sda-prefs-dialog", domain=None, **kwargs):
+ path = os.path.join(glade_dir, path)
+ SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
+
+ def __create_model(self):
+ lstore = gtk.ListStore(
+ gobject.TYPE_BOOLEAN,
+ gobject.TYPE_STRING,
+ gobject.TYPE_STRING,
+ gobject.TYPE_BOOLEAN,
+ gobject.TYPE_BOOLEAN)
+
+ gc_entries = self.gc_client.all_entries(gc_services)
+ for gc_entry in gc_entries:
+ svc_enabled = self.gc_client.get_bool(gc_entry.key)
+ svc_type = os.path.basename(gc_entry.key)
+
+ iter = lstore.append()
+ lstore.set(iter,
+ COLUMN_ENABLED, svc_enabled,
+ COLUMN_SERVICE, svc_type,
+ COLUMN_NAME, None,
+ COLUMN_ACTION, False,
+ COLUMN_EDITABLE, True)
+ return lstore
+
+ def __add_columns(self, treeview):
+ model = treeview.get_model()
+
+ # column for enabled toggles
+ renderer = gtk.CellRendererToggle()
+ renderer.connect('toggled', self.enabled_toggled, model)
+
+ column = gtk.TreeViewColumn('Enabled', renderer, active=COLUMN_ENABLED)
+
+ # set this column to a fixed sizing(of 50 pixels)
+ #column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+ #column.set_fixed_width(50)
+ column.set_sort_column_id(COLUMN_ENABLED)
+ treeview.append_column(column)
+
+ # column for service type
+
+ renderer = gtk.CellRendererText()
+ renderer.connect("edited", self.on_cell_edited, model)
+ renderer.set_data("column", COLUMN_SERVICE)
+
+ column = gtk.TreeViewColumn('Service type', renderer,
+ text=COLUMN_SERVICE, editable=COLUMN_EDITABLE)
+ treeview.append_column(column)
+
+ # columns for service name
+# column = gtk.TreeViewColumn('Service Name', gtk.CellRendererText(),
+# text=COLUMN_NAME)
+# column.set_sort_column_id(COLUMN_NAME)
+# treeview.append_column(column)
+
+ # column for action scripts
+# renderer = gtk.CellRendererToggle()
+# column = gtk.TreeViewColumn('Action', renderer, active=COLUMN_ACTION)
+# column.set_sort_column_id(COLUMN_ACTION)
+# treeview.append_column(column)
+
+ def on_cell_edited(self, cell, path_string, service_type, model):
+
+ iter = model.get_iter_from_string(path_string)
+ path = model.get_path(iter)[0]
+ column = cell.get_data("column")
+
+ if column == COLUMN_SERVICE:
+ old_service_type = model.get_value(iter, column)
+ old_service_enabled= model.get_value(iter, COLUMN_ENABLED)
+ self.gc_client.unset("%s/%s" % (gc_services, old_service_type))
+ model.set(iter, column, service_type)
+ self.gc_client.set_bool("%s/%s" % (gc_services, service_type), old_service_enabled)
+
+ def on_add_service_clicked(self, button, model):
+ iter = model.append()
+ model.set (iter,
+ COLUMN_ENABLED, False,
+ COLUMN_SERVICE, "_service._protocol",
+ COLUMN_NAME, None,
+ COLUMN_ACTION, False,
+ COLUMN_EDITABLE, True)
+
+ def on_del_service_clicked(self, button, treeview):
+
+ selection = treeview.get_selection()
+ model, iter = selection.get_selected()
+
+ if iter:
+ path = model.get_path(iter)[0]
+ service_type = model.get_value(iter,COLUMN_SERVICE)
+ self.gc_client.unset("%s/%s" % (gc_services, service_type))
+ model.remove(iter)
+ #FIXME remove entry from gconf
+
+ def enabled_toggled(self, cell, path, model):
+ # get toggled iter
+ iter = model.get_iter((int(path),))
+ enabled = model.get_value(iter, COLUMN_ENABLED)
+ service_type = model.get_value(iter, COLUMN_SERVICE)
+ # do something with the value
+ enabled = not enabled
+
+ # set new value
+ model.set(iter, COLUMN_ENABLED, enabled)
+
+ self.gc_client.set_bool("%s/%s" % (gc_services, service_type), enabled)
+
+ def cb_local_toggled(self,cb,client):
+ client.set_bool ("%s/%s" % (gc_options,"show_local_services"), cb.get_active())
+
+ def cb_notifications_toggled(self,cb,client):
+ client.set_bool ("%s/%s" % (gc_options,"show_notifications"), cb.get_active())
+
+ def cb_applet_name_toggled(self,cb,client):
+ client.set_bool ("%s/%s" % (gc_options,"show_applet_name"), cb.get_active())
+
+ def new(self):
+ print "A new main_window has been created"
+
+ # Gconf
+ self.gc_client = gconf.client_get_default ()
+ self.gc_client.add_dir (gc_options, gconf.CLIENT_PRELOAD_NONE)
+
+ # images
+ self.image_services.set_from_file("@iconsdir@/48x48/service-discovery-applet.png")
+
+ # connect advanced checkbuttons
+ self.checkbutton_local.set_active(self.gc_client.get_bool ("%s/%s" % (gc_options,"show_local_services")))
+ self.checkbutton_local.connect('toggled',self.cb_local_toggled,self.gc_client)
+
+ self.checkbutton_notifications.set_active(self.gc_client.get_bool ("%s/%s" % (gc_options,"show_notifications")))
+ self.checkbutton_notifications.connect('toggled',self.cb_notifications_toggled,self.gc_client)
+
+ self.checkbutton_applet_name.set_active(self.gc_client.get_bool ("%s/%s" % (gc_options,"show_applet_name")))
+ self.checkbutton_applet_name.connect('toggled',self.cb_applet_name_toggled,self.gc_client)
+
+ # The services treeview
+ model = self.__create_model()
+
+ self.treeview_services.set_model(model)
+ self.__add_columns(self.treeview_services)
+
+ # connect add/remove service buttons
+ self.button_add_service.connect("clicked", self.on_add_service_clicked, model)
+ self.button_del_service.connect("clicked", self.on_del_service_clicked, self.treeview_services)
+
+
+def main():
+ config_window = Config_window()
+
+ config_window.run()
+
+if __name__ == "__main__":
+ main()
+
+