46 |
46 |
47 @signal sourceFile(string, int) emitted to open a source file at a line |
47 @signal sourceFile(string, int) emitted to open a source file at a line |
48 """ |
48 """ |
49 sourceFile = pyqtSignal(str, int) |
49 sourceFile = pyqtSignal(str, int) |
50 |
50 |
51 def __init__(self, debugServer, docked, vm, parent=None, |
51 def __init__(self, debugServer, docked, vm, parent=None): |
52 embeddedShell=True, embeddedBrowser=True): |
|
53 """ |
52 """ |
54 Constructor |
53 Constructor |
55 |
54 |
56 @param debugServer reference to the debug server object (DebugServer) |
55 @param debugServer reference to the debug server object (DebugServer) |
57 @param docked flag indicating a dock window |
56 @param docked flag indicating a dock window |
58 @param vm reference to the viewmanager object |
57 @param vm reference to the viewmanager object |
59 @param parent parent widget (QWidget) |
58 @param parent parent widget (QWidget) |
60 @param embeddedShell flag indicating whether the shell should be |
|
61 included. This flag is set to False by those layouts, that have |
|
62 the interpreter shell in a separate window. |
|
63 @param embeddedBrowser flag indicating whether the file browser should |
|
64 be included. This flag is set to False by those layouts, that |
|
65 have the file browser in a separate window or embedded |
|
66 in the project browser instead. |
|
67 """ |
59 """ |
68 super(DebugViewer, self).__init__(parent) |
60 super(DebugViewer, self).__init__(parent) |
69 |
61 |
70 self.debugServer = debugServer |
62 self.debugServer = debugServer |
71 self.debugUI = None |
63 self.debugUI = None |
76 self.__mainLayout.setContentsMargins(0, 0, 0, 0) |
68 self.__mainLayout.setContentsMargins(0, 0, 0, 0) |
77 self.setLayout(self.__mainLayout) |
69 self.setLayout(self.__mainLayout) |
78 |
70 |
79 self.__tabWidget = E5TabWidget() |
71 self.__tabWidget = E5TabWidget() |
80 self.__mainLayout.addWidget(self.__tabWidget) |
72 self.__mainLayout.addWidget(self.__tabWidget) |
81 |
|
82 self.embeddedShell = embeddedShell |
|
83 if embeddedShell: |
|
84 from QScintilla.Shell import ShellAssembly |
|
85 # add the interpreter shell |
|
86 self.shellAssembly = ShellAssembly(debugServer, vm, False) |
|
87 self.shell = self.shellAssembly.shell() |
|
88 index = self.__tabWidget.addTab( |
|
89 self.shellAssembly, |
|
90 UI.PixmapCache.getIcon("shell.png"), '') |
|
91 self.__tabWidget.setTabToolTip(index, self.shell.windowTitle()) |
|
92 |
|
93 self.embeddedBrowser = embeddedBrowser |
|
94 if embeddedBrowser: |
|
95 from UI.Browser import Browser |
|
96 # add the browser |
|
97 self.browser = Browser() |
|
98 index = self.__tabWidget.addTab( |
|
99 self.browser, |
|
100 UI.PixmapCache.getIcon("browser.png"), '') |
|
101 self.__tabWidget.setTabToolTip(index, self.browser.windowTitle()) |
|
102 |
73 |
103 from .VariablesViewer import VariablesViewer |
74 from .VariablesViewer import VariablesViewer |
104 # add the global variables viewer |
75 # add the global variables viewer |
105 self.glvWidget = QWidget() |
76 self.glvWidget = QWidget() |
106 self.glvWidgetVLayout = QVBoxLayout(self.glvWidget) |
77 self.glvWidgetVLayout = QVBoxLayout(self.glvWidget) |
247 self.exceptionLogger, |
218 self.exceptionLogger, |
248 UI.PixmapCache.getIcon("exceptions.png"), '') |
219 UI.PixmapCache.getIcon("exceptions.png"), '') |
249 self.__tabWidget.setTabToolTip( |
220 self.__tabWidget.setTabToolTip( |
250 index, self.exceptionLogger.windowTitle()) |
221 index, self.exceptionLogger.windowTitle()) |
251 |
222 |
252 if self.embeddedShell: |
223 self.__tabWidget.setCurrentWidget(self.glvWidget) |
253 self.__tabWidget.setCurrentWidget(self.shellAssembly) |
|
254 else: |
|
255 if self.embeddedBrowser: |
|
256 self.__tabWidget.setCurrentWidget(self.browser) |
|
257 else: |
|
258 self.__tabWidget.setCurrentWidget(self.glvWidget) |
|
259 |
224 |
260 # add the threads viewer |
225 # add the threads viewer |
261 self.__mainLayout.addWidget(QLabel(self.tr("Threads:"))) |
226 self.__mainLayout.addWidget(QLabel(self.tr("Threads:"))) |
262 self.__threadList = QTreeWidget() |
227 self.__threadList = QTreeWidget() |
263 self.__threadList.setHeaderLabels( |
228 self.__threadList.setHeaderLabels( |
271 self.__threadList.currentItemChanged.connect(self.__threadSelected) |
236 self.__threadList.currentItemChanged.connect(self.__threadSelected) |
272 |
237 |
273 self.__mainLayout.setStretchFactor(self.__tabWidget, 5) |
238 self.__mainLayout.setStretchFactor(self.__tabWidget, 5) |
274 self.__mainLayout.setStretchFactor(self.__threadList, 1) |
239 self.__mainLayout.setStretchFactor(self.__threadList, 1) |
275 |
240 |
276 self.currPage = None |
|
277 self.currentStack = None |
241 self.currentStack = None |
278 self.framenr = 0 |
242 self.framenr = 0 |
279 |
243 |
280 self.debugServer.clientStack.connect(self.handleClientStack) |
244 self.debugServer.clientStack.connect(self.handleClientStack) |
281 |
245 |
309 self.setLocalsFilter() |
273 self.setLocalsFilter() |
310 self.sourceButton.setEnabled(False) |
274 self.sourceButton.setEnabled(False) |
311 self.currentStack = None |
275 self.currentStack = None |
312 self.stackComboBox.clear() |
276 self.stackComboBox.clear() |
313 self.__threadList.clear() |
277 self.__threadList.clear() |
314 if self.embeddedShell: |
278 self.__tabWidget.setCurrentWidget(self.glvWidget) |
315 self.__tabWidget.setCurrentWidget(self.shellAssembly) |
|
316 else: |
|
317 if self.embeddedBrowser: |
|
318 self.__tabWidget.setCurrentWidget(self.browser) |
|
319 else: |
|
320 self.__tabWidget.setCurrentWidget(self.glvWidget) |
|
321 self.breakpointViewer.handleResetUI() |
279 self.breakpointViewer.handleResetUI() |
322 |
|
323 def handleRawInput(self): |
|
324 """ |
|
325 Public slot to handle the switch to the shell in raw input mode. |
|
326 """ |
|
327 if self.embeddedShell: |
|
328 self.saveCurrentPage() |
|
329 self.__tabWidget.setCurrentWidget(self.shellAssembly) |
|
330 |
280 |
331 def initCallStackViewer(self, projectMode): |
281 def initCallStackViewer(self, projectMode): |
332 """ |
282 """ |
333 Public method to initialize the call stack viewer. |
283 Public method to initialize the call stack viewer. |
334 |
284 |
395 if showGlobals: |
345 if showGlobals: |
396 self.__tabWidget.setCurrentWidget(self.glvWidget) |
346 self.__tabWidget.setCurrentWidget(self.glvWidget) |
397 else: |
347 else: |
398 self.__tabWidget.setCurrentWidget(self.lvWidget) |
348 self.__tabWidget.setCurrentWidget(self.lvWidget) |
399 |
349 |
400 def saveCurrentPage(self): |
|
401 """ |
|
402 Public slot to save the current page. |
|
403 """ |
|
404 self.currPage = self.__tabWidget.currentWidget() |
|
405 |
|
406 def restoreCurrentPage(self): |
|
407 """ |
|
408 Public slot to restore the previously saved page. |
|
409 """ |
|
410 if self.currPage is not None: |
|
411 self.__tabWidget.setCurrentWidget(self.currPage) |
|
412 |
|
413 def handleClientStack(self, stack): |
350 def handleClientStack(self, stack): |
414 """ |
351 """ |
415 Public slot to show the call stack of the program being debugged. |
352 Public slot to show the call stack of the program being debugged. |
416 |
353 |
417 @param stack list of tuples with call stack data (file name, |
354 @param stack list of tuples with call stack data (file name, |