opensourcejason.info
deskbar applet configurator
import gtk
import deskbar
from gettext import gettext as _

#This class provides a simple API for generating basic configuration dialogs.
#Usage (place after you defined HANDLER):
#c=Configurator(HANDLER)
#c.add_string("name","description to show in", required=True or False)

#You can add more handlers for different data types here.
class Configurator:


    def __init__(self, handlers):          

        self.UI_OPS={ 'string' : self._dialog_add_string, }
        self.items=[]
        self.table=None
        self.need_config_string="This handler needs configuration."
        self.can_config_string="This handler can be reconfigured."
        self.value_fetcher={}
        for key in handlers.keys():
            handlers[key]['requirements']=self.check_requirements
            self.name=key

    def check_requirements(self):
        for item in [i for i in self.items if i['required']!='']:
            if not deskbar.GCONF_CLIENT.get_string("/%s/%s"%(self.name,item['name'])):
                return (deskbar.Handler.HANDLER_HAS_REQUIREMENTS, item['required'], self.on_configure)
        return (deskbar.Handler.HANDLER_IS_CONFIGURABLE, self.can_config_string, self.on_configure)

    def _dialog_add_string(self, name, desc, default):
            self.table.attach(gtk.Label(desc), 0, 1, self.current_table_row,self.current_table_row+1)   
            user_entry = gtk.Entry()
            t = deskbar.GCONF_CLIENT.get_string("/%s/%s"%(self.name,name))
            if t != None:
                user_entry.set_text(t)
            else:
                user_entry.set_text(default)

            self.table.attach(user_entry, 1,2,self.current_table_row, self.current_table_row+1)
            return user_entry.get_text

    def on_configure(self,dialog):
        if self.items==[]:
            return
        dialog = gtk.Dialog(_("%s Configuration"%self.name), dialog,
                                gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
                                (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                                gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
        self.table = gtk.Table(rows=len(self.items), columns=2)
        self.current_table_row=0

        for item in self.items:
            name=item['name']
            self.value_fetcher[name]=self.UI_OPS[item['type']](item['name'], item['desc'], item['default'])


        self.table.show_all()
        dialog.vbox.add(self.table)

        response = dialog.run()
        dialog.destroy()

        if response == gtk.RESPONSE_ACCEPT:
            for item in self.items:
                name=item['name']
                if self.value_fetcher[name]!='':
                    deskbar.GCONF_CLIENT.set_string("/%s/%s"%(self.name,name), self.value_fetcher[name]())



    def add_config_item(self, type, name, desc, default=None, required=''):
        if type not in self.UI_OPS.keys():
            return 0

        item={  'name' : name,
                'desc' : desc,
                'type' : type,
                'default' : default,
                'required' : required }
        self.items.append(item)
        return 1

    def get_value(self,name):
        return deskbar.GCONF_CLIENT.get_string("/%s/%s"%(self.name,name))

Add Comment 
Sign as Author 
Enter code 692