CreateDialogCodeDialog: changed logic to always call the external UI loader in order to avoid clashes with eric classes and packages.

Fri, 18 Jan 2019 19:45:25 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 18 Jan 2019 19:45:25 +0100
changeset 6661
19fcbb7be3da
parent 6660
fd767acf3e98
child 6662
0002926e71d3

CreateDialogCodeDialog: changed logic to always call the external UI loader in order to avoid clashes with eric classes and packages.

Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Project.CreateDialogCodeDialog.html file | annotate | diff | comparison | revisions
Project/CreateDialogCodeDialog.py file | annotate | diff | comparison | revisions
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Fri Jan 18 19:01:33 2019 +0100
+++ b/Documentation/Help/source.qhp	Fri Jan 18 19:45:25 2019 +0100
@@ -3513,16 +3513,13 @@
       <keyword name="CreateDialogCodeDialog (Constructor)" id="CreateDialogCodeDialog (Constructor)" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__init__" />
       <keyword name="CreateDialogCodeDialog (Module)" id="CreateDialogCodeDialog (Module)" ref="eric6.Project.CreateDialogCodeDialog.html" />
       <keyword name="CreateDialogCodeDialog.__className" id="CreateDialogCodeDialog.__className" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__className" />
-      <keyword name="CreateDialogCodeDialog.__classNameExternal" id="CreateDialogCodeDialog.__classNameExternal" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__classNameExternal" />
       <keyword name="CreateDialogCodeDialog.__generateCode" id="CreateDialogCodeDialog.__generateCode" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__generateCode" />
       <keyword name="CreateDialogCodeDialog.__generatePythonCode" id="CreateDialogCodeDialog.__generatePythonCode" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__generatePythonCode" />
       <keyword name="CreateDialogCodeDialog.__mapType" id="CreateDialogCodeDialog.__mapType" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__mapType" />
       <keyword name="CreateDialogCodeDialog.__objectName" id="CreateDialogCodeDialog.__objectName" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__objectName" />
-      <keyword name="CreateDialogCodeDialog.__objectNameExternal" id="CreateDialogCodeDialog.__objectNameExternal" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__objectNameExternal" />
       <keyword name="CreateDialogCodeDialog.__runUicLoadUi" id="CreateDialogCodeDialog.__runUicLoadUi" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__runUicLoadUi" />
       <keyword name="CreateDialogCodeDialog.__signatures" id="CreateDialogCodeDialog.__signatures" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__signatures" />
       <keyword name="CreateDialogCodeDialog.__updateSlotsModel" id="CreateDialogCodeDialog.__updateSlotsModel" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__updateSlotsModel" />
-      <keyword name="CreateDialogCodeDialog.__updateSlotsModelExternal" id="CreateDialogCodeDialog.__updateSlotsModelExternal" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__updateSlotsModelExternal" />
       <keyword name="CreateDialogCodeDialog.initError" id="CreateDialogCodeDialog.initError" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.initError" />
       <keyword name="CreateDialogCodeDialog.on_buttonBox_clicked" id="CreateDialogCodeDialog.on_buttonBox_clicked" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.on_buttonBox_clicked" />
       <keyword name="CreateDialogCodeDialog.on_classNameCombo_activated" id="CreateDialogCodeDialog.on_classNameCombo_activated" ref="eric6.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.on_classNameCombo_activated" />
--- a/Documentation/Source/eric6.Project.CreateDialogCodeDialog.html	Fri Jan 18 19:01:33 2019 +0100
+++ b/Documentation/Source/eric6.Project.CreateDialogCodeDialog.html	Fri Jan 18 19:45:25 2019 +0100
@@ -63,9 +63,6 @@
 <td><a href="#CreateDialogCodeDialog.__className">__className</a></td>
 <td>Private method to get the class name of a form.</td>
 </tr><tr>
-<td><a href="#CreateDialogCodeDialog.__classNameExternal">__classNameExternal</a></td>
-<td>Private method to get the class name of a form via an external interpreter.</td>
-</tr><tr>
 <td><a href="#CreateDialogCodeDialog.__generateCode">__generateCode</a></td>
 <td>Private slot to generate the code as requested by the user.</td>
 </tr><tr>
