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

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


commit 697468f2df30460fb381fac35a650cb4f7c412ae
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jun 12 18:28:53 2011 -0700

    Binding handlers for the help submenu
---
 src/cli/configPanel.py           |    2 --
 src/cli/connections/connPanel.py |    2 --
 src/cli/graphing/graphPanel.py   |    4 ++--
 src/cli/logPanel.py              |    4 ----
 src/cli/menu/actions.py          |   15 +++++++++++++++
 src/cli/menu/item.py             |    8 +++++++-
 src/cli/popups.py                |   25 +++++++++++++++++++++++++
 src/cli/torrcPanel.py            |    3 ---
 8 files changed, 49 insertions(+), 14 deletions(-)

diff --git a/src/cli/configPanel.py b/src/cli/configPanel.py
index 4647286..fedf1f7 100644
--- a/src/cli/configPanel.py
+++ b/src/cli/configPanel.py
@@ -275,7 +275,6 @@ class ConfigPanel(panel.Panel):
     """
     
     # set ordering for config options
-    cli.controller.getController().requestRedraw(True)
     titleLabel = "Config Option Ordering:"
     options = [FIELD_ATTR[field][0] for field in Field.values()]
     oldSelection = [FIELD_ATTR[field][0] for field in self.sortOrdering]
@@ -357,7 +356,6 @@ class ConfigPanel(panel.Panel):
     """
     
     # display a popup for saving the current configuration
-    cli.controller.getController().requestRedraw(True)
     configLines = torConfig.getCustomOptions(True)
     popup, width, height = popups.init(len(configLines) + 2)
     if not popup: return
diff --git a/src/cli/connections/connPanel.py b/src/cli/connections/connPanel.py
index 9490ddc..edf5a14 100644
--- a/src/cli/connections/connPanel.py
+++ b/src/cli/connections/connPanel.py
@@ -6,7 +6,6 @@ import time
 import curses
 import threading
 
-import cli.controller
 import cli.descriptorPopup
 import cli.popups
 
@@ -157,7 +156,6 @@ class ConnectionPanel(panel.Panel, threading.Thread):
     """
     
     # set ordering for connection options
-    cli.controller.getController().requestRedraw(True)
     titleLabel = "Connection Ordering:"
     options = entries.SortAttr.values()
     oldSelection = self._sortOrdering
diff --git a/src/cli/graphing/graphPanel.py b/src/cli/graphing/graphPanel.py
index 8c3adf7..b080871 100644
--- a/src/cli/graphing/graphPanel.py
+++ b/src/cli/graphing/graphPanel.py
@@ -307,8 +307,6 @@ class GraphPanel(panel.Panel):
     panel.CURSES_LOCK.acquire()
     try:
       while True:
-        control.requestRedraw(True)
-        
         msg = "press the down/up to resize the graph, and enter when done"
         control.setMsg(msg, curses.A_BOLD, True)
         curses.cbreak()
@@ -325,6 +323,8 @@ class GraphPanel(panel.Panel):
         elif key == curses.KEY_UP:
           self.setGraphHeight(self.graphHeight - 1)
         elif uiTools.isSelectionKey(key): break
+        
+        control.requestRedraw(True)
     finally:
       control.setMsg()
       panel.CURSES_LOCK.release()
diff --git a/src/cli/logPanel.py b/src/cli/logPanel.py
index ef372ab..fc3bfc3 100644
--- a/src/cli/logPanel.py
+++ b/src/cli/logPanel.py
@@ -13,7 +13,6 @@ import threading
 from TorCtl import TorCtl
 
 import popups
-import cli.controller
 from version import VERSION
 from util import conf, log, panel, sysTools, torTools, uiTools
 
@@ -792,7 +791,6 @@ class LogPanel(panel.Panel, threading.Thread):
     Prompts the user to add a new regex filter.
     """
     
-    cli.controller.getController().requestRedraw(True)
     regexInput = popups.inputPrompt("Regular expression: ")
     
     if regexInput:
@@ -809,7 +807,6 @@ class LogPanel(panel.Panel, threading.Thread):
     """
     
     # allow user to enter new types of events to log - unchanged if left blank
-    cli.controller.getController().requestRedraw(True)
     popup, width, height = popups.init(11, 80)
     
     if popup:
@@ -837,7 +834,6 @@ class LogPanel(panel.Panel, threading.Thread):
     Lets user enter a path to take a snapshot, canceling if left blank.
     """
     
