def run(build_spec): app = wx.App(False) i18n.load(build_spec['language_dir'], build_spec['language']) image_repository.patch_images(build_spec['image_dir']) controller = Controller(build_spec) controller.run() app.MainLoop()
def _init_controller(self): self._controller = Controller(base_frame=self, build_spec=self.build_spec)
class BaseWindow(wx.Frame): def __init__(self, build_spec): wx.Frame.__init__(self, parent=None, id=-1) self.build_spec = build_spec self._controller = None self.SetDoubleBuffered(True) # Components self.icon = None self.head_panel = None self.config_panel = None self.runtime_display = None self.foot_panel = None self.panels = None self._init_properties() self._init_components() self._do_layout() self._init_pages() self._init_controller() self.registerControllers() self.Bind(wx.EVT_SIZE, self.onResize) self.Bind(wx.EVT_CLOSE, lambda x: pub.send_message(str(events.WINDOW_CLOSE))) def _init_properties(self): self.SetTitle(self.build_spec['program_name']) self.SetSize(self.build_spec['default_size']) # self.SetMinSize((400, 300)) self.icon = wx.Icon(image_repository.program_icon, wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) def _init_components(self): # init gui _desc = self.build_spec['program_description'] self.head_panel = header.FrameHeader(heading=i18n._("settings_title"), subheading=_desc or '', parent=self) self.runtime_display = RuntimeDisplay(self, self.build_spec) self.foot_panel = footer.Footer(self) self.panels = [self.head_panel, self.config_panel, self.foot_panel] def _do_layout(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.head_panel, 0, wx.EXPAND) sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) if self.build_spec['layout_type'] == 'column': self.config_panel = layouts.ColumnLayout( self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) else: self.config_panel = layouts.FlatLayout(self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) sizer.Add(self.runtime_display, 1, wx.EXPAND) self.runtime_display.Hide() sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) sizer.Add(self.foot_panel, 0, wx.EXPAND) self.SetSizer(sizer) self.sizer = sizer pub.subscribe(self.myListener, "panelListener") pub.subscribe(self.load_view, events.WINDOW_CHANGE) def myListener(self, message): if message == 'fetch': del self.config_panel def _init_controller(self): self._controller = Controller(base_frame=self, build_spec=self.build_spec) def registerControllers(self): for panel in self.panels: pass def GetOptions(self): return self.config_panel.GetOptions() def GetRequiredArgs(self): return self.config_panel.GetRequiredArgs() def GetOptionalArgs(self): return self.config_panel.GetOptionalArgs() def _init_pages(self): def config(): self.config_panel.Show() self.runtime_display.Hide() def running(): self.config_panel.Hide() self.runtime_display.Show() self.Layout() def success(): running() def error(): running() self.layouts = locals() def load_view(self, view_name=None): self.layouts.get(view_name, lambda: None)() def ManualStart(self): self._controller.manual_restart() def onResize(self, evt): evt.Skip() def PublishConsoleMsg(self, text): self.runtime_display.cmd_textbox.AppendText(text)
def _init_controller(self): self._controller = Controller(base_frame=self, client_app=self._client_app)
class BaseWindow(wx.Frame): def __init__(self, BodyPanel, client_app, params): wx.Frame.__init__(self, parent=None, id=-1) self._params = params self._client_app = client_app self._controller = None # Components self.icon = None self.head_panel = None self.config_panel = None self.runtime_display = None self.foot_panel = None self.panels = None self._init_properties() self._init_components(BodyPanel) self._do_layout() self._init_controller() self.registerControllers() def _init_properties(self): if not self._params['program_name']: title = os.path.basename(sys.argv[0].replace('.py', '')) else: title = self._params['program_name'] self.SetTitle(title) self.SetSize((610, 530)) self.SetMinSize((400, 300)) self.icon = wx.Icon(image_repository.icon, wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) def _init_components(self, BodyPanel): # init gui _desc = self._client_app.description self.head_panel = header.FrameHeader( heading=i18n.translate("settings_title"), subheading=_desc if _desc is not None else '', parent=self) self.config_panel = BodyPanel(self) self.runtime_display = RuntimeDisplay(self) self.foot_panel = footer.Footer(self, self._controller) self.panels = [self.head_panel, self.config_panel, self.foot_panel] def _do_layout(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.head_panel, 0, wx.EXPAND) sizer.Add(styling.HorizontalRule(self), 0, wx.EXPAND) sizer.Add(self.config_panel, 1, wx.EXPAND) self.runtime_display.Hide() sizer.Add(self.runtime_display, 1, wx.EXPAND) sizer.Add(styling.HorizontalRule(self), 0, wx.EXPAND) sizer.Add(self.foot_panel, 0, wx.EXPAND) self.SetSizer(sizer) def _init_controller(self): self._controller = Controller(base_frame=self, client_app=self._client_app) def registerControllers(self): for panel in self.panels: panel.RegisterController(self._controller) def GetOptions(self): return self.config_panel.GetOptions() def NextPage(self): self.head_panel.NextPage() self.foot_panel.NextPage() self.config_panel.Hide() self.runtime_display.Show() self.Layout() # def AttachPayload(self, payload): # self._payload = payload def ManualStart(self): self._controller.ManualStart()
class BaseWindow(wx.Frame): def __init__(self, build_spec): wx.Frame.__init__(self, parent=None, id=-1) self.build_spec = build_spec self._controller = None self.SetDoubleBuffered(True) # Components self.icon = None self.head_panel = None self.config_panel = None self.runtime_display = None self.foot_panel = None self.panels = None self._init_properties() self._init_components() self._do_layout() self._init_pages() self._init_controller() self.registerControllers() self.Bind(wx.EVT_SIZE, self.onResize) def _init_properties(self): self.SetTitle(self.build_spec['program_name']) self.SetSize(self.build_spec['default_size']) # self.SetMinSize((400, 300)) self.icon = wx.Icon(image_repository.icon, wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) def _init_components(self): # init gui _desc = self.build_spec['program_description'] self.head_panel = header.FrameHeader( heading=i18n._("settings_title"), subheading=_desc or '', parent=self) self.runtime_display = RuntimeDisplay(self) self.foot_panel = footer.Footer(self) self.panels = [self.head_panel, self.config_panel, self.foot_panel] def _do_layout(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.head_panel, 0, wx.EXPAND) sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) if self.build_spec['layout_type'] == 'column': self.config_panel = layouts.ColumnLayout(self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) else: self.config_panel = layouts.FlatLayout(self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) sizer.Add(self.runtime_display, 1, wx.EXPAND) self.runtime_display.Hide() sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) sizer.Add(self.foot_panel, 0, wx.EXPAND) self.SetSizer(sizer) self.sizer = sizer pub.subscribe(self.myListener, "panelListener") pub.subscribe(self.load_view, events.WINDOW_CHANGE) def myListener(self, message): if message == 'fetch': del self.config_panel def _init_controller(self): self._controller = Controller(base_frame=self, build_spec=self.build_spec) def registerControllers(self): for panel in self.panels: pass def GetOptions(self): return self.config_panel.GetOptions() def GetRequiredArgs(self): return self.config_panel.GetRequiredArgs() def GetOptionalArgs(self): return self.config_panel.GetOptionalArgs() def _init_pages(self): def config(): self.config_panel.Show() self.runtime_display.Hide() def running(): self.config_panel.Hide() self.runtime_display.Show() self.Layout() def success(): running() def error(): running() self.layouts = locals() def load_view(self, view_name=None): self.layouts.get(view_name, lambda: None)() def ManualStart(self): self._controller.manual_restart() def onResize(self, evt): evt.Skip() def PublishConsoleMsg(self, text): self.runtime_display.cmd_textbox.AppendText(text)
class BaseWindow(wx.Frame): def __init__(self, build_spec): wx.Frame.__init__(self, parent=None, id=-1) self.build_spec = build_spec self._controller = None self.SetDoubleBuffered(True) # Components self.icon = None self.head_panel = None self.config_panel = None self.runtime_display = None self.foot_panel = None self.panels = None self._init_properties() self._init_components() self._do_layout() self._init_pages() self._init_controller() self.registerControllers() self.Bind(wx.EVT_SIZE, self.onResize) self.Bind(wx.EVT_CLOSE, self.onClose) def _init_properties(self): self.SetTitle(self.build_spec['program_name']) self.SetSize(self.build_spec['default_size']) # self.SetMinSize((400, 300)) self.icon = wx.Icon(image_repository.program_icon, wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) def _init_components(self): # init gui _desc = self.build_spec['program_description'] self.head_panel = header.FrameHeader( heading=i18n._("settings_title"), subheading=_desc or '', parent=self) self.runtime_display = RuntimeDisplay(self, self.build_spec) self.foot_panel = footer.Footer(self) if self.build_spec['disable_stop_button']: self.foot_panel.stop_button.Disable() else: self.foot_panel.stop_button.Enable() self.panels = [self.head_panel, self.config_panel, self.foot_panel] def _do_layout(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.head_panel, 0, wx.EXPAND) sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) if self.build_spec['layout_type'] == 'column': self.config_panel = layouts.ColumnLayout(self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) else: self.config_panel = layouts.FlatLayout(self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) sizer.Add(self.runtime_display, 1, wx.EXPAND) self.runtime_display.Hide() sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) sizer.Add(self.foot_panel, 0, wx.EXPAND) self.SetSizer(sizer) self.sizer = sizer pub.subscribe(self.myListener, "panelListener") pub.subscribe(self.load_view, events.WINDOW_CHANGE) def myListener(self, message): if message == 'fetch': del self.config_panel def _init_controller(self): self._controller = Controller(base_frame=self, build_spec=self.build_spec) def registerControllers(self): for panel in self.panels: pass def GetOptions(self): return self.config_panel.GetOptions() def GetRequiredArgs(self): return self.config_panel.GetRequiredArgs() def GetOptionalArgs(self): return self.config_panel.GetOptionalArgs() def _init_pages(self): def config(): self.config_panel.Show() self.runtime_display.Hide() def running(): self.config_panel.Hide() self.runtime_display.Show() self.Layout() def success(): running() def error(): running() self.layouts = locals() def load_view(self, view_name=None): self.layouts.get(view_name, lambda: None)() def ManualStart(self): self._controller.manual_restart() def onResize(self, evt): evt.Skip() def onClose(self, evt): if evt.CanVeto(): evt.Veto() pub.send_message(str(events.WINDOW_CLOSE)) def PublishConsoleMsg(self, text): self.runtime_display.cmd_textbox.AppendText(text) def UpdateProgressBar(self, value): pb = self.foot_panel.progress_bar if value < 0: pb.Pulse() else: value = min(int(value), pb.GetRange()) if pb.GetValue() != value: # Windows 7 progress bar animation hack # http://stackoverflow.com/questions/5332616/disabling-net-progressbar-animation-when-changing-value if self.build_spec["disable_progress_bar_animation"] \ and sys.platform.startswith("win"): if pb.GetRange() == value: pb.SetValue(value) pb.SetValue(value-1) else: pb.SetValue(value+1) pb.SetValue(value)
class BaseWindow(wx.Frame): def __init__(self, BodyPanel, build_spec): wx.Frame.__init__(self, parent=None, id=-1) self.build_spec = build_spec self._controller = None # Components self.icon = None self.head_panel = None self.config_panel = None self.runtime_display = None self.foot_panel = None self.panels = None self._init_properties() self._init_components(BodyPanel) self._do_layout() self._init_controller() self.registerControllers() self.Bind(wx.EVT_SIZE, self.onResize) def _init_properties(self): self.SetTitle(self.build_spec['program_name']) self.SetSize(self.build_spec['default_size']) # self.SetMinSize((400, 300)) self.icon = wx.Icon(image_repository.icon, wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) def _init_components(self, BodyPanel): # init gui _desc = self.build_spec['program_description'] self.head_panel = header.FrameHeader( heading=i18n.translate("settings_title"), subheading=_desc or '', parent=self) self.config_panel = BodyPanel(self) self.runtime_display = RuntimeDisplay(self) self.foot_panel = footer.Footer(self, self._controller) self.panels = [self.head_panel, self.config_panel, self.foot_panel] def _do_layout(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.head_panel, 0, wx.EXPAND) sizer.Add(styling.HorizontalRule(self), 0, wx.EXPAND) sizer.Add(self.config_panel, 1, wx.EXPAND) self.runtime_display.Hide() sizer.Add(self.runtime_display, 1, wx.EXPAND) sizer.Add(styling.HorizontalRule(self), 0, wx.EXPAND) sizer.Add(self.foot_panel, 0, wx.EXPAND) self.SetSizer(sizer) def _init_controller(self): self._controller = Controller(base_frame=self, build_spec=self.build_spec) def registerControllers(self): for panel in self.panels: panel.RegisterController(self._controller) def GetOptions(self): return self.config_panel.GetOptions() def GetRequiredArgs(self): return self.config_panel.GetRequiredArgs() def GetOptionalArgs(self): return self.config_panel.GetOptionalArgs() def NextPage(self): self.head_panel.NextPage() self.foot_panel.NextPage() self.config_panel.Hide() self.runtime_display.Show() self.Layout() def ManualStart(self): self._controller.ManualStart() def onResize(self, evt): evt.Skip() def PublishConsoleMsg(self, text): self.runtime_display.cmd_textbox.AppendText(text)
class BaseWindow(wx.Frame): def __init__(self, build_spec): wx.Frame.__init__(self, parent=None, id=-1) self.build_spec = build_spec self._controller = None self.SetDoubleBuffered(True) # Components self.icon = None self.head_panel = None self.config_panel = None self.runtime_display = None self.foot_panel = None self.panels = None self._init_properties() self._init_components() self._do_layout() self._init_pages() self._init_controller() self.registerControllers() self.Bind(wx.EVT_SIZE, self.onResize) self.Bind(wx.EVT_CLOSE, self.onClose) def _init_properties(self): self.SetTitle(self.build_spec['program_name']) self.SetSize(self.build_spec['default_size']) # self.SetMinSize((400, 300)) self.icon = wx.Icon(image_repository.program_icon, wx.BITMAP_TYPE_ICO) self.SetIcon(self.icon) def _init_components(self): # init gui _desc = self.build_spec['program_description'] self.head_panel = header.FrameHeader(heading=i18n._("settings_title"), subheading=_desc or '', parent=self) self.runtime_display = RuntimeDisplay(self, self.build_spec) self.foot_panel = footer.Footer(self) if self.build_spec['disable_stop_button']: self.foot_panel.stop_button.Disable() else: self.foot_panel.stop_button.Enable() self.panels = [self.head_panel, self.config_panel, self.foot_panel] def _do_layout(self): sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.head_panel, 0, wx.EXPAND) sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) if self.build_spec['layout_type'] == 'column': self.config_panel = layouts.ColumnLayout( self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) else: self.config_panel = layouts.FlatLayout(self, build_spec=self.build_spec) sizer.Add(self.config_panel, 1, wx.EXPAND) sizer.Add(self.runtime_display, 1, wx.EXPAND) self.runtime_display.Hide() sizer.Add(wx_util.horizontal_rule(self), 0, wx.EXPAND) sizer.Add(self.foot_panel, 0, wx.EXPAND) self.SetSizer(sizer) self.sizer = sizer pub.subscribe(self.myListener, "panelListener") pub.subscribe(self.load_view, events.WINDOW_CHANGE) def myListener(self, message): if message == 'fetch': del self.config_panel def _init_controller(self): self._controller = Controller(base_frame=self, build_spec=self.build_spec) def registerControllers(self): for panel in self.panels: pass def GetOptions(self): return self.config_panel.GetOptions() def GetRequiredArgs(self): return self.config_panel.GetRequiredArgs() def GetOptionalArgs(self): return self.config_panel.GetOptionalArgs() def _init_pages(self): def config(): self.config_panel.Show() self.runtime_display.Hide() def running(): self.config_panel.Hide() self.runtime_display.Show() self.Layout() def success(): running() def error(): running() self.layouts = locals() def load_view(self, view_name=None): self.layouts.get(view_name, lambda: None)() def ManualStart(self): self._controller.manual_restart() def onResize(self, evt): evt.Skip() def onClose(self, evt): if evt.CanVeto(): evt.Veto() pub.send_message(str(events.WINDOW_CLOSE)) def PublishConsoleMsg(self, text): self.runtime_display.cmd_textbox.AppendText(text) def UpdateProgressBar(self, value): pb = self.foot_panel.progress_bar if value < 0: pb.Pulse() else: value = min(int(value), pb.GetRange()) if pb.GetValue() != value: # Windows 7 progress bar animation hack # http://stackoverflow.com/questions/5332616/disabling-net-progressbar-animation-when-changing-value if self.build_spec["disable_progress_bar_animation"] \ and sys.platform.startswith("win"): if pb.GetRange() == value: pb.SetValue(value) pb.SetValue(value - 1) else: pb.SetValue(value + 1) pb.SetValue(value)