@@ -78,9 +75,6 @@
 <td><a href="#CreateDialogCodeDialog.__objectName">__objectName</a></td>
 <td>Private method to get the object name of a form.</td>
 </tr><tr>
-<td><a href="#CreateDialogCodeDialog.__objectNameExternal">__objectNameExternal</a></td>
-<td>Private method to get the object name of a form via an external interpreter.</td>
-</tr><tr>
 <td><a href="#CreateDialogCodeDialog.__runUicLoadUi">__runUicLoadUi</a></td>
 <td>Private method to run the UicLoadUi.py script with the given command and return the output.</td>
 </tr><tr>
@@ -90,9 +84,6 @@
 <td><a href="#CreateDialogCodeDialog.__updateSlotsModel">__updateSlotsModel</a></td>
 <td>Private slot to update the slots tree display.</td>
 </tr><tr>
-<td><a href="#CreateDialogCodeDialog.__updateSlotsModelExternal">__updateSlotsModelExternal</a></td>
-<td>Private slot to update the slots tree display getting the data via an external interpreter.</td>
-</tr><tr>
 <td><a href="#CreateDialogCodeDialog.initError">initError</a></td>
 <td>Public method to determine, if there was an initialzation error.</td>
 </tr><tr>
@@ -144,22 +135,6 @@
 <dd>
 str
 </dd>
-</dl><a NAME="CreateDialogCodeDialog.__classNameExternal" ID="CreateDialogCodeDialog.__classNameExternal"></a>
-<h4>CreateDialogCodeDialog.__classNameExternal</h4>
-<b>__classNameExternal</b>(<i></i>)
-<p>
-        Private method to get the class name of a form via an external
-        interpreter.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-class name
-</dd>
-</dl><dl>
-<dt>Return Type:</dt>
-<dd>
-str
-</dd>
 </dl><a NAME="CreateDialogCodeDialog.__generateCode" ID="CreateDialogCodeDialog.__generateCode"></a>
 <h4>CreateDialogCodeDialog.__generateCode</h4>
 <b>__generateCode</b>(<i></i>)
@@ -201,22 +176,6 @@
 <dd>
 str
 </dd>
-</dl><a NAME="CreateDialogCodeDialog.__objectNameExternal" ID="CreateDialogCodeDialog.__objectNameExternal"></a>
-<h4>CreateDialogCodeDialog.__objectNameExternal</h4>
-<b>__objectNameExternal</b>(<i></i>)
-<p>
-        Private method to get the object name of a form via an external
-        interpreter.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-object name
-</dd>
-</dl><dl>
-<dt>Return Type:</dt>
-<dd>
-str
-</dd>
 </dl><a NAME="CreateDialogCodeDialog.__runUicLoadUi" ID="CreateDialogCodeDialog.__runUicLoadUi"></a>
 <h4>CreateDialogCodeDialog.__runUicLoadUi</h4>
 <b>__runUicLoadUi</b>(<i>command</i>)
@@ -253,12 +212,6 @@
 <b>__updateSlotsModel</b>(<i></i>)
 <p>
         Private slot to update the slots tree display.
-</p><a NAME="CreateDialogCodeDialog.__updateSlotsModelExternal" ID="CreateDialogCodeDialog.__updateSlotsModelExternal"></a>
-<h4>CreateDialogCodeDialog.__updateSlotsModelExternal</h4>
-<b>__updateSlotsModelExternal</b>(<i></i>)
-<p>
-        Private slot to update the slots tree display getting the data via an
-        external interpreter.
 </p><a NAME="CreateDialogCodeDialog.initError" ID="CreateDialogCodeDialog.initError"></a>
 <h4>CreateDialogCodeDialog.initError</h4>
 <b>initError</b>(<i></i>)
--- a/Project/CreateDialogCodeDialog.py	Fri Jan 18 19:01:33 2019 +0100
+++ b/Project/CreateDialogCodeDialog.py	Fri Jan 18 19:45:25 2019 +0100
@@ -13,15 +13,14 @@
 except NameError:
     pass
 
+import sys
 import os
 import json
-import xml.etree.ElementTree
 
-from PyQt5.QtCore import QMetaObject, QByteArray, QRegExp, Qt, pyqtSlot, \
-    QMetaMethod, QSortFilterProxyModel, QProcess, QProcessEnvironment
+from PyQt5.QtCore import pyqtSlot, Qt, QMetaObject, QRegExp, \
+    QSortFilterProxyModel, QProcess, QProcessEnvironment
 from PyQt5.QtGui import QStandardItemModel, QBrush, QStandardItem
