
commit 0a366d3c6d140d0a9f229e9decf69c3e42de7a6d Author: Damian Johnson <atagar@torproject.org> Date: Thu Sep 15 12:57:55 2016 -0700 Finish merging Controller into the Interface Last bit is moving the constructor in. This completes the shift from our old controller into the interface class. --- nyx/__init__.py | 55 +++++++++++++++++++++++++++++++++++--- nyx/controller.py | 79 +++---------------------------------------------------- 2 files changed, 56 insertions(+), 78 deletions(-) diff --git a/nyx/__init__.py b/nyx/__init__.py index 973776d..a22e9f3 100644 --- a/nyx/__init__.py +++ b/nyx/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2010-2016, Damian Johnson and The Tor Project +# Copyright 2009-2016, Damian Johnson and The Tor Project # See LICENSE for licensing information """ @@ -61,6 +61,16 @@ __all__ = [ 'tracker', ] +CONFIG = stem.util.conf.config_dict('nyx', { + 'features.panels.show.graph': True, + 'features.panels.show.log': True, + 'features.panels.show.connection': True, + 'features.panels.show.config': True, + 'features.panels.show.torrc': True, + 'features.panels.show.interpreter': True, +}) + +NYX_INTERFACE = None TOR_CONTROLLER = None BASE_DIR = os.path.sep.join(__file__.split(os.path.sep)[:-1]) DATA_DIR = os.path.expanduser('~/.nyx') @@ -115,8 +125,10 @@ def nyx_interface(): :returns: :class:`~nyx.Interface` controller """ - import nyx.controller - return nyx.controller.get_controller() + if NYX_INTERFACE is None: + Interface() # constructor sets NYX_INTERFACE + + return NYX_INTERFACE def tor_controller(): @@ -231,10 +243,40 @@ class Interface(object): """ def __init__(self): + global NYX_INTERFACE + self._page = 0 + self._page_panels = [] + self._header_panel = None self._paused = False self._quit = False + NYX_INTERFACE = self + + self._header_panel = nyx.panel.header.HeaderPanel() + first_page_panels = [] + + if CONFIG['features.panels.show.graph']: + first_page_panels.append(nyx.panel.graph.GraphPanel()) + + if CONFIG['features.panels.show.log']: + first_page_panels.append(nyx.panel.log.LogPanel()) + + if first_page_panels: + self._page_panels.append(first_page_panels) + + if CONFIG['features.panels.show.connection']: + self._page_panels.append([nyx.panel.connection.ConnectionPanel()]) + + if CONFIG['features.panels.show.config']: + self._page_panels.append([nyx.panel.config.ConfigPanel()]) + + if CONFIG['features.panels.show.torrc']: + self._page_panels.append([nyx.panel.torrc.TorrcPanel()]) + + if CONFIG['features.panels.show.interpreter']: + self._page_panels.append([nyx.panel.interpreter.InterpreterPanel()]) + def get_page(self): """ Provides the page we're showing. @@ -379,3 +421,10 @@ class Interface(object): import nyx.panel +import nyx.panel.config +import nyx.panel.connection +import nyx.panel.graph +import nyx.panel.header +import nyx.panel.interpreter +import nyx.panel.log +import nyx.panel.torrc diff --git a/nyx/controller.py b/nyx/controller.py index cb69082..85cf1fe 100644 --- a/nyx/controller.py +++ b/nyx/controller.py @@ -13,23 +13,13 @@ import nyx.menu import nyx.popups import nyx.panel -import nyx.panel.config -import nyx.panel.connection -import nyx.panel.graph -import nyx.panel.header -import nyx.panel.interpreter -import nyx.panel.log -import nyx.panel.torrc import stem from stem.util import conf, log from nyx.curses import BOLD -from nyx import Interface, tor_controller - - -NYX_CONTROLLER = None +from nyx import nyx_interface, tor_controller def conf_handler(key, value): @@ -39,31 +29,14 @@ def conf_handler(key, value): CONFIG = conf.config_dict('nyx', { 'features.acsSupport': True, - 'features.panels.show.graph': True, - 'features.panels.show.log': True, - 'features.panels.show.connection': True, - 'features.panels.show.config': True, - 'features.panels.show.torrc': True, - 'features.panels.show.interpreter': True, 'features.redrawRate': 5, 'features.confirmQuit': True, 'start_time': 0, }, conf_handler) -def get_controller(): - """ - Provides the nyx controller instance. - """ - - if NYX_CONTROLLER is None: - Controller() # constructor sets NYX_CONTROLLER - - return NYX_CONTROLLER - - def show_message(message = None, *attr, **kwargs): - return get_controller().header_panel().show_message(message, *attr, **kwargs) + return nyx_interface().header_panel().show_message(message, *attr, **kwargs) def input_prompt(msg, initial_value = ''): @@ -77,7 +50,7 @@ def input_prompt(msg, initial_value = ''): canceled """ - header_panel = get_controller().header_panel() + header_panel = nyx_interface().header_panel() header_panel.show_message(msg) user_input = nyx.curses.str_input(len(msg), header_panel.get_height() - 1, initial_value) @@ -86,56 +59,12 @@ def input_prompt(msg, initial_value = ''): return user_input -class Controller(Interface): - """ - Tracks the global state of the interface - """ - - def __init__(self): - """ - Creates a new controller instance. Panel lists are ordered as they appear, - top to bottom on the page. - """ - - global NYX_CONTROLLER - super(Controller, self).__init__() - - self._page_panels = [] - self._header_panel = None - - NYX_CONTROLLER = self - - self._header_panel = nyx.panel.header.HeaderPanel() - first_page_panels = [] - - if CONFIG['features.panels.show.graph']: - first_page_panels.append(nyx.panel.graph.GraphPanel()) - - if CONFIG['features.panels.show.log']: - first_page_panels.append(nyx.panel.log.LogPanel()) - - if first_page_panels: - self._page_panels.append(first_page_panels) - - if CONFIG['features.panels.show.connection']: - self._page_panels.append([nyx.panel.connection.ConnectionPanel()]) - - if CONFIG['features.panels.show.config']: - self._page_panels.append([nyx.panel.config.ConfigPanel()]) - - if CONFIG['features.panels.show.torrc']: - self._page_panels.append([nyx.panel.torrc.TorrcPanel()]) - - if CONFIG['features.panels.show.interpreter']: - self._page_panels.append([nyx.panel.interpreter.InterpreterPanel()]) - - def start_nyx(): """ Main draw loop context. """ - interface = get_controller() + interface = nyx_interface() if not CONFIG['features.acsSupport']: nyx.curses.disable_acs()