src/eric7/Project/UicLoadUi5.py

branch
eric7
changeset 11217
856628e8a303
parent 11216
a1471981ef18
child 11218
43dfc40728d2
--- a/src/eric7/Project/UicLoadUi5.py	Sun Apr 13 14:46:18 2025 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2011 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module to get the object name, class name or signatures of a Qt form (*.ui).
-"""
-
-import contextlib
-import json
-import sys
-import xml.etree.ElementTree  # secok
-
-
-def _printout(dataString):
-    """
-    Function to print the given string as output to sys.stderr with a guard string.
-
-    @param dataString string to be printed
-    @type str
-    """
-    print("@@eric_start@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
-
-
-def _printerr(dataString):
-    """
-    Function to print the given string as error to sys.stdoerr with a guard string.
-
-    @param dataString string to be printed
-    @type str
-    """
-    print("@@eric_error@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
-
-
-try:
-    from PyQt5 import uic
-    from PyQt5.QtCore import QByteArray, QMetaMethod
-    from PyQt5.QtWidgets import QAction, QApplication, QWidget
-except ModuleNotFoundError:
-    _printout("PyQt5 could not be found.")
-    sys.exit(1)
-except ImportError as err:
-    _printerr("PyQt5 could not be imported. Issue: {0}".format(str(err)))
-    sys.exit(1)
-
-with contextlib.suppress(ImportError):
-    from PyQt5 import QtWebEngineWidgets  # __IGNORE_WARNING__
-
-
-def objectName(formFile, projectPath):
-    """
-    Function to get the object name of a form.
-
-    @param formFile file name of the form
-    @type str
-    @param projectPath directory name of the project
-    @type str
-    """
-    sys.path.append(projectPath)
-
-    _app = QApplication([])  # __IGNORE_WARNING__
-    try:
-        dlg = uic.loadUi(formFile, package=projectPath)
-        _printout(dlg.objectName())
-        sys.exit(0)
-    except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printerr(str(err))
-        sys.exit(1)
-
-
-def className(formFile, projectPath):
-    """
-    Function to get the class name of a form.
-
-    @param formFile file name of the form
-    @type str
-    @param projectPath directory name of the project
-    @type str
-    """
-    sys.path.append(projectPath)
-
-    _app = QApplication([])  # __IGNORE_WARNING__
-    try:
-        dlg = uic.loadUi(formFile, package=projectPath)
-        _printout(dlg.metaObject().className())
-        sys.exit(0)
-    except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printerr(str(err))
-        sys.exit(1)
-
-
-def __mapType(type_):
-    """
-    Private function to map a type as reported by Qt's meta object to the
-    correct Python type.
-
-    @param type_ type as reported by Qt
-    @type QByteArray or bytes
-    @return mapped Python type
-    @rtype str
-    """
-    mapped = bytes(type_).decode()
-
-    # I. always check for *
-    mapped = mapped.replace("*", "")
-
-    # 1. check for const
-    mapped = mapped.replace("const ", "")
-
-    # 2. replace QString and QStringList
-    mapped = mapped.replace("QStringList", "list").replace("QString", "str")
-
-    # 3. replace double by float
-    mapped = mapped.replace("double", "float")
-
-    return mapped
-
-
-def signatures(formFile, projectPath):
-    """
-    Function to get the signatures of form elements.
-
-    @param formFile file name of the form
-    @type str
-    @param projectPath directory name of the project
-    @type str
-    """
-    sys.path.append(projectPath)
-
-    objectsList = []
-
-    _app = QApplication([])  # __IGNORE_WARNING__
-    try:
-        dlg = uic.loadUi(formFile, package=projectPath)
-        objects = dlg.findChildren(QWidget) + dlg.findChildren(QAction)
-        for obj in objects:
-            name = obj.objectName()
-            if not name or name.startswith("qt_"):
-                # ignore un-named or internal objects
-                continue
-
-            metaObject = obj.metaObject()
-            objectDict = {
-                "name": name,
-                "class_name": metaObject.className(),
-                "methods": [],
-            }
-
-            for index in range(metaObject.methodCount()):
-                metaMethod = metaObject.method(index)
-                if metaMethod.methodType() == QMetaMethod.MethodType.Signal:
-                    signatureDict = {
-                        "signature": "on_{0}_{1}".format(
-                            name, bytes(metaMethod.methodSignature()).decode()
-                        ),
-                        "methods": [
-                            "on_{0}_{1}".format(
-                                name,
-                                bytes(metaMethod.methodSignature())
-                                .decode()
-                                .split("(")[0],
-                            ),
-                        ],
-                    }
-                    signatureDict["methods"].append(
-                        "{0}({1})".format(
-                            signatureDict["methods"][-1],
-                            ", ".join(
-                                [__mapType(t) for t in metaMethod.parameterTypes()]
-                            ),
-                        )
-                    )
-
-                    returnType = __mapType(metaMethod.typeName().encode())
-                    if returnType == "void":
-                        returnType = ""
-                    signatureDict["return_type"] = returnType
-                    parameterTypesList = [
-                        __mapType(t) for t in metaMethod.parameterTypes()
-                    ]
-                    signatureDict["parameter_types"] = parameterTypesList
-                    pyqtSignature = ", ".join(parameterTypesList)
-                    signatureDict["pyqt_signature"] = pyqtSignature
-
-                    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]
-                    signatureDict["parameter_names"] = parameterNamesList
-                    methNamesSig = ", ".join(parameterNamesList)
-
-                    if methNamesSig:
-                        pythonSignature = "on_{0}_{1}(self, {2})".format(
-                            name,
-                            bytes(metaMethod.methodSignature()).decode().split("(")[0],
-                            methNamesSig,
-                        )
-                    else:
-                        pythonSignature = "on_{0}_{1}(self)".format(
-                            name,
-                            bytes(metaMethod.methodSignature()).decode().split("(")[0],
-                        )
-                    signatureDict["python_signature"] = pythonSignature
-
-                    objectDict["methods"].append(signatureDict)
-
-            objectsList.append(objectDict)
-
-        _printout(json.dumps(objectsList))
-        sys.exit(0)
-    except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printerr(str(err))
-        sys.exit(1)
-
-
-if __name__ == "__main__":
-    if len(sys.argv) != 4:
-        _printerr("Wrong number of arguments.")
-        sys.exit(1)
-
-    if sys.argv[1] == "object_name":
-        objectName(sys.argv[2], sys.argv[3])
-    elif sys.argv[1] == "class_name":
-        className(sys.argv[2], sys.argv[3])
-    elif sys.argv[1] == "signatures":
-        signatures(sys.argv[2], sys.argv[3])
-    else:
-        _printerr("Unknow operation given.")
-        sys.exit(1)
-
-#
-# eflag: noqa = M701, M-801

eric ide

mercurial