-from PyQt5.QtWidgets import QWidget, QDialog, QDialogButtonBox, QAction
-from PyQt5 import uic
+from PyQt5.QtWidgets import QDialog, QDialogButtonBox
 
 
 from E5Gui.E5Application import e5App
@@ -32,8 +31,6 @@
 
 from eric6config import getConfig
 
-from Globals import qVersionTuple
-
 
 pyqtSignatureRole = Qt.UserRole + 1
 pythonSignatureRole = Qt.UserRole + 2
@@ -162,6 +159,9 @@
         interpreter = venvManager.getVirtualenvInterpreter(venvName)
         execPath = venvManager.getVirtualenvExecPath(venvName)
         
+        if not interpreter:
+            interpreter = sys.executable
+        
         env = QProcessEnvironment.systemEnvironment()
         if execPath:
             if env.contains("PATH"):
@@ -215,10 +215,9 @@
         
         return uicText, ok
     
-    def __objectNameExternal(self):
+    def __objectName(self):
         """
-        Private method to get the object name of a form via an external
-        interpreter.
+        Private method to get the object name of a form.
         
         @return object name
         @rtype str
@@ -231,34 +230,9 @@
         
         return objectName
     
-    def __objectName(self):
-        """
-        Private method to get the object name of a form.
-        
-        @return object name
-        @rtype str
+    def __className(self):
         """
-        if self.project.getDebugProperty("VIRTUALENV"):
-            return self.__objectNameExternal()
-        else:
-            try:
-                dlg = uic.loadUi(
-                    self.formFile, package=self.project.getProjectPath())
-                return dlg.objectName()
-            except (AttributeError, ImportError,
-                    xml.etree.ElementTree.ParseError) as err:
-                E5MessageBox.critical(
-                    self,
-                    self.tr("uic error"),
-                    self.tr(
-                        """<p>There was an error loading the form <b>{0}</b>"""
-                        """.</p><p>{1}</p>""").format(self.formFile, str(err)))
-                return ""
-    
-    def __classNameExternal(self):
-        """
-        Private method to get the class name of a form via an external
-        interpreter.
+        Private method to get the class name of a form.
         
         @return class name
         @rtype str
@@ -271,30 +245,6 @@
         
         return className
     
-    def __className(self):
-        """
-        Private method to get the class name of a form.
-        
-        @return class name
-        @rtype str
-        """
-        if self.project.getDebugProperty("VIRTUALENV"):
-            return self.__classNameExternal()
-        else:
-            try:
-                dlg = uic.loadUi(
-                    self.formFile, package=self.project.getProjectPath())
-                return dlg.metaObject().className()
-            except (AttributeError, ImportError,
-                    xml.etree.ElementTree.ParseError) as err:
-                E5MessageBox.critical(
-                    self,
-                    self.tr("uic error"),
-                    self.tr(
-                        """<p>There was an error loading the form <b>{0}</b>"""
-                        """.</p><p>{1}</p>""").format(self.formFile, str(err)))
-                return ""
-    
     def __signatures(self):
         """
         Private slot to get the signatures.
@@ -346,11 +296,12 @@
         
         return mapped
     
-    def __updateSlotsModelExternal(self):
+    def __updateSlotsModel(self):
         """
