[tor-commits] [nyx/master] Move redraw method

atagar at torproject.org atagar at torproject.org
Fri Sep 16 06:18:14 UTC 2016


commit 66e34c28ca1c02a526c4a427e37955d25a3487cc
Author: Damian Johnson <atagar at torproject.org>
Date:   Thu Sep 15 10:10:28 2016 -0700

    Move redraw method
    
    Moving our redraw() method to the Interface with a couple simplifications...
    
    * The only time we ever call a panel's set_height() is for rendering, so that
      might as well just be a render() argument.
    
    * Since we started doing forced rendering by default 'features.refreshRate'
      and self._force_redraw are no longer doing anything. We may go back to this
      in the future but for now might as well just drop them it.
---
 nyx/__init__.py       | 22 +++++++++++++++++++++-
 nyx/controller.py     | 48 ------------------------------------------------
 nyx/panel/__init__.py | 16 +++++-----------
 nyxrc.sample          |  5 -----
 4 files changed, 26 insertions(+), 65 deletions(-)

diff --git a/nyx/__init__.py b/nyx/__init__.py
index c5e24c1..91225b8 100644
--- a/nyx/__init__.py
+++ b/nyx/__init__.py
@@ -26,6 +26,7 @@ Tor curses monitoring application.
     |- is_paused - checks if the interface is paused
     |- set_paused - sets paused state
     |
+    |- redraw - renders our content
     |- quit - quits our application
     +- halt - stops daemon panels
 """
@@ -257,7 +258,6 @@ class Interface(object):
 
     if page_number != self._page:
       self._page = page_number
-      self._force_redraw = True
       self.header_panel().redraw()
 
   def page_count(self):
@@ -330,6 +330,26 @@ class Interface(object):
       for panel_impl in self.get_page_panels():
         panel_impl.redraw()
 
+  def redraw(self, force = True):
+    """
+    Renders our displayed content.
+
+    :param bool force: if **False** only redraws content if resized
+    """
+
+    # Curses may overly cache content without clearing here...
+    # https://trac.torproject.org/projects/tor/ticket/2830#comment:9
+
+    if force:
+      with nyx.curses.raw_screen() as stdscr:
+        stdscr.clear()
+
+    occupied = 0
+
+    for panel in [self.header_panel()] + self.get_page_panels():
+      panel.redraw(force = force, top = occupied)
+      occupied += panel.get_height()
+
   def quit(self):
     """
     Quits our application.
diff --git a/nyx/controller.py b/nyx/controller.py
index 7358383..6dd1b09 100644
--- a/nyx/controller.py
+++ b/nyx/controller.py
@@ -35,8 +35,6 @@ NYX_CONTROLLER = None
 def conf_handler(key, value):
   if key == 'features.redrawRate':
     return max(1, value)
-  elif key == 'features.refreshRate':
-    return max(0, value)
 
 
 CONFIG = conf.config_dict('nyx', {
@@ -48,7 +46,6 @@ CONFIG = conf.config_dict('nyx', {
   'features.panels.show.torrc': True,
   'features.panels.show.interpreter': True,
   'features.redrawRate': 5,
-  'features.refreshRate': 5,
   'features.confirmQuit': True,
   'start_time': 0,
 }, conf_handler)
@@ -105,8 +102,6 @@ class Controller(Interface):
 
     self._page_panels = []
     self._header_panel = None
-    self._force_redraw = False
-    self._last_drawn = 0
 
     NYX_CONTROLLER = self
 
@@ -137,49 +132,6 @@ class Controller(Interface):
   def header_panel(self):
     return self._header_panel
 
-  def redraw(self, force = True):
-    """
-    Redraws the displayed panel content.
-
-    Arguments:
-      force - redraws regardless of if it's needed if true, otherwise ignores
-              the request when there aren't changes to be displayed
-    """
-
-    force |= self._force_redraw
-    self._force_redraw = False
-
-    current_time = time.time()
-
-    if CONFIG['features.refreshRate'] != 0:
-      if self._last_drawn + CONFIG['features.refreshRate'] <= current_time:
-        force = True
-
-    display_panels = [self.header_panel()] + self.get_page_panels()
-
-    occupied_content = 0
-
-    for panel_impl in display_panels:
-      panel_impl.set_top(occupied_content)
-      height = panel_impl.get_height()
-
-      if height:
-        occupied_content += height
-
-    # apparently curses may cache display contents unless we explicitely
-    # request a redraw here...
-    # https://trac.torproject.org/projects/tor/ticket/2830#comment:9
-
-    if force:
-      with nyx.curses.raw_screen() as stdscr:
-        stdscr.clear()
-
-    for panel_impl in display_panels:
-      panel_impl.redraw(force = force)
-
-    if force:
-      self._last_drawn = current_time
-
 
 def start_nyx():
   """
diff --git a/nyx/panel/__init__.py b/nyx/panel/__init__.py
index 49c7e22..24ffadf 100644
--- a/nyx/panel/__init__.py
+++ b/nyx/panel/__init__.py
@@ -17,7 +17,6 @@ Panels consisting the nyx interface.
     |  +- stop - stops triggering daemon actions
     |
     |- get_top - top position we're rendered into on the screen
-    |- set_top - sets top position within the screen
     |- get_height - height occupied by the panel
     |
     |- set_visible - toggles panel visiblity
@@ -107,15 +106,6 @@ class Panel(object):
 
     return self._top
 
-  def set_top(self, top):
-    """
-    Changes the position where we're rendered in the screen.
-
-    :param int top: top position within the sceen
-    """
-
-    self._top = top
-
   def get_height(self):
     """
     Provides the height occupied by this panel.
@@ -162,14 +152,18 @@ class Panel(object):
 
     return None
 
-  def redraw(self, force = True):
+  def redraw(self, force = True, top = None):
     """
     Renders our panel's content to the screen.
 
     :param bool force: if **False** only redraws content if the panel's
       dimensions have changed
+    :param int top: position to render relative to the top of the screen
     """
 
+    if top:
+      self._top = top
+
     if not self._visible:
       return  # not currently visible
 
diff --git a/nyxrc.sample b/nyxrc.sample
index 7bb300c..c9ff604 100644
--- a/nyxrc.sample
+++ b/nyxrc.sample
@@ -45,11 +45,6 @@ features.logFile
 # Seconds to wait on user input before refreshing content
 features.redrawRate 5
 
-# Rate (seconds) to periodically redraw the screen, disabled if zero. This
-# shouldn't be necessary, but can correct issues if the terminal gets into a
-# funky state.
-features.refreshRate 5
-
 # Confirms promt to confirm when quiting if true
 features.confirmQuit true
 





More information about the tor-commits mailing list