Debugger/StartDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
diff -r 000000000000 -r de9c2efb9d02 Debugger/StartDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Debugger/StartDialog.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,212 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2002 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Start Program dialog.
+"""
+
+import os
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from E4Gui.E4Completers import E4DirCompleter
+
+import Utilities
+import Preferences
+
+class StartDialog(QDialog):
+    """
+    Class implementing the Start Program dialog.
+    
+    It implements a dialog that is used to start an
+    application for debugging. It asks the user to enter
+    the commandline parameters, the working directory and
+    whether exception reporting should be disabled.
+    """
+    def __init__(self, caption, argvList, wdList, envList, exceptions, parent = None,
+        type = 0, modfuncList = None, tracePython = False, autoClearShell = True, 
+        autoContinue = True, autoFork = False, forkChild = False):
+        """
+        Constructor
+        
+        @param caption the caption to be displayed (string)
+        @param argvList history list of commandline arguments (list of strings)
+        @param wdList history list of working directories (list of strings)
+        @param envList history list of environment settings (list of strings)
+        @param exceptions exception reporting flag (boolean)
+        @param parent parent widget of this dialog (QWidget)
+        @param type type of the start dialog
+                <ul>
+                <li>0 = start debug dialog</li>
+                <li>1 = start run dialog</li>
+                <li>2 = start coverage dialog</li>
+                <li>3 = start profile dialog</li>
+                </ul>
+        @keyparam modfuncList history list of module functions (list of strings)
+        @keyparam tracePython flag indicating if the Python library should 
+            be traced as well (boolean)
+        @keyparam autoClearShell flag indicating, that the interpreter window should
+            be cleared automatically (boolean)
+        @keyparam autoContinue flag indicating, that the debugger should not stop at
+            the first executable line (boolean)
+        @keyparam autoFork flag indicating the automatic fork mode (boolean)
+        @keyparam forkChild flag indicating to debug the child after forking (boolean)
+        """
+        QDialog.__init__(self, parent)
+        self.setModal(True)
+        
+        self.type = type
+        if type == 0:
+            from Ui_StartDebugDialog import Ui_StartDebugDialog
+            self.ui = Ui_StartDebugDialog()
+        elif type == 1:
+            from Ui_StartRunDialog import Ui_StartRunDialog
+            self.ui = Ui_StartRunDialog()
+        elif type == 2:
+            from Ui_StartCoverageDialog import Ui_StartCoverageDialog
+            self.ui = Ui_StartCoverageDialog()
+        elif type == 3:
+            from Ui_StartProfileDialog import Ui_StartProfileDialog
+            self.ui = Ui_StartProfileDialog()
+        self.ui.setupUi(self)
+        
+        self.clearButton = self.ui.buttonBox.addButton(\
+            self.trUtf8("Clear Histories"), QDialogButtonBox.ActionRole)
+        
+        self.workdirCompleter = E4DirCompleter(self.ui.workdirCombo)
+        
+        self.setWindowTitle(caption)
+        self.ui.cmdlineCombo.clear()
+        self.ui.cmdlineCombo.addItems(argvList)
+        if len(argvList) > 0:
+            self.ui.cmdlineCombo.setCurrentIndex(0)
+        self.ui.workdirCombo.clear()
+        self.ui.workdirCombo.addItems(wdList)
+        if len(wdList) > 0:
+            self.ui.workdirCombo.setCurrentIndex(0)
+        self.ui.environmentCombo.clear()
+        self.ui.environmentCombo.addItems(envList)
+        self.ui.exceptionCheckBox.setChecked(exceptions)
+        self.ui.clearShellCheckBox.setChecked(autoClearShell)
+        self.ui.consoleCheckBox.setEnabled(
+            Preferences.getDebugger("ConsoleDbgCommand") != "")
+        self.ui.consoleCheckBox.setChecked(False)
+        
+        if type == 0:        # start debug dialog
+            self.ui.tracePythonCheckBox.setChecked(tracePython)
+            self.ui.tracePythonCheckBox.show()
+            self.ui.autoContinueCheckBox.setChecked(autoContinue)
+            self.ui.forkModeCheckBox.setChecked(autoFork)
+            self.ui.forkChildCheckBox.setChecked(forkChild)
+        
+        if type == 3:   # start coverage or profile dialog
+            self.ui.eraseCheckBox.setChecked(True)
+        
+        self.__clearHistoryLists = False
+        
+    @pyqtSlot()
+    def on_dirButton_clicked(self):
+        """
+        Private method used to open a directory selection dialog.
+        """
+        cwd = self.ui.workdirCombo.currentText()
+        d = QFileDialog.getExistingDirectory(\
+            self,
+            self.trUtf8("Working directory"),
+            cwd,
+            QFileDialog.Options(QFileDialog.ShowDirsOnly))
+            
+        if d:
+            self.ui.workdirCombo.setEditText(Utilities.toNativeSeparators(d))
+        
+    def on_modFuncCombo_editTextChanged(self):
+        """
+        Private slot to enable/disable the OK button.
+        """
+        self.ui.buttonBox.button(QDialogButtonBox.Ok).setDisabled(\
+            self.ui.modFuncCombo.currentText() == "")
+        
+    def getData(self):
+        """
+        Public method to retrieve the data entered into this dialog.
+        
+        @return a tuple of argv (string), workdir (string), environment (string),
+            exceptions flag (boolean), clear interpreter flag (boolean),
+            clear histories flag (boolean) and run in console flag (boolean)
+        """
+        cmdLine = self.ui.cmdlineCombo.currentText()
+        workdir = self.ui.workdirCombo.currentText()
+        environment = self.ui.environmentCombo.currentText()
+        
+        return (cmdLine, 
+                workdir,
+                environment,
+                self.ui.exceptionCheckBox.isChecked(),
+                self.ui.clearShellCheckBox.isChecked(), 
+                self.__clearHistoryLists, 
+                self.ui.consoleCheckBox.isChecked())
+        
+    def getDebugData(self):
+        """
+        Public method to retrieve the debug related data entered into this dialog.
+        
+        @return a tuple of a flag indicating, if the Python library should be traced
+            as well, a flag indicating, that the debugger should not stop at the
+            first executable line (boolean), a flag indicating, that the debugger
+            should fork automatically (boolean) and a flag indicating, that the 
+            debugger should debug the child process after forking automatically (boolean)
+        """
+        if self.type == 0:
+            return (self.ui.tracePythonCheckBox.isChecked(),
+                    self.ui.autoContinueCheckBox.isChecked(),
+                    self.ui.forkModeCheckBox.isChecked(), 
+                    self.ui.forkChildCheckBox.isChecked())
+        
+    def getCoverageData(self):
+        """
+        Public method to retrieve the coverage related data entered into this dialog.
+        
+        @return flag indicating erasure of coverage info (boolean)
+        """
+        if self.type == 2:
+            return self.ui.eraseCheckBox.isChecked()
+        
+    def getProfilingData(self):
+        """
+        Public method to retrieve the profiling related data entered into this dialog.
+        
+        @return flag indicating erasure of profiling info (boolean)
+        """
+        if self.type == 3:
+            return self.ui.eraseCheckBox.isChecked()
+        
+    def __clearHistories(self):
+        """
+        Private slot to clear the combo boxes lists and record a flag to
+        clear the lists.
+        """
+        self.__clearHistoryLists = True
+        
+        cmdLine = self.ui.cmdlineCombo.currentText()
+        workdir = self.ui.workdirCombo.currentText()
+        environment = self.ui.environmentCombo.currentText()
+        
+        self.ui.cmdlineCombo.clear()
+        self.ui.workdirCombo.clear()
+        self.ui.environmentCombo.clear()
+        
+        self.ui.cmdlineCombo.addItem(cmdLine)
+        self.ui.workdirCombo.addItem(workdir)
+        self.ui.environmentCombo.addItem(environment)
+        
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot called by a button of the button box clicked.
+        
+        @param button button that was clicked (QAbstractButton)
+        """
+        if button == self.clearButton:
+            self.__clearHistories()

eric ide

mercurial