commit df60a8383458a05a66bc94d1b94941e2863a5ae6 Author: Kamran Riaz Khan krkhan@inspirated.com Date: Fri Jul 29 17:09:18 2011 +0500
Provide a list with add and delete options for LineList confs. --- src/gui/configPanel.py | 6 ++++ src/util/gtkTools.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/src/gui/configPanel.py b/src/gui/configPanel.py index c5b631a..b87c1b3 100644 --- a/src/gui/configPanel.py +++ b/src/gui/configPanel.py @@ -17,6 +17,10 @@ def input_conf_value_size(option): prompt = "Enter value for %s" % option return gtkTools.input_size(prompt)
+def input_conf_value_list(option): + prompt = "Enter value for %s" % option + return gtkTools.input_list(prompt) + def input_conf_value_text(option): prompt = "Enter value for %s" % option return gtkTools.input_text(prompt) @@ -85,6 +89,8 @@ class ConfigPanel(object, CliConfigPanel):
if configType == 'DataSize': newValue = input_conf_value_size(configOption) + elif configType == 'LineList': + newValue = input_conf_value_list(configOption) elif configType == 'Boolean': newValue = input_conf_value_boolean(configOption) else: diff --git a/src/util/gtkTools.py b/src/util/gtkTools.py index 860a587..37e818e 100644 --- a/src/util/gtkTools.py +++ b/src/util/gtkTools.py @@ -171,6 +171,66 @@ def input_text(prompt):
return text if response == gtk.RESPONSE_OK else None
+def input_list(prompt): + def on_add_button_clicked(widget, listStore): + newValue = input_text("Enter new value:") + + if newValue: + row = (newValue,) + listStore.append(row) + + def on_delete_button_clicked(widget, treeView): + selection = treeView.get_selection() + model, selectionIter = selection.get_selected() + + if (selectionIter): + model.remove(selectionIter) + + dialog = gtk.MessageDialog(None, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_QUESTION, + gtk.BUTTONS_OK_CANCEL, + None) + + dialog.set_markup(prompt) + + hBox = gtk.HBox() + + dialog.vbox.pack_start(hBox, False, False, 0) + + addButton = gtk.Button(stock=gtk.STOCK_ADD) + + hBox.pack_start(addButton, False, False, 0) + + deleteButton = gtk.Button(stock=gtk.STOCK_DELETE) + + hBox.pack_start(deleteButton, False, False, 0) + + scrolledWindow = gtk.ScrolledWindow() + + dialog.vbox.pack_end(scrolledWindow, True, True, 0) + + listStore = gtk.ListStore(str) + treeView = gtk.TreeView(listStore) + treeViewColumn = gtk.TreeViewColumn("Value") + cellRenderer = gtk.CellRendererText() + + treeViewColumn.pack_start(cellRenderer, True) + treeViewColumn.add_attribute(cellRenderer, 'text', 0) + treeView.append_column(treeViewColumn) + + scrolledWindow.add(treeView) + + addButton.connect('clicked', on_add_button_clicked, listStore) + deleteButton.connect('clicked', on_delete_button_clicked, treeView) + + dialog.show_all() + response = dialog.run() + + dialog.destroy() + + return None if len(listStore) == 0 else " ".join([row[0] for row in listStore]) + def input_boolean(prompt): dialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
tor-commits@lists.torproject.org