-        Private slot to update the slots tree display getting the data via an
-        external interpreter.
+        Private slot to update the slots tree display.
         """
+        self.filterEdit.clear()
+        
         output, ok = self.__runUicLoadUi("signatures")
         if ok and output:
             objectsList = json.loads(output.strip())
@@ -396,147 +347,6 @@
                     itm2.setCheckState(Qt.Unchecked)
             
             self.slotsView.sortByColumn(0, Qt.AscendingOrder)
-    
-    def __updateSlotsModel(self):
-        """
-        Private slot to update the slots tree display.
-        """
-        self.filterEdit.clear()
-        
-        if self.project.getDebugProperty("VIRTUALENV"):
-            self.__updateSlotsModelExternal()
-        else:
-            try:
-                dlg = uic.loadUi(
-                    self.formFile, package=self.project.getProjectPath())
-                objects = dlg.findChildren(QWidget) + dlg.findChildren(QAction)
-                
-                signatureList = self.__signatures()
-                
-                self.slotsModel.clear()
-                self.slotsModel.setHorizontalHeaderLabels([""])
-                for obj in objects:
-                    name = obj.objectName()
-                    if not name or name.startswith("qt_"):
-                        # ignore un-named or internal objects
-                        continue
-                    
-                    metaObject = obj.metaObject()
-                    className = metaObject.className()
-                    itm = QStandardItem("{0} ({1})".format(name, className))
-                    self.slotsModel.appendRow(itm)
-                    for index in range(metaObject.methodCount()):
-                        metaMethod = metaObject.method(index)
-                        if metaMethod.methodType() == QMetaMethod.Signal:
-                            if qVersionTuple() >= (5, 0, 0):
-                                itm2 = QStandardItem("on_{0}_{1}".format(
-                                    name,
-                                    bytes(metaMethod.methodSignature())
-                                    .decode()
-                                ))
-                            else:
-                                itm2 = QStandardItem("on_{0}_{1}".format(
-                                    name, metaMethod.signature()
-                                ))
-                            itm.appendRow(itm2)
-                            if self.__module is not None:
-                                if qVersionTuple() >= (5, 0, 0):
-                                    method = "on_{0}_{1}".format(
-                                        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()
-                                    ])
-                                )
-                                
-                                if method2 in signatureList or \
-                                        method in signatureList:
-                                    itm2.setFlags(
-                                        Qt.ItemFlags(Qt.ItemIsEnabled))
-                                    itm2.setCheckState(Qt.Checked)
-                                    itm2.setForeground(QBrush(Qt.blue))
-                                    continue
-                            
-                            returnType = self.__mapType(
-                                metaMethod.typeName().encode())
-                            if returnType == 'void':
-                                returnType = ""
-                            parameterTypesList = [
-                                self.__mapType(t)
-                                for t in metaMethod.parameterTypes()]
-                            pyqtSignature = ", ".join(parameterTypesList)
-                            
-                            parameterNames = metaMethod.parameterNames()
-                            if parameterNames:
-                                for index in range(len(parameterNames)):
-                                    if not parameterNames[index]:
-                                        parameterNames[index] = \
-                                            QByteArray("p{0:d}".format(index)
-                                                       .encode("utf-8"))
-                            parameterNamesList = [bytes(n).decode()
-                                                  for n in parameterNames]
-                            methNamesSig = ", ".join(parameterNamesList)
-                            
-                            if methNamesSig:
-                                if qVersionTuple() >= (5, 0, 0):
-                                    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)
-                            else:
-                                if qVersionTuple() >= (5, 0, 0):
-                                    pythonSignature = "on_{0}_{1}(self)"\
-                                        .format(
-                                            name,
-                                            bytes(metaMethod.methodSignature())
-                                            .decode().split("(")[0])
-                                else:
-                                    pythonSignature = "on_{0}_{1}(self)"\
-                                        .format(
-                                            name,
-                                            metaMethod.signature().split(
-                                                "(")[0])
-                            itm2.setData(pyqtSignature, pyqtSignatureRole)
-                            itm2.setData(pythonSignature, pythonSignatureRole)
-                            itm2.setData(returnType, returnTypeRole)
-                            itm2.setData(parameterTypesList,
-                                         parameterTypesListRole)
-                            itm2.setData(parameterNamesList,
-                                         parameterNamesListRole)
-                            
-                            itm2.setFlags(Qt.ItemFlags(
-                                Qt.ItemIsUserCheckable |
-                                Qt.ItemIsEnabled |
-                                Qt.ItemIsSelectable)
-                            )
-                            itm2.setCheckState(Qt.Unchecked)
-                
-                self.slotsView.sortByColumn(0, Qt.AscendingOrder)
-            except (AttributeError, ImportError,
-                    xml.etree.ElementTree.ParseError) as err:
-                E5MessageBox.critical(
-                    self,
-                    self.tr("uic error"),
-                    self.tr(
-                        """<p>There was an error loading the form <b>{0}</b>"""
-                        """.</p><p>{1}</p>""").format(self.formFile, str(err)))
         
     def __generateCode(self):
         """

eric ide

mercurial