[tor-commits] [arm/master] Binding handlers for the torrc submenu

atagar at torproject.org atagar at torproject.org
Mon Jun 13 01:40:55 UTC 2011


commit bf373956a64afa6126b0836329042775119a6114
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jun 12 17:39:19 2011 -0700

    Binding handlers for the torrc submenu
---
 README                  |    1 +
 src/cli/menu/actions.py |   26 ++++++++++++++++++
 src/cli/torrcPanel.py   |   65 ++++++++++++++++++++++++++++++++++-------------
 3 files changed, 74 insertions(+), 18 deletions(-)

diff --git a/README b/README
index 0f26163..44fabf1 100644
--- a/README
+++ b/README
@@ -180,6 +180,7 @@ Layout:
         __init__.py
         menu.py           - provides an interactive menu
         item.py           - individual items within the menu
+        actions.py        - handlers for menu selections
       
       __init__.py
       controller.py          - main display loop, handling input and layout
diff --git a/src/cli/menu/actions.py b/src/cli/menu/actions.py
index 2072ead..53e5d1c 100644
--- a/src/cli/menu/actions.py
+++ b/src/cli/menu/actions.py
@@ -30,6 +30,8 @@ def makeMenu():
       baseMenu.add(makeConnectionsMenu(pagePanel))
     elif pagePanel.getName() == "configuration":
       baseMenu.add(makeConfigurationMenu(pagePanel))
+    elif pagePanel.getName() == "torrc":
+      baseMenu.add(makeTorrcMenu(pagePanel))
   
   return baseMenu
 
@@ -238,3 +240,27 @@ def makeConfigurationMenu(configPanel):
   
   return configMenu
 
+def makeTorrcMenu(torrcPanel):
+  """
+  Submenu for the torrc panel, consisting of...
+    Reload
+    Show / Hide Comments
+    Show / Hide Line Numbers
+  
+  Arguments:
+    torrcPanel - instance of the torrc panel
+  """
+  
+  torrcMenu = cli.menu.item.Submenu("Torrc")
+  torrcMenu.add(cli.menu.item.MenuItem("Reload", torrcPanel.reloadTorrc))
+  
+  if torrcPanel.stripComments: label, arg = "Show", True
+  else: label, arg = "Hide", False
+  torrcMenu.add(cli.menu.item.MenuItem("%s Comments" % label, functools.partial(torrcPanel.setCommentsVisible, arg)))
+  
+  if torrcPanel.showLineNum: label, arg = "Hide", False
+  else: label, arg = "Show", True
+  torrcMenu.add(cli.menu.item.MenuItem("%s Line Numbers" % label, functools.partial(torrcPanel.setLineNumberVisible, arg)))
+  
+  return torrcMenu
+
diff --git a/src/cli/torrcPanel.py b/src/cli/torrcPanel.py
index a12cc87..c273bf0 100644
--- a/src/cli/torrcPanel.py
+++ b/src/cli/torrcPanel.py
@@ -6,6 +6,7 @@ import math
 import curses
 import threading
 
+import cli.controller
 import popups
 
 from util import conf, enum, panel, torConfig, torTools, uiTools
@@ -59,6 +60,49 @@ class TorrcPanel(panel.Panel):
         self.redraw(True)
       except: pass
   
+  def setCommentsVisible(self, isVisible):
+    """
+    Sets if comments and blank lines are shown or stripped.
+    
+    Arguments:
+      isVisible - displayed comments and blank lines if true, strips otherwise
+    """
+    
+    self.stripComments = not isVisible
+    self._lastContentHeightArgs = None
+    self.redraw(True)
+  
+  def setLineNumberVisible(self, isVisible):
+    """
+    Sets if line numbers are shown or hidden.
+    
+    Arguments:
+      isVisible - displays line numbers if true, hides otherwise
+    """
+    
+    self.showLineNum = isVisible
+    self._lastContentHeightArgs = None
+    self.redraw(True)
+  
+  def reloadTorrc(self):
+    """
+    Reloads the torrc, displaying an indicator of success or failure.
+    """
+    
+    cli.controller.getController().requestRedraw(True)
+    
+    try:
+      torConfig.getTorrc().load()
+      self._lastContentHeightArgs = None
+      self.redraw(True)
+      resultMsg = "torrc reloaded"
+    except IOError:
+      resultMsg = "failed to reload torrc"
+    
+    self._lastContentHeightArgs = None
+    self.redraw(True)
+    popups.showMsg(resultMsg, 1)
+  
   def handleKey(self, key):
     self.valsLock.acquire()
     isKeystrokeConsumed = True
@@ -70,26 +114,11 @@ class TorrcPanel(panel.Panel):
         self.scroll = newScroll
         self.redraw(True)
     elif key == ord('n') or key == ord('N'):
-      self.showLineNum = not self.showLineNum
-      self._lastContentHeightArgs = None
-      self.redraw(True)
+      self.setLineNumberVisible(not self.showLineNum)
     elif key == ord('s') or key == ord('S'):
-      self.stripComments = not self.stripComments
-      self._lastContentHeightArgs = None
-      self.redraw(True)
+      self.setCommentsVisible(self.stripComments)
     elif key == ord('r') or key == ord('R'):
-      # reloads torrc, providing a notice if successful or not
-      try:
-        torConfig.getTorrc().load()
-        self._lastContentHeightArgs = None
-        self.redraw(True)
-        resultMsg = "torrc reloaded"
-      except IOError:
-        resultMsg = "failed to reload torrc"
-      
-      self._lastContentHeightArgs = None
-      self.redraw(True)
-      popups.showMsg(resultMsg, 1)
+      self.reloadTorrc()
     else: isKeystrokeConsumed = False
     
     self.valsLock.release()





More information about the tor-commits mailing list