[tor-commits] [arm/master] Implement config value edits for string values.
atagar at torproject.org
atagar at torproject.org
Thu Aug 11 15:27:57 UTC 2011
commit e98ab90082947021af9ca4ae7416b35b5e6f1bee
Author: Kamran Riaz Khan <krkhan at inspirated.com>
Date: Wed Jul 27 05:54:16 2011 +0500
Implement config value edits for string values.
Catches TorCtl exceptions and shows them in an error dialog.
---
src/gui/configPanel.py | 29 +++++++++++++++++++++++++++--
src/util/gtkTools.py | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/src/gui/configPanel.py b/src/gui/configPanel.py
index 433d612..a1d1daa 100644
--- a/src/gui/configPanel.py
+++ b/src/gui/configPanel.py
@@ -13,6 +13,10 @@ from cli.configPanel import (ConfigPanel as CliConfigPanel, Field, State)
from util import connections, gtkTools, sysTools, torTools, uiTools
from TorCtl import TorCtl
+def inputConfValueText(option):
+ prompt = "Enter value for %s" % option
+ return gtkTools.inputText(prompt)
+
class ConfContents(gtkTools.ListWrapper):
def _create_row_from_value(self, entry):
option = entry.get(Field.OPTION)
@@ -50,10 +54,12 @@ class ConfigPanel(object, CliConfigPanel):
def pack_widgets(self):
treeView = self.builder.get_object('treeview_config')
+
treeView.connect('cursor-changed', self.on_treeview_config_cursor_changed)
+ treeView.connect('row-activated', self.on_treeview_config_row_activated)
- def on_treeview_config_cursor_changed(self, widget, data=None):
- treeSelection = widget.get_selection()
+ def on_treeview_config_cursor_changed(self, treeView, data=None):
+ treeSelection = treeView.get_selection()
(model, iter) = treeSelection.get_selected()
desc = model.get_value(iter, 4)
@@ -61,3 +67,22 @@ class ConfigPanel(object, CliConfigPanel):
textBuffer = self.builder.get_object('textbuffer_config_desc')
textBuffer.set_text(desc)
+ def on_treeview_config_row_activated(self, treeView, path, column):
+ (index,) = path
+
+ entry = self._wrappedConfImportantContents[index]
+ configOption = entry.fields[Field.OPTION]
+ configType = entry.fields[Field.TYPE]
+ newValue = None
+
+ if configType == 'DataSize':
+ newValue = inputConfValueText(configOption)
+
+ if newValue:
+ try:
+ torTools.getConn().setOption(configOption, newValue)
+ except TorCtl.ErrorReply, err:
+ gtkTools.showError(str(err))
+
+ self._wrappedConfImportantContents[index] = entry
+
diff --git a/src/util/gtkTools.py b/src/util/gtkTools.py
index c1b14dd..5180e82 100644
--- a/src/util/gtkTools.py
+++ b/src/util/gtkTools.py
@@ -100,3 +100,38 @@ class TreeWrapper(ListWrapper):
row = self._create_row_from_value(value)
self.model.append(None, row)
+def responseToDialog(entry, dialog, response):
+ dialog.response(response)
+
+def inputText(prompt):
+ dialog = gtk.MessageDialog(None,
+ gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+ gtk.MESSAGE_QUESTION,
+ gtk.BUTTONS_OK_CANCEL,
+ None)
+
+ dialog.set_markup(prompt)
+
+ entry = gtk.Entry()
+ entry.connect("activate", responseToDialog, dialog, gtk.RESPONSE_OK)
+
+ dialog.vbox.pack_end(entry, True, True, 0)
+
+ dialog.show_all()
+ response = dialog.run()
+
+ text = entry.get_text()
+ dialog.destroy()
+
+ return text if response == gtk.RESPONSE_OK else None
+
+def showError(msg):
+ dialog = gtk.MessageDialog(None,
+ gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+ gtk.MESSAGE_ERROR,
+ gtk.BUTTONS_OK,
+ msg)
+
+ dialog.run()
+ dialog.destroy()
+
More information about the tor-commits
mailing list