commit 66e34c28ca1c02a526c4a427e37955d25a3487cc Author: Damian Johnson atagar@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
tor-commits@lists.torproject.org