Add core Application (adjusted), Window (new version), Signal (replaces Emitter), Size (adjusted). Add application demo.
from tuikit.core.window import Window
import logging
class Application:
"""Tuikit application helper.
Joins all required pieces to build complete application
using TUI widgets and event loop.
"""
def __init__(self, driver='curses'):
# logger
self.log = logging.getLogger('tuikit')
# Driver
self.driver = None
# root Buffer and Window
self.root_window = Window()
# flags
self._started = False
self._quit = False
# find and initialize driver
self.use_driver(driver)
def use_driver(self, driver_name):
"""Select driver to be used for rendering and input.
`driver_name` should be one of: 'base', 'curses', 'sdl'
"""
if self._started:
raise Exception('Cannot change driver after starting the application.')
module = __import__('tuikit.driver.' + driver_name, fromlist=['driver_class'])
self.driver = module.driver_class()
def start(self):
"""Start application. Runs main loop."""
self.log.info('=== start ===')
with self.driver:
self.main_loop()
def stop(self):
"""Terminate application."""
self._quit = True
def main_loop(self):
"""The main loop."""
self._started = True
self.root_window.resize(*self.driver.size)
# timer = self._timer
self.root_window.buffer.frame()
while not self._quit:
self.root_window.draw(self.driver)
self.driver.flush()
#timeout = timer.nearest_timeout()
events = self.driver.getevents()#timeout)
self._quit = True
#timer.process_timeouts()
# for event in events:
# self._top.emit(event[0], *event[1:])
self._started = False
self.log.info('=== quit ===')