Project/CreateDialogCodeDialog.py

changeset 2995
63d874899b8b
parent 2741
d0d7836d0c01
child 3020
542e97d4ecb3
child 3057
10516539f238
--- a/Project/CreateDialogCodeDialog.py	Tue Oct 08 19:46:25 2013 +0200
+++ b/Project/CreateDialogCodeDialog.py	Tue Oct 08 19:47:37 2013 +0200
@@ -9,10 +9,10 @@
 
 import os
 
-from PyQt4.QtCore import QMetaObject, QByteArray, QRegExp, Qt, pyqtSlot, QMetaMethod, \
-    qVersion
-from PyQt4.QtGui import QWidget, QSortFilterProxyModel, QStandardItemModel, QDialog, \
-    QBrush, QStandardItem, QDialogButtonBox, QAction
+from PyQt4.QtCore import QMetaObject, QByteArray, QRegExp, Qt, pyqtSlot, \
+    QMetaMethod, qVersion
+from PyQt4.QtGui import QWidget, QSortFilterProxyModel, QStandardItemModel, \
+    QDialog, QBrush, QStandardItem, QDialogButtonBox, QAction
 from PyQt4 import uic
 
 from E5Gui.E5Application import e5App
@@ -31,9 +31,11 @@
     """
     Class implementing a dialog to generate code for a Qt4/Qt5 dialog.
     """
-    DialogClasses = {"QDialog", "QWidget", "QMainWindow", "QWizard", "QWizardPage",
+    DialogClasses = {
+        "QDialog", "QWidget", "QMainWindow", "QWizard", "QWizardPage",
         "QDockWidget", "QFrame", "QGroupBox", "QScrollArea", "QMdiArea",
-        "QTabWidget", "QToolBox", "QStackedWidget"}
+        "QTabWidget", "QToolBox", "QStackedWidget"
+    }
     Separator = 25 * "="
     
     def __init__(self, formName, project, parent=None):
@@ -55,7 +57,8 @@
         
         self.formFile = formName
         filename, ext = os.path.splitext(self.formFile)
-        self.srcFile = '{0}{1}'.format(filename, self.project.getDefaultSourceExtension())
+        self.srcFile = '{0}{1}'.format(
+            filename, self.project.getDefaultSourceExtension())
         
         self.slotsModel = QStandardItemModel()
         self.proxyModel = QSortFilterProxyModel()
@@ -81,8 +84,8 @@
                 else:
                     exts = None
                 from Utilities import ModuleParser
-                self.__module = ModuleParser.readModule(self.srcFile, extensions=exts,
-                                                        caching=False)
+                self.__module = ModuleParser.readModule(
+                    self.srcFile, extensions=exts, caching=False)
             except ImportError:
                 pass
         
@@ -92,7 +95,8 @@
             classesList = []
             vagueClassesList = []
             for cls in list(self.__module.classes.values()):
-                if not set(cls.super).isdisjoint(CreateDialogCodeDialog.DialogClasses):
+                if not set(cls.super).isdisjoint(
+                        CreateDialogCodeDialog.DialogClasses):
                     classesList.append(cls.name)
                 else:
                     vagueClassesList.append(cls.name)
@@ -100,7 +104,8 @@
             self.classNameCombo.addItems(classesList)
             if vagueClassesList:
                 if classesList:
-                    self.classNameCombo.addItem(CreateDialogCodeDialog.Separator)
+                    self.classNameCombo.addItem(
+                        CreateDialogCodeDialog.Separator)
                 self.classNameCombo.addItems(sorted(vagueClassesList))
         
         if os.path.exists(self.srcFile) and \
@@ -109,8 +114,9 @@
             self.__initError = True
             E5MessageBox.critical(self,
                 self.trUtf8("Create Dialog Code"),
-                self.trUtf8("""The file <b>{0}</b> exists but does not contain"""
-                            """ any classes.""").format(self.srcFile))
+                self.trUtf8(
+                    """The file <b>{0}</b> exists but does not contain"""
+                    """ any classes.""").format(self.srcFile))
         
         self.okButton.setEnabled(self.classNameCombo.count() > 0)
         
@@ -136,8 +142,9 @@
         except (AttributeError, ImportError) as err:
             E5MessageBox.critical(self,
                 self.trUtf8("uic error"),
-                self.trUtf8("""<p>There was an error loading the form <b>{0}</b>.</p>"""
-                            """<p>{1}</p>""").format(self.formFile, str(err)))
+                self.trUtf8(
+                    """<p>There was an error loading the form <b>{0}</b>"""
+                    """.</p><p>{1}</p>""").format(self.formFile, str(err)))
             return ""
         
     def __className(self):
@@ -152,8 +159,9 @@
         except (AttributeError, ImportError) as err:
             E5MessageBox.critical(self,
                 self.trUtf8("uic error"),
-                self.trUtf8("""<p>There was an error loading the form <b>{0}</b>.</p>"""
-                            """<p>{1}</p>""").format(self.formFile, str(err)))
+                self.trUtf8(
+                    """<p>There was an error loading the form <b>{0}</b>"""
+                    """.</p><p>{1}</p>""").format(self.formFile, str(err)))
             return ""
         
     def __signatures(self):
