Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/util/configwizard.py
diff options
context:
space:
mode:
Diffstat (limited to 'util/configwizard.py')
-rw-r--r--util/configwizard.py192
1 files changed, 192 insertions, 0 deletions
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()