47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
from alarms.alarm_manager import AlarmManager
|
|
from ui.alarm_view_model import AlarmViewModel
|
|
from ui.dashboard_view_model import DashboardViewModel
|
|
|
|
|
|
class PicoDashboardApp:
|
|
def __init__(
|
|
self,
|
|
app_state,
|
|
communication_service,
|
|
screen_manager,
|
|
touch_router,
|
|
display,
|
|
dashboard_renderer,
|
|
buzzer,
|
|
alarm_manager=None,
|
|
):
|
|
self.state = app_state
|
|
self.comms = communication_service
|
|
self.screen_manager = screen_manager
|
|
self.touch_router = touch_router
|
|
self.display = display
|
|
self.dashboard_renderer = dashboard_renderer
|
|
self.buzzer = buzzer
|
|
self.alarm_manager = alarm_manager or AlarmManager()
|
|
self.alarms = []
|
|
|
|
def tick(self, touch_event=None):
|
|
self.comms.poll()
|
|
self.comms.auto_select_transport()
|
|
|
|
if touch_event:
|
|
self.touch_router.handle_touch(touch_event)
|
|
|
|
self.alarms = self.alarm_manager.evaluate(self.state)
|
|
|
|
alarm_view = AlarmViewModel(self.alarms)
|
|
self.buzzer.update_from_alarm_view(alarm_view)
|
|
|
|
self.render()
|
|
|
|
def render(self):
|
|
if self.screen_manager.current_screen == "dashboard":
|
|
vm = DashboardViewModel(self.state, self.alarms)
|
|
self.dashboard_renderer.render(vm)
|
|
self.display.flush()
|