def __init__(self, editor, filename=None, slave_mode=1): wx.Frame.__init__(self, editor, -1, _('Debugger'), style=wx.DEFAULT_FRAME_STYLE | wx.CLIP_CHILDREN | Preferences.childFrameStyle) self.winConfOption = 'debugger' self.loadDims() self.editor = editor self.running = 0 self.slave_mode = slave_mode if filename: self.setDebugFile(filename) else: self.filename = '' self.SetIcon(IS.load('Images/Icons/Debug.ico')) self.viewsImgLst = wx.ImageList(16, 16) self.viewsImgLst.Add(IS.load('Images/Debug/Stack.png')) self.viewsImgLst.Add(IS.load('Images/Debug/Breakpoints.png')) self.viewsImgLst.Add(IS.load('Images/Debug/Watches.png')) self.viewsImgLst.Add(IS.load('Images/Debug/Locals.png')) self.viewsImgLst.Add(IS.load('Images/Debug/Globals.png')) self.viewsImgLst.Add(IS.load('Images/Debug/Output.png')) self.invalidatePanes() self.sb = DebugStatusBar(self) self.SetStatusBar(self.sb) self.toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER | flatTools) self.SetToolBar(self.toolbar) self.runId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/Debug.png', _('Debug/Continue - %s') % keyDefs['Debug'][2], self.OnDebug) #, runs in debugger, stops at breaks and exceptions' self.runFullSpdId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/DebugFullSpeed.png', _('Debug/Continue full speed'), self.OnDebugFullSpeed ) #'stops only at hard (code) breaks and exceptions' self.stepId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/Step.png', _('Step - %s') % keyDefs['DebugStep'][2], self.OnStep) self.overId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/Over.png', _('Over - %s') % keyDefs['DebugOver'][2], self.OnOver) self.outId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/Out.png', _('Out - %s') % keyDefs['DebugOut'][2], self.OnOut) self.jumpId = -1 if sys.version_info[:2] >= (2, 3): self.jumpId = Utils.AddToolButtonBmpIS(self, self.toolbar, 'Images/Debug/Jump.png', _('Jump to line'), self.OnJump) self.pauseId = Utils.AddToolButtonBmpIS(self, self.toolbar, 'Images/Debug/Pause.png', _('Pause'), self.OnPause) self.stopId = Utils.AddToolButtonBmpIS(self, self.toolbar, 'Images/Debug/Stop.png', _('Stop'), self.OnStop) self.toolbar.AddSeparator() self.sourceTraceId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/SourceTrace-Off.png', _('Trace in source'), self.OnSourceTrace, '1') self.debugBrowseId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/DebugBrowse.png', _('Debug browsing'), self.OnDebugBrowse, '1') if Preferences.psPythonShell == 'Shell': self.shellNamespaceId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/ShellDebug.png', _('Eval in shell'), self.OnDebugNamespace, '1') else: self.shellNamespaceId = -1 self.toolbar.AddSeparator() self.pathMappingsId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/PathMapping.png', _('Edit client/server path mappings...'), self.OnPathMappings) self.splitOrientId = Utils.AddToolButtonBmpIS( self, self.toolbar, 'Images/Debug/SplitOrient.png', _('Toggle split orientation'), self.OnToggleSplitOrient) self.SetAcceleratorTable( wx.AcceleratorTable([ (keyDefs['Debug'][0], keyDefs['Debug'][1], self.runId), (keyDefs['DebugStep'][0], keyDefs['DebugStep'][1], self.stepId), (keyDefs['DebugOver'][0], keyDefs['DebugOver'][1], self.overId), (keyDefs['DebugOut'][0], keyDefs['DebugOut'][1], self.outId) ])) self.toolbar.Realize() self.toolbar.ToggleTool(self.sourceTraceId, True) self.toolbar.ToggleTool(self.debugBrowseId, False) self.splitter = wx.SplitterWindow(self, -1, style=wx.SP_NOBORDER | Preferences.splitterStyle) (stackImgIdx, breaksImgIdx, watchesImgIdx, localsImgIdx, globalsImgIdx) = range(5) # Create a Notebook self.nbTop = wx.Notebook(self.splitter, wxID_TOPPAGECHANGED) self.nbTop.SetImageList(self.viewsImgLst) self.stackView = StackViewCtrl(self.nbTop, None, self) self.nbTop.AddPage(self.stackView, _('Stack'), imageId=stackImgIdx) self.breakpts = BreakViewCtrl(self.nbTop, self) self.nbTop.AddPage(self.breakpts, _('Breakpoints'), imageId=breaksImgIdx) # Create a Notebook self.nbBottom = wx.Notebook(self.splitter, wxID_PAGECHANGED, style=wx.CLIP_CHILDREN) self.nbBottom.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChange, id=wxID_PAGECHANGED) self.nbBottom.SetImageList(self.viewsImgLst) self.watches = WatchViewCtrl(self.nbBottom, self.viewsImgLst, self) self.nbBottom.AddPage(self.watches, _('Watches'), imageId=watchesImgIdx) self.locs = NamespaceViewCtrl(self.nbBottom, self, 1, 'local') self.nbBottom.AddPage(self.locs, _('Locals'), imageId=localsImgIdx) self.globs = NamespaceViewCtrl(self.nbBottom, self, 0, 'global') self.nbBottom.AddPage(self.globs, _('Globals'), imageId=globalsImgIdx) self.splitter.SetMinimumPaneSize(40) self.splitter.SplitHorizontally(self.nbTop, self.nbBottom) self.splitter.SetSashPosition(175) self.splitter.SetSplitMode(wx.SPLIT_HORIZONTAL) self.mlc = 0 self.frame = None self.lastStepView = None self.lastStepLineno = -1 self.stepping_enabled = 1 self.setParams([]) self.setServerClientPaths([]) self.Bind(EVT_DEBUGGER_OK, self.OnDebuggerOk, id=self.GetId()) self.Bind(EVT_DEBUGGER_EXC, self.OnDebuggerException, id=self.GetId()) self.Bind(EVT_DEBUGGER_STOPPED, self.OnDebuggerStopped, id=self.GetId()) # used to indicate when the debugger start, # would be better if there was a start event in addition to the OK event self._pid = None self._erroutFrm = self.editor.erroutFrm self.stream_timer = wx.PyTimer(self.OnStreamTimer) self.stream_timer.Start(100) self.Bind(wx.EVT_MENU_HIGHLIGHT_ALL, self.OnToolOver) self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)