def _show_config_dialog(self, event=None): dlg = ConfigurationDialog(self.steno_engine, self.config, parent=self) dlg.Show()
def __init__(self, config): self.config = config pos = wx.DefaultPosition size = wx.DefaultSize wx.Frame.__init__(self, None, title=self.TITLE, pos=pos, size=size, style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX)) # Status button. self.on_bitmap = wx.Bitmap(self.ON_IMAGE_FILE, wx.BITMAP_TYPE_PNG) self.off_bitmap = wx.Bitmap(self.OFF_IMAGE_FILE, wx.BITMAP_TYPE_PNG) self.status_button = wx.BitmapButton(self, bitmap=self.on_bitmap) self.status_button.Bind(wx.EVT_BUTTON, self._toggle_steno_engine) # Configure button. self.configure_button = wx.Button(self, label=self.CONFIGURE_BUTTON_LABEL) self.configure_button.Bind(wx.EVT_BUTTON, self._show_config_dialog) # About button. self.about_button = wx.Button(self, label=self.ABOUT_BUTTON_LABEL) self.about_button.Bind(wx.EVT_BUTTON, self._show_about_dialog) # Machine status. # TODO: Figure out why spinner has darker gray background. self.spinner = wx.animate.GIFAnimationCtrl(self, -1, SPINNER_FILE) self.spinner.GetPlayer().UseBackgroundColour(True) self.spinner.Hide() self.connected_bitmap = wx.Bitmap(self.CONNECTED_IMAGE_FILE, wx.BITMAP_TYPE_PNG) self.disconnected_bitmap = wx.Bitmap(self.DISCONNECTED_IMAGE_FILE, wx.BITMAP_TYPE_PNG) self.connection_ctrl = wx.StaticBitmap(self, bitmap=self.disconnected_bitmap) # Layout. global_sizer = wx.BoxSizer(wx.VERTICAL) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(self.status_button, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=self.BORDER) sizer.Add(self.configure_button, flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=self.BORDER) sizer.Add(self.about_button, flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=self.BORDER) global_sizer.Add(sizer) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(self.spinner, flag=(wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL), border=self.BORDER) sizer.Add(self.connection_ctrl, flag=(wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL), border=self.BORDER) longest_machine = max(machine_registry.get_all_names(), key=len) longest_state = max((STATE_ERROR, STATE_INITIALIZING, STATE_RUNNING), key=len) longest_status = '%s: %s' % (longest_machine, longest_state) self.machine_status_text = wx.StaticText(self, label=longest_status) sizer.Add(self.machine_status_text, flag=wx.BOTTOM | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=self.BORDER) refresh_bitmap = wx.Bitmap(self.REFRESH_IMAGE_FILE, wx.BITMAP_TYPE_PNG) self.reconnect_button = wx.BitmapButton(self, bitmap=refresh_bitmap) sizer.Add(self.reconnect_button, flag=wx.BOTTOM | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=self.BORDER) self.machine_status_sizer = sizer global_sizer.Add(sizer) self.SetSizer(global_sizer) global_sizer.Fit(self) self.SetRect(AdjustRectToScreen(self.GetRect())) self.Bind(wx.EVT_CLOSE, self._quit) self.Bind(wx.EVT_MOVE, self.on_move) self.reconnect_button.Bind(wx.EVT_BUTTON, lambda e: app.reset_machine(self.steno_engine, self.config)) try: with open(config.target_file, 'rb') as f: self.config.load(f) except InvalidConfigurationError as e: self._show_alert(unicode(e)) self.config.clear() self.steno_engine = app.StenoEngine() self.steno_engine.add_callback( lambda s: wx.CallAfter(self._update_status, s)) self.steno_engine.set_output( Output(self.consume_command, self.steno_engine)) while True: try: app.init_engine(self.steno_engine, self.config) break except InvalidConfigurationError as e: self._show_alert(unicode(e)) dlg = ConfigurationDialog(self.steno_engine, self.config, parent=self) ret = dlg.ShowModal() if ret == wx.ID_CANCEL: self._quit() return self.steno_engine.add_stroke_listener( StrokeDisplayDialog.stroke_handler) if self.config.get_show_stroke_display(): StrokeDisplayDialog.display(self, self.config) pos = (config.get_main_frame_x(), config.get_main_frame_y()) self.SetPosition(pos)