###############################################################################
import logging
+import snack
+
+from ..i18n import _
# Setup logging
log = logging.getLogger("bricklayer.tui")
def __init__(self, bricklayer):
self.bricklayer = bricklayer
+ # Placeholder for screen
+ self.screen = None
+
# Make this class usable as context
def __enter__(self):
+ log.debug("Entering TUI context")
+
+ # Setup the screen
+ self._setup_screen()
+
return self
def __exit__(self, type, value, traceback):
- pass
+ log.debug("Leaving TUI context")
+
+ # Wipe the screen
+ self._finish_screen()
+
+ def refresh(self):
+ """
+ Refreshes what is written on the screen
+ """
+ if self.screen:
+ self.screen.refresh()
+
+ def _setup_screen(self):
+ """
+ Sets up the screen
+ """
+ self.screen = snack.SnackScreen()
+
+ # Setup helpline
+ self.push_helpline(
+ _("<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen")
+ )
+
+ # Refresh the screen
+ self.refresh()
+
+ def _finish_screen(self):
+ """
+ Cleanup screen
+ """
+ if self.screen:
+ self.screen.finish()
+ self.screen = None
+
+ def push_helpline(self, helpline):
+ """
+ Sets the helpline, but centers it first
+ """
+ if not self.screen:
+ raise RuntimeError()
+
+ # Center the string
+ if self.screen.width:
+ helpline = helpline.center(self.screen.width)
+
+ self.screen.pushHelpLine(helpline)