def __init__(self, parent=None, id=wx.ID_ANY, title='', app=None): super(RunnerPanel, self).__init__(parent=parent, id=id, pos=wx.DefaultPosition, size=[400,700], style=wx.DEFAULT_FRAME_STYLE, name=title, ) ScriptProcess.__init__(self, app) #self.Bind(wx.EVT_END_PROCESS, self.onProcessEnded) # double buffered better rendering except if retina self.SetDoubleBuffered(parent.IsDoubleBuffered()) expCtrlSize = [500, 150] ctrlSize = [500, 150] self.app = app self.prefs = self.app.prefs.coder self.paths = self.app.prefs.paths self.parent = parent self.serverProcess = None # self.entries is dict of dicts: {filepath: {'index': listCtrlInd}} and may store more info later self.entries = {} self.currentFile = None self.currentProject = None # access from self.currentProject property self.currentSelection = None self.currentExperiment = None # Set ListCtrl for list of tasks self.expCtrl = wx.ListCtrl(self, id=wx.ID_ANY, size=expCtrlSize, style=wx.LC_REPORT | wx.BORDER_NONE | wx.LC_NO_HEADER | wx.LC_SINGLE_SEL) self.expCtrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onItemSelected, self.expCtrl) self.expCtrl.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.onItemDeselected, self.expCtrl) self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick, self.expCtrl) self.expCtrl.InsertColumn(filenameColumn, _translate('File')) self.expCtrl.InsertColumn(folderColumn, _translate('Path')) _style = platebtn.PB_STYLE_DROPARROW | platebtn.PB_STYLE_SQUARE # Alerts self._selectedHiddenAlerts = False # has user manually hidden alerts? self.alertsCtrl = StdOutText(parent=self, size=ctrlSize, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE) self.alertsToggleBtn = self.SizerButton(self, _translate("Alerts"), self.alertsCtrl) self.setAlertsVisible(True) # StdOut self.stdoutCtrl = StdOutText(parent=self, size=ctrlSize, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE) self.stdoutToggleBtn = self.SizerButton(self, _translate("Stdout"), self.stdoutCtrl) self.setStdoutVisible(True) # Box sizers self.upperSizer = wx.BoxSizer(wx.HORIZONTAL) self.upperSizer.Add(self.expCtrl, 1, wx.ALL | wx.EXPAND, 5) # Set main sizer self.mainSizer = wx.BoxSizer(wx.VERTICAL) self.mainSizer.Add(self.upperSizer, 0, wx.EXPAND | wx.ALL, 10) self.mainSizer.Add(self.alertsToggleBtn, 0, wx.TOP | wx.EXPAND, 10) self.mainSizer.Add(self.alertsCtrl, 1, wx.EXPAND | wx.ALL, 10) self.mainSizer.Add(self.stdoutToggleBtn, 0, wx.TOP | wx.EXPAND, 10) self.mainSizer.Add(self.stdoutCtrl, 1, wx.EXPAND | wx.ALL, 10) # Make buttons self.toolbar = self.RunnerToolbar(self) self.upperSizer.Add(self.toolbar, 0, wx.ALL | wx.EXPAND, 15) self.SetSizerAndFit(self.mainSizer) self.SetMinSize(self.Size) # disable the stop button on start self.stopBtn.Disable() self.theme = parent.theme
def onProcessEnded(self): ScriptProcess.onProcessEnded(self) self.stopTask()
def __init__(self, parent=None, id=wx.ID_ANY, title='', app=None): super(RunnerPanel, self).__init__( parent=parent, id=id, pos=wx.DefaultPosition, size=[400, 700], style=wx.DEFAULT_FRAME_STYLE, name=title, ) ScriptProcess.__init__(self, app) self.Bind(wx.EVT_END_PROCESS, self.onProcessEnded) expCtrlSize = [500, 150] ctrlSize = [500, 150] self.app = app self.parent = parent self.serverProcess = None self.currentFile = None self.currentProject = None # access from self.currentProject property self.currentSelection = None self.currentExperiment = None # Set ListCtrl for list of tasks self.expCtrl = wx.ListCtrl(self, id=wx.ID_ANY, size=expCtrlSize, style=wx.LC_REPORT | wx.BORDER_SUNKEN) # Set stdout self.stdoutCtrl = StdOutText(parent=self, size=ctrlSize, style=wx.TE_READONLY | wx.TE_MULTILINE) self.expCtrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onItemSelected, self.expCtrl) self.expCtrl.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.onItemDeselected, self.expCtrl) self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick, self.expCtrl) self.expCtrl.InsertColumn(0, 'File') self.expCtrl.InsertColumn(1, 'Path') # Set buttons plusBtn = self.makeBmpButton(main='addExp32.png') negBtn = self.makeBmpButton(main='removeExp32.png') self.runBtn = runLocalBtn = self.makeBmpButton(main='run32.png') self.stopBtn = stopTaskBtn = self.makeBmpButton(main='stop32.png') self.onlineBtn = self.makeBmpButton(main='globe32.png', emblem='run16.png') self.onlineDebugBtn = self.makeBmpButton(main='globe32.png', emblem='bug16.png') plusBtn.SetToolTip(wx.ToolTip(_translate("Add experiment to list"))) negBtn.SetToolTip(wx.ToolTip( _translate("Remove experiment from list"))) runLocalBtn.SetToolTip( wx.ToolTip(_translate("Run PsychoPy task (Python)"))) stopTaskBtn.SetToolTip(wx.ToolTip(_translate("Stop Task"))) self.onlineBtn.SetToolTip( wx.ToolTip(_translate("Run PsychoJS task from Pavlovia"))) self.onlineDebugBtn.SetToolTip( wx.ToolTip(_translate("Run PsychoJS task in local debug mode"))) # Bind events to buttons self.Bind(wx.EVT_BUTTON, self.addTask, plusBtn) self.Bind(wx.EVT_BUTTON, self.removeTask, negBtn) self.Bind(wx.EVT_BUTTON, self.runLocal, runLocalBtn) self.Bind(wx.EVT_BUTTON, self.stopTask, stopTaskBtn) self.Bind(wx.EVT_BUTTON, self.runOnline, self.onlineBtn) self.Bind(wx.EVT_BUTTON, self.runOnlineDebug, self.onlineDebugBtn) # Box sizers self.upperSizer = wx.BoxSizer(wx.HORIZONTAL) self.buttonSizer = wx.BoxSizer(wx.VERTICAL) self.upperSizer.Add(self.expCtrl, 1, wx.ALL | wx.EXPAND, 5) self.upperSizer.Add(self.buttonSizer, 0, wx.ALL | wx.EXPAND, 5) self.buttonSizer.Add(plusBtn, 0, wx.ALL | wx.ALIGN_TOP, 5) self.buttonSizer.Add(negBtn, 0, wx.ALL | wx.ALIGN_TOP, 5) self.buttonSizer.AddStretchSpacer() self.buttonSizer.AddMany([ (runLocalBtn, 0, wx.ALL, 5), (stopTaskBtn, 0, wx.ALL, 5), (self.onlineBtn, 0, wx.ALL, 5), (self.onlineDebugBtn, 0, wx.ALL, 5), ]) # Set main sizer self.mainSizer = wx.BoxSizer(wx.VERTICAL) self.mainSizer.Add(self.upperSizer, 1, wx.EXPAND | wx.ALL, 10) self.mainSizer.Add(self.stdoutCtrl, 1, wx.EXPAND | wx.ALL, 10) self.stopBtn.Disable() self.SetSizerAndFit(self.mainSizer) self.SetMinSize(self.Size)
def __init__(self, parent=None, id=wx.ID_ANY, title='', app=None): super(RunnerPanel, self).__init__( parent=parent, id=id, pos=wx.DefaultPosition, size=[400, 700], style=wx.DEFAULT_FRAME_STYLE, name=title, ) ScriptProcess.__init__(self, app) self.Bind(wx.EVT_END_PROCESS, self.onProcessEnded) #self.SetBackgroundColour(ThemeMixin.appColors['frame_bg']) #self.SetForegroundColour(ThemeMixin.appColors['txt_default']) # double buffered better rendering except if retina self.SetDoubleBuffered(parent.IsDoubleBuffered()) expCtrlSize = [500, 150] ctrlSize = [500, 150] self.app = app self.prefs = self.app.prefs.coder self.paths = self.app.prefs.paths self.parent = parent self.serverProcess = None self.currentFile = None self.currentProject = None # access from self.currentProject property self.currentSelection = None self.currentExperiment = None # Set ListCtrl for list of tasks self.expCtrl = wx.ListCtrl(self, id=wx.ID_ANY, size=expCtrlSize, style=wx.LC_REPORT | wx.BORDER_NONE | wx.LC_NO_HEADER | wx.LC_SINGLE_SEL) self.expCtrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onItemSelected, self.expCtrl) self.expCtrl.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.onItemDeselected, self.expCtrl) self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick, self.expCtrl) self.expCtrl.InsertColumn(0, 'File') self.expCtrl.InsertColumn(1, 'Path') _style = platebtn.PB_STYLE_DROPARROW | platebtn.PB_STYLE_SQUARE # Alerts self._selectedHiddenAlerts = False # has user manually hidden alerts? self.alertsToggleBtn = PsychopyPlateBtn(self, -1, 'Alerts', style=_style, name='Alerts') # mouse event must be bound like this self.alertsToggleBtn.Bind(wx.EVT_LEFT_DOWN, self.setAlertsVisible) # mouse event must be bound like this self.alertsToggleBtn.Bind(wx.EVT_RIGHT_DOWN, self.setAlertsVisible) self.alertsCtrl = StdOutText(parent=self, size=ctrlSize, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE) self.setAlertsVisible(True) # StdOut self.stdoutToggleBtn = PsychopyPlateBtn(self, -1, 'Stdout', style=_style, name='Stdout') # mouse event must be bound like this self.stdoutToggleBtn.Bind(wx.EVT_LEFT_DOWN, self.setStdoutVisible) # mouse event must be bound like this self.stdoutToggleBtn.Bind(wx.EVT_RIGHT_DOWN, self.setStdoutVisible) self.stdoutCtrl = StdOutText(parent=self, size=ctrlSize, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE) self.setStdoutVisible(True) # Box sizers self.upperSizer = wx.BoxSizer(wx.HORIZONTAL) self.upperSizer.Add(self.expCtrl, 1, wx.ALL | wx.EXPAND, 5) # Set main sizer self.mainSizer = wx.BoxSizer(wx.VERTICAL) self.mainSizer.Add(self.upperSizer, 0, wx.EXPAND | wx.ALL, 10) self.mainSizer.Add(self.alertsToggleBtn, 0, wx.TOP | wx.EXPAND, 10) self.mainSizer.Add(self.alertsCtrl, 1, wx.EXPAND | wx.ALL, 10) self.mainSizer.Add(self.stdoutToggleBtn, 0, wx.TOP | wx.EXPAND, 10) self.mainSizer.Add(self.stdoutCtrl, 1, wx.EXPAND | wx.ALL, 10) self.buttonSizer = wx.BoxSizer(wx.VERTICAL) self.upperSizer.Add(self.buttonSizer, 0, wx.ALL | wx.EXPAND, 5) self.makeButtons() self._applyAppTheme()
def __init__(self, parent=None, id=wx.ID_ANY, title='', app=None): super(RunnerPanel, self).__init__( parent=parent, id=id, pos=wx.DefaultPosition, size=[400, 700], style=wx.DEFAULT_FRAME_STYLE, name=title, ) ScriptProcess.__init__(self, app) self.Bind(wx.EVT_END_PROCESS, self.onProcessEnded) self.SetBackgroundColour(cs['frame_bg']) expCtrlSize = [500, 150] ctrlSize = [500, 150] self.app = app self.prefs = self.app.prefs.coder self.paths = self.app.prefs.paths self.parent = parent self.serverProcess = None self.currentFile = None self.currentProject = None # access from self.currentProject property self.currentSelection = None self.currentExperiment = None # Set ListCtrl for list of tasks self.expCtrl = wx.ListCtrl(self, id=wx.ID_ANY, size=expCtrlSize, style=wx.LC_REPORT | wx.BORDER_NONE | wx.LC_NO_HEADER) self.expCtrl.SetBackgroundColour(cs['tab_active']) self.expCtrl.SetForegroundColour(cs['tab_txt']) self.expCtrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onItemSelected, self.expCtrl) self.expCtrl.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.onItemDeselected, self.expCtrl) self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick, self.expCtrl) self.expCtrl.InsertColumn(0, 'File') self.expCtrl.InsertColumn(1, 'Path') _style = platebtn.PB_STYLE_DROPARROW | platebtn.PB_STYLE_SQUARE # Alerts self._selectedHiddenAlerts = False # has user manually hidden alerts? self.alertsToggleBtn = PsychopyPlateBtn(self, -1, 'Alerts', style=_style, name='Alerts') # mouse event must be bound like this self.alertsToggleBtn.Bind(wx.EVT_LEFT_DOWN, self.setAlertsVisible) # mouse event must be bound like this self.alertsToggleBtn.Bind(wx.EVT_RIGHT_DOWN, self.setAlertsVisible) self.alertsCtrl = StdOutText(parent=self, size=ctrlSize, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE) self.setAlertsVisible(True) # StdOut self.stdoutToggleBtn = PsychopyPlateBtn(self, -1, 'Stdout', style=_style, name='Stdout') # mouse event must be bound like this self.stdoutToggleBtn.Bind(wx.EVT_LEFT_DOWN, self.setStdoutVisible) # mouse event must be bound like this self.stdoutToggleBtn.Bind(wx.EVT_RIGHT_DOWN, self.setStdoutVisible) self.stdoutCtrl = StdOutText(parent=self, size=ctrlSize, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.BORDER_NONE) self.setStdoutVisible(True) # Set buttons plusBtn = self.makeBmpButton(main='addExp32.png') negBtn = self.makeBmpButton(main='removeExp32.png') self.runBtn = runLocalBtn = self.makeBmpButton(main='run32.png') self.stopBtn = stopTaskBtn = self.makeBmpButton(main='stop32.png') self.onlineBtn = self.makeBmpButton(main='globe32.png', emblem='run16.png') self.onlineDebugBtn = self.makeBmpButton(main='globe32.png', emblem='bug16.png') plusBtn.SetToolTip(wx.ToolTip(_translate("Add experiment to list"))) negBtn.SetToolTip(wx.ToolTip( _translate("Remove experiment from list"))) runLocalBtn.SetToolTip( wx.ToolTip(_translate("Run the current script in Python"))) stopTaskBtn.SetToolTip(wx.ToolTip(_translate("Stop Task"))) self.onlineBtn.SetToolTip( wx.ToolTip(_translate("Run PsychoJS task from Pavlovia"))) self.onlineDebugBtn.SetToolTip( wx.ToolTip(_translate("Run PsychoJS task in local debug mode"))) # Bind events to buttons self.Bind(wx.EVT_BUTTON, self.addTask, plusBtn) self.Bind(wx.EVT_BUTTON, self.removeTask, negBtn) self.Bind(wx.EVT_BUTTON, self.runLocal, runLocalBtn) self.Bind(wx.EVT_BUTTON, self.stopTask, stopTaskBtn) self.Bind(wx.EVT_BUTTON, self.runOnline, self.onlineBtn) self.Bind(wx.EVT_BUTTON, self.runOnlineDebug, self.onlineDebugBtn) # Box sizers self.upperSizer = wx.BoxSizer(wx.HORIZONTAL) self.buttonSizer = wx.BoxSizer(wx.VERTICAL) self.upperSizer.Add(self.expCtrl, 1, wx.ALL | wx.EXPAND, 5) self.upperSizer.Add(self.buttonSizer, 0, wx.ALL | wx.EXPAND, 5) self.buttonSizer.Add(plusBtn, 0, wx.ALL | wx.ALIGN_TOP, 5) self.buttonSizer.Add(negBtn, 0, wx.ALL | wx.ALIGN_TOP, 5) self.buttonSizer.AddStretchSpacer() self.buttonSizer.AddMany([ (runLocalBtn, 0, wx.ALL, 5), (stopTaskBtn, 0, wx.ALL, 5), (self.onlineBtn, 0, wx.ALL, 5), (self.onlineDebugBtn, 0, wx.ALL, 5), ]) # Set main sizer self.mainSizer = wx.BoxSizer(wx.VERTICAL) self.mainSizer.Add(self.upperSizer, 0, wx.EXPAND | wx.ALL, 10) self.mainSizer.Add(self.alertsToggleBtn, 0, wx.TOP | wx.EXPAND, 10) self.mainSizer.Add(self.alertsCtrl, 1, wx.EXPAND | wx.ALL, 10) self.mainSizer.Add(self.stdoutToggleBtn, 0, wx.TOP | wx.EXPAND, 10) self.mainSizer.Add(self.stdoutCtrl, 1, wx.EXPAND | wx.ALL, 10) self.stopBtn.Disable() self.SetSizerAndFit(self.mainSizer) self.SetMinSize(self.Size)