From 8ebb61c02ab7f38950aa19186b404a37319dea9b Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Sat, 22 Jan 2011 21:07:45 +0000 Subject: Added helper classes that will be used for collaboration --- (limited to 'util/configwizard.py') diff --git a/util/configwizard.py b/util/configwizard.py new file mode 100644 index 0000000..7716362 --- /dev/null +++ b/util/configwizard.py @@ -0,0 +1,192 @@ +#!/usr/bin/python + +from configfile import ConfigFile +import gtk + +class ConfigWizard(): + """Simple configuration wizard window.""" + + def __init__(self, config_file_path): + self._config_items = [] + self._config_entries = {} + self._config_file_path = config_file_path + self._config_file_obj = None + + """ + [ { item_label, item_type, item_name, item_with_value } , ... ] + """ + def set_config_items(self, items): + self._config_items = items + keys = {} + for i in self._config_items: + keys[i["item_name"]] = { "type" : i["item_type"] } + self._valid_keys = keys + + def set_config_file_obj(self, obj): + self._config_file_obj = obj + + def get_config_file_obj(self, obj): + return self._config_file_obj + + def show(self, read_from_disc = False): + + if read_from_disc: + self._config_file_obj = ConfigFile(self._config_file_path) + self._config_file_obj.set_valid_keys(self._valid_keys) + self._config_file_obj.load() + else: + if self._config_file_obj is None: + raise RuntimeError("I need the run time obj") + + self._config_popup = gtk.Window() + self._config_popup.set_default_size(200, 200) + self._config_popup.connect('delete_event', self._close_config_cb) + table = gtk.Table(12, 1, True) + self._config_popup.add(table) + + row = 1 + for i in self._config_items: + hbox = self._create_param(i) + table.attach(hbox, 0, 1, row, row+1, xpadding=5, ypadding=2) + row = row +1 + + hbox = gtk.HBox() + save_button = gtk.Button('Save') + save_button.set_size_request(50, 15) + save_button.connect('pressed', self._save_config_cb) + hbox.add(save_button) + cancel_button = gtk.Button('Cancel') + cancel_button.set_size_request(50, 15) + cancel_button.connect('pressed', self._close_config_cb) + hbox.add(cancel_button) + table.attach(hbox, 0, 1, row, row+1, xpadding=5, ypadding=2) + + self._config_popup.show_all() + + def _save_config_cb(self, widget): + try: + self._do_save_config() + except Exception, e: + w = gtk.Window() + l = gtk.Label(e.message) + w.add(l) + w.show_all() + finally: + self._config_popup.hide() + + def _do_save_config(self): + for i in self._config_items: + param_name = i["item_name"] + v = self._config_entries[param_name] + if v.__class__ is gtk.Entry: + value = v.get_text() + elif v.__class__ is gtk.CheckButton: + value = v.get_active() + else: + raise RuntimeError("Don't recognize the class %s" % type(v)) + self._config_file_obj.set(param_name, value) + + self._config_file_obj.save() + + """ + { item_label, item_type, item_name, item_with_value } + """ + def _create_param(self, opts): + param_name = opts["item_name"] + with_value = opts["item_with_value"] if opts.has_key("item_with_value") else True + hbox = gtk.HBox() + if opts["item_type"] == "text": + entry = gtk.Entry() + entry.set_size_request(150, 25) + if with_value: + value = self._config_file_obj.get(param_name, True) + entry.set_text(str(value)) + elif opts["item_type"] == "boolean": + entry = gtk.CheckButton() + if with_value: + value = self._config_file_obj.get(param_name, True) + entry.set_active(value) + self._config_entries[param_name] = entry + label = gtk.Label(opts["item_label"] + ': ') + label.set_alignment(1.0, 0.5) + label.set_size_request(100, 25) + hbox.add(label) + hbox.add(entry) + return hbox + + def _close_config_cb(self, widget, event=None): + self._config_popup.hide() + +def test_wizard_from_config_file_obj(test_config_file): + keys = {} + keys["nick"] = { "type" : "text" } + keys["account_id"] = { "type" : "text" } + keys["server"] = { "type" : "text" } + keys["port"] = { "type" : "text" } + keys["password"] = { "type" : "text" } + keys["register"] = { "type" : "text" } + + c = ConfigFile(test_config_file) + c.set_valid_keys(keys) + c.set("nick", "rgs") + c.set("account_id", "rgs@andromeda") + c.set("server", "andromeda") + c.set("port", 5223) + c.set("password", "97c74fa0dc3b39b8c87f119fa53cced2b7040786") + c.set("register", True) + + c.save() + + c = ConfigFile(test_config_file) + c.set_valid_keys(keys) + c.load() + + config_w = ConfigWizard(test_config_file) + config_items = [ + {"item_label" : "Nickname", "item_type" : "text", "item_name" : "nick" }, + { "item_label" : "Account ID", "item_type" : "text", "item_name" : "account_id" }, + { "item_label" : "Server", "item_type" : "text", "item_name" : "server" }, + { "item_label" : "Port", "item_type" : "text", "item_name" : "port" }, + { "item_label" : "Password", "item_type" : "text", "item_name" : "password" }, + { "item_label" : "Register", "item_type" : "text", "item_name" : "register" } + ] + config_w.set_config_items(config_items) + config_w.set_config_file_obj(c) + config_w.show() + +def test_wizard_from_config_file_path(test_config_file): + keys = {} + keys["nick"] = { "type" : "text" } + keys["account_id"] = { "type" : "text" } + keys["server"] = { "type" : "text" } + keys["port"] = { "type" : "text" } + keys["password"] = { "type" : "text" } + keys["register"] = { "type" : "text" } + + c = ConfigFile(test_config_file) + c.set_valid_keys(keys) + c.set("nick", "rgs") + c.set("account_id", "rgs@andromeda") + c.set("server", "andromeda") + c.set("port", 5223) + c.set("password", "97c74fa0dc3b39b8c87f119fa53cced2b7040786") + c.set("register", True) + + c.save() + + config_w = ConfigWizard(test_config_file) + config_items = [ + {"item_label" : "Nickname", "item_type" : "text", "item_name" : "nick" }, + { "item_label" : "Account ID", "item_type" : "text", "item_name" : "account_id" }, + { "item_label" : "Server", "item_type" : "text", "item_name" : "server" }, + { "item_label" : "Port", "item_type" : "text", "item_name" : "port" }, + { "item_label" : "Password", "item_type" : "text", "item_name" : "password" }, + { "item_label" : "Register", "item_type" : "text", "item_name" : "register" } + ] + config_w.set_config_items(config_items) + config_w.show(True) + +if __name__ == "__main__": + #test_wizard_from_config_file_obj("/tmp/configwizard.test.0001") + test_wizard_from_config_file_path("/tmp/configwizard.test.0002") + gtk.main() -- cgit v0.9.1