-    cli.controller.getController().requestRedraw(True)
     pathInput = popups.inputPrompt("Path to save log snapshot: ")
     
     if pathInput:
diff --git a/src/cli/menu/actions.py b/src/cli/menu/actions.py
index 53e5d1c..b8b59e1 100644
--- a/src/cli/menu/actions.py
+++ b/src/cli/menu/actions.py
@@ -4,6 +4,7 @@ Generates the menu for arm, binding options with their related actions.
 
 import functools
 
+import cli.popups
 import cli.controller
 import cli.menu.item
 import cli.graphing.graphPanel
@@ -33,6 +34,8 @@ def makeMenu():
     elif pagePanel.getName() == "torrc":
       baseMenu.add(makeTorrcMenu(pagePanel))
   
+  baseMenu.add(makeHelpMenu())
+  
   return baseMenu
 
 def makeActionsMenu():
@@ -90,6 +93,18 @@ def makeViewMenu():
   
   return viewMenu
 
+def makeHelpMenu():
+  """
+  Submenu consisting of...
+    Hotkeys
+    About
+  """
+  
+  helpMenu = cli.menu.item.Submenu("Help")
+  helpMenu.add(cli.menu.item.MenuItem("Hotkeys", cli.popups.showHelpPopup))
+  helpMenu.add(cli.menu.item.MenuItem("About", cli.popups.showAboutPopup))
+  return helpMenu
+
 def makeGraphMenu(graphPanel):
   """
   Submenu for the graph panel, consisting of...
diff --git a/src/cli/menu/item.py b/src/cli/menu/item.py
index beaac9c..f46cdbb 100644
--- a/src/cli/menu/item.py
+++ b/src/cli/menu/item.py
@@ -2,6 +2,8 @@
 Menu item, representing an option in the drop-down menu.
 """
 
+import cli.controller
+
 class MenuItem():
   """
   Option in a drop-down menu.
@@ -53,7 +55,11 @@ class MenuItem():
     the menu and false otherwise.
     """
     
-    if self._callback: self._callback()
+    if self._callback:
+      control = cli.controller.getController()
+      control.setMsg()
+      control.requestRedraw(True)
+      self._callback()
     return True
   
   def next(self):
diff --git a/src/cli/popups.py b/src/cli/popups.py
index 5f1eac2..7254f4a 100644
--- a/src/cli/popups.py
+++ b/src/cli/popups.py
@@ -4,6 +4,7 @@ Functions for displaying popups in the interface.
 
 import curses
 
+import version
 import cli.controller
 
 from util import panel, uiTools
@@ -155,6 +156,30 @@ def showHelpPopup():
     return exitKey
   else: return None
 
+def showAboutPopup():
+  """
+  Presents a popup with author and version information.
+  """
+  
+  popup, _, height = init(9, 80)
+  if not popup: return
+  
+  try:
+    control = cli.controller.getController()
+    
+    popup.win.box()
+    popup.addstr(0, 0, "About:", curses.A_STANDOUT)
+    popup.addstr(1, 2, "arm, version %s (released %s)" % (version.VERSION, version.LAST_MODIFIED), curses.A_BOLD)
+    popup.addstr(2, 4, "Written by Damian Johnson (atagar1 at gmail.com)")
+    popup.addstr(3, 4, "Project page: www.atagar.com/arm")
+    popup.addstr(5, 2, "Released under the GPL v3 (http://www.gnu.org/licenses/gpl.html)")
+    popup.addstr(7, 2, "Press any key...")
+    popup.win.refresh()
+    
+    curses.cbreak()
+    control.getScreen().getch()
+  finally: finalize()
+
 def showSortDialog(title, options, oldSelection, optionColors):
   """
   Displays a sorting dialog of the form:
diff --git a/src/cli/torrcPanel.py b/src/cli/torrcPanel.py
index c273bf0..f651785 100644
--- a/src/cli/torrcPanel.py
+++ b/src/cli/torrcPanel.py
@@ -6,7 +6,6 @@ import math
 import curses
 import threading
 
-import cli.controller
 import popups
 
 from util import conf, enum, panel, torConfig, torTools, uiTools
@@ -89,8 +88,6 @@ class TorrcPanel(panel.Panel):
     Reloads the torrc, displaying an indicator of success or failure.
     """
     
-    cli.controller.getController().requestRedraw(True)
-    
     try:
       torConfig.getTorrc().load()
       self._lastContentHeightArgs = None





More information about the tor-commits mailing list