From 193aa246dd77d553a77052d8db168f8c65d1c246 Mon Sep 17 00:00:00 2001 From: Sebastien Estienne Date: Tue, 6 Sep 2005 16:09:43 +0000 Subject: * added a configuration ui * rewrote a lot things git-svn-id: file:///home/lennart/svn/public/service-discovery-applet/trunk@8 3be567f1-68ff-0310-b24a-ad7cc433fd2f --- src/service-discovery-config.in | 201 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100755 src/service-discovery-config.in (limited to 'src/service-discovery-config.in') 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() + + -- cgit