コード例 #1
0
ファイル: main.py プロジェクト: jesseanderson/ola-rpiui
 def build(self):
   """Initializes the user interface and starts timed events."""
   #TODO: Reorganize and consolidate; make necessary helper functions
   self.title = 'Open Lighting Architecture'
   self.ui_queue = Queue()
   self.layout = BoxLayout(orientation='vertical')
   self.selected_universe_service = UniverseSelectedService()
   self.ola_listener = OLAListener(self.ui_queue,
                                   self.create_select_server,
                                   self.create_ola_client,
                                   self.start_ola,
                                   self.stop_ola)
   #Screen creation and layout placing
   self.screen_tabs = ScreenTabs()
   self.monitor_screen = MonitorScreen(self.ola_listener,
                                       self.selected_universe_service,
                                       name='DMX Monitor')
   self.console_screen = ConsoleScreen(self.ola_listener,
                                       self.selected_universe_service,
                                       name='DMX Console')
   self.devsets = MainScreen(self.ola_listener,
                             self.selected_universe_service,
                             name='Device Settings')
   self.screen_tabs.ids.monitor_screen.add_widget(self.monitor_screen)
   self.screen_tabs.ids.console_screen.add_widget(self.console_screen)
   self.screen_tabs.ids.settings_screen.add_widget(self.devsets)
   self.layout.add_widget(self.screen_tabs)
   Clock.schedule_interval(lambda dt: self.display_tasks(),
                           self.EVENT_POLL_INTERVAL)
   Clock.schedule_interval(self._update_clock, 1 / 60.)
   return self.layout
コード例 #2
0
ファイル: main.py プロジェクト: jesseanderson/ola-rpiui
class RPiUI(App):
  """Class for drawing and handling the Kivy application itself."""
  EVENT_POLL_INTERVAL = 1 / 20
  UNIVERSE_POLL_INTERVAL = 1 / 10
  index = NumericProperty(-1)
  time = NumericProperty(0)
  current_title = StringProperty()
  screen_names = ListProperty([])

  def build(self):
    """Initializes the user interface and starts timed events."""
    #TODO: Reorganize and consolidate; make necessary helper functions
    self.title = 'Open Lighting Architecture'
    self.ui_queue = Queue()
    self.layout = BoxLayout(orientation='vertical')
    self.selected_universe_service = UniverseSelectedService()
    self.ola_listener = OLAListener(self.ui_queue,
                                    self.create_select_server,
                                    self.create_ola_client,
                                    self.start_ola,
                                    self.stop_ola)
    #Screen creation and layout placing
    self.screen_tabs = ScreenTabs()
    self.monitor_screen = MonitorScreen(self.ola_listener,
                                        self.selected_universe_service,
                                        name='DMX Monitor')
    self.console_screen = ConsoleScreen(self.ola_listener,
                                        self.selected_universe_service,
                                        name='DMX Console')
    self.devsets = MainScreen(self.ola_listener,
                              self.selected_universe_service,
                              name='Device Settings')
    self.screen_tabs.ids.monitor_screen.add_widget(self.monitor_screen)
    self.screen_tabs.ids.console_screen.add_widget(self.console_screen)
    self.screen_tabs.ids.settings_screen.add_widget(self.devsets)
    self.layout.add_widget(self.screen_tabs)
    Clock.schedule_interval(lambda dt: self.display_tasks(),
                            self.EVENT_POLL_INTERVAL)
    Clock.schedule_interval(self._update_clock, 1 / 60.)
    return self.layout

  def on_start(self):
    """Executed after build()"""
    signal(SIGINT, self.stop) #Captures ctrl-c to exit correctly
    self.ola_listener.start()

  def on_stop(self):
    """Executed when the application quits"""
    self.ola_listener.stop()

  def on_pause(self):
    """Pausing is not allowed; the application will close instead"""
    return False

  def on_resume(self):
    """Because pausing is not allowed, nothing to do here"""
    pass

  @staticmethod
  def create_select_server():
    return SelectServer()

  @staticmethod
  def create_ola_client():
    return OlaClient()

  def start_ola(self):
    """Executed when OLAD starts, enables proper UI actions"""
    self.devsets.start_ola(self.UNIVERSE_POLL_INTERVAL)

  def stop_ola(self):
    """Executed when OLAD stops, disables proper UI actions"""
    self.devsets.stop_ola()

  def display_tasks(self):
    """Polls for events that need to update the UI,
       then updates the UI accordingly.
    """
    try:
      event = self.ui_queue.get(False)
      event.run()
    except Empty:
      pass

  def _update_clock(self, dt):
    self.time = time()

  def olad_listen(self, dt):
    self.ola_listener.listen(self)