Fri, 18 Jan 2019 19:45:25 +0100
CreateDialogCodeDialog: changed logic to always call the external UI loader in order to avoid clashes with eric classes and packages.
--- 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): """