--- a/Project/CreateDialogCodeDialog.py Thu Jan 10 14:23:49 2019 +0100 +++ b/Project/CreateDialogCodeDialog.py Sat Feb 02 11:12:54 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): """