@@ -172,8 +180,9 @@
             for meth in list(cls.methods.values()):
                 if meth.name.startswith("on_"):
                     if meth.pyqtSignature is not None:
-                        sig = ", ".join([bytes(QMetaObject.normalizedType(t)).decode() \
-                                         for t in meth.pyqtSignature.split(",")])
+                        sig = ", ".join(
+                            [bytes(QMetaObject.normalizedType(t)).decode() 
+                             for t in meth.pyqtSignature.split(",")])
                         signatures.append("{0}({1})".format(meth.name, sig))
                     else:
                         signatures.append(meth.name)
@@ -198,7 +207,8 @@
             mapped = mapped.replace("*", "")
             
             # 3. replace QString and QStringList
-            mapped = mapped.replace("QStringList", "list").replace("QString", "str")
+            mapped = mapped.replace("QStringList", "list")\
+                           .replace("QString", "str")
             
             # 4. replace double by float
             mapped = mapped.replace("double", "float")
@@ -233,7 +243,8 @@
                     if metaMethod.methodType() == QMetaMethod.Signal:
                         if qVersion() >= "5.0.0":
                             itm2 = QStandardItem("on_{0}_{1}".format(
-                                name, bytes(metaMethod.methodSignature()).decode()))
+                                name,
+                                bytes(metaMethod.methodSignature()).decode()))
                         else:
                             itm2 = QStandardItem("on_{0}_{1}".format(
                                 name, metaMethod.signature()))
@@ -241,16 +252,19 @@
                         if self.__module is not None:
                             if qVersion() >= "5.0.0":
                                 method = "on_{0}_{1}".format(
-                                    name, bytes(metaMethod.methodSignature()).decode()\
-                                        .split("(")[0])
+                                    name,
+                                    bytes(metaMethod.methodSignature())\
+                                        .decode().split("(")[0])
                             else:
                                 method = "on_{0}_{1}".format(
                                     name, metaMethod.signature().split("(")[0])
                             method2 = "{0}({1})".format(method,
-                                ", ".join([self.__mapType(t)
-                                           for t in metaMethod.parameterTypes()]))
+                                ", ".join(
+                                    [self.__mapType(t)
+                                     for t in metaMethod.parameterTypes()]))
                             
-                            if method2 in signatureList or method in signatureList:
+                            if method2 in signatureList or \
+                                    method in signatureList:
                                 itm2.setFlags(Qt.ItemFlags(Qt.ItemIsEnabled))
                                 itm2.setCheckState(Qt.Checked)
                                 itm2.setForeground(QBrush(Qt.blue))
@@ -267,26 +281,29 @@
                                     parameterNames[index] = \
                                         QByteArray("p{0:d}".format(index))
                         methNamesSig = \
-                            ", ".join([bytes(n).decode() for n in parameterNames])
+                            ", ".join(
+                                [bytes(n).decode() for n in parameterNames])
                         
                         if methNamesSig:
                             if qVersion() >= "5.0.0":
-                                pythonSignature = "on_{0}_{1}(self, {2})".format(
-                                    name,
-                                    bytes(metaMethod.methodSignature()).decode()\
-                                        .split("(")[0],
-                                    methNamesSig)
+                                pythonSignature = \
+                                    "on_{0}_{1}(self, {2})".format(
+                                        name,
+                                        bytes(metaMethod.methodSignature())\
+                                            .decode().split("(")[0],
+                                        methNamesSig)
                             else:
