[tor-commits] [arm/master] Provide a list with add and delete options for LineList confs.

atagar at torproject.org atagar at torproject.org
Thu Aug 11 15:27:57 UTC 2011


commit df60a8383458a05a66bc94d1b94941e2863a5ae6
Author: Kamran Riaz Khan <krkhan at 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,





More information about the tor-commits mailing list