-                                pythonSignature = "on_{0}_{1}(self, {2})".format(
-                                    name,
-                                    metaMethod.signature().split("(")[0],
-                                    methNamesSig)
+                                pythonSignature = \
+                                        "on_{0}_{1}(self, {2})".format(
+                                        name,
+                                        metaMethod.signature().split("(")[0],
+                                        methNamesSig)
                         else:
                             if qVersion() >= "5.0.0":
                                 pythonSignature = "on_{0}_{1}(self)".format(
                                     name,
-                                    bytes(metaMethod.methodSignature()).decode()\
-                                        .split("(")[0])
+                                    bytes(metaMethod.methodSignature())\
+                                        .decode().split("(")[0])
                             else:
                                 pythonSignature = "on_{0}_{1}(self)".format(
                                     name,
@@ -305,8 +322,9 @@
         except (AttributeError, ImportError) as err:
             E5MessageBox.critical(self,
                 self.trUtf8("uic error"),
-                self.trUtf8("""<p>There was an error loading the form <b>{0}</b>.</p>"""
-                            """<p>{1}</p>""").format(self.formFile, str(err)))
+                self.trUtf8(
+                    """<p>There was an error loading the form <b>{0}</b>"""
+                    """.</p><p>{1}</p>""").format(self.formFile, str(err)))
         
     def __generateCode(self):
         """
@@ -342,40 +360,48 @@
             try:
                 if self.project.getProjectLanguage() == "Python2":
                     if self.project.getProjectType() == "PySide":
-                        tmplName = os.path.join(getConfig('ericCodeTemplatesDir'),
-                                                "impl_pyside.py2.tmpl")
+                        tmplName = os.path.join(
+                            getConfig('ericCodeTemplatesDir'),
+                            "impl_pyside.py2.tmpl")
                     elif self.project.getProjectType() == "PyQt5":
-                        tmplName = os.path.join(getConfig('ericCodeTemplatesDir'),
-                                                "impl_pyqt5.py2.tmpl")
+                        tmplName = os.path.join(
+                            getConfig('ericCodeTemplatesDir'),
+                            "impl_pyqt5.py2.tmpl")
                     else:
-                        tmplName = os.path.join(getConfig('ericCodeTemplatesDir'),
-                                                "impl_pyqt.py2.tmpl")
+                        tmplName = os.path.join(
+                            getConfig('ericCodeTemplatesDir'),
+                            "impl_pyqt.py2.tmpl")
                 else:
                     if self.project.getProjectType() == "PySide":
-                        tmplName = os.path.join(getConfig('ericCodeTemplatesDir'),
-                                                "impl_pyside.py.tmpl")
+                        tmplName = os.path.join(
+                            getConfig('ericCodeTemplatesDir'),
+                            "impl_pyside.py.tmpl")
                     elif self.project.getProjectType() == "PyQt5":
-                        tmplName = os.path.join(getConfig('ericCodeTemplatesDir'),
-                                                "impl_pyqt5.py.tmpl")
+                        tmplName = os.path.join(
+                            getConfig('ericCodeTemplatesDir'),
+                            "impl_pyqt5.py.tmpl")
                     else:
-                        tmplName = os.path.join(getConfig('ericCodeTemplatesDir'),
-                                                "impl_pyqt.py.tmpl")
+                        tmplName = os.path.join(
+                            getConfig('ericCodeTemplatesDir'),
+                            "impl_pyqt.py.tmpl")
                 tmplFile = open(tmplName, 'r', encoding="utf-8")
                 template = tmplFile.read()
                 tmplFile.close()
             except IOError as why:
                 E5MessageBox.critical(self,
                     self.trUtf8("Code Generation"),
-                    self.trUtf8("""<p>Could not open the code template file "{0}".</p>"""
-                                """<p>Reason: {1}</p>""")\
+                    self.trUtf8(
+                        """<p>Could not open the code template file"""
+                        """ "{0}".</p><p>Reason: {1}</p>""")\
                         .format(tmplName, str(why)))
                 return
             
             objName = self.__objectName()
             if objName:
                 template = template\
-                    .replace("$FORMFILE$",
-                             os.path.splitext(os.path.basename(self.formFile))[0])\
+                    .replace(
+                        "$FORMFILE$",
+                        os.path.splitext(os.path.basename(self.formFile))[0])\
                     .replace("$FORMCLASS$", objName)\
                     .replace("$CLASSNAME$", self.classNameCombo.currentText())\
                     .replace("$SUPERCLASS$", self.__className())
@@ -399,8 +425,9 @@
             except IOError as why:
                 E5MessageBox.critical(self,
                     self.trUtf8("Code Generation"),
-                    self.trUtf8("""<p>Could not open the source file "{0}".</p>"""
-                                """<p>Reason: {1}</p>""")\
+                    self.trUtf8(
+                        """<p>Could not open the source file "{0}".</p>"""
+                        """<p>Reason: {1}</p>""")\
                         .format(self.srcFile, str(why)))
                 return
             
@@ -444,12 +471,14 @@
                     slotsCode.append('{0}\n'.format(indentStr))
                     slotsCode.append('{0}{1}\n'.format(
                         indentStr,
-                        pyqtSignatureFormat.format(child.data(pyqtSignatureRole))))
+                        pyqtSignatureFormat.format(
+                            child.data(pyqtSignatureRole))))
                     slotsCode.append('{0}def {1}:\n'.format(
                         indentStr, child.data(pythonSignatureRole)))
                     slotsCode.append('{0}"""\n'.format(indentStr * 2))
-                    slotsCode.append('{0}Slot documentation goes here.\n'.format(
-                        indentStr * 2))
+                    slotsCode.append(
+                        '{0}Slot documentation goes here.\n'.format(
+                            indentStr * 2))
                     slotsCode.append('{0}"""\n'.format(indentStr * 2))
                     slotsCode.append('{0}# {1}: not implemented yet\n'.format(
                         indentStr * 2, "TODO"))
@@ -488,7 +517,8 @@
         
         @param index index of the activated item (integer)
         """
-        if self.classNameCombo.currentText() == CreateDialogCodeDialog.Separator:
+        if (self.classNameCombo.currentText() == 
+                CreateDialogCodeDialog.Separator):
             self.okButton.setEnabled(False)
             self.filterEdit.clear()
             self.slotsModel.clear()
@@ -531,7 +561,8 @@
         """
         Private slot to handle the buttonBox clicked signal.
         
-        @param button reference to the button that was clicked (QAbstractButton)
+        @param button reference to the button that was clicked
+            (QAbstractButton)
         """
         if button == self.okButton:
             self.__generateCode()

eric ide

mercurial