diff --git a/ElaWidgetTools b/ElaWidgetTools index c1eed7c..e1778e9 160000 --- a/ElaWidgetTools +++ b/ElaWidgetTools @@ -1 +1 @@ -Subproject commit c1eed7c23545e61cc63a34f2cc26737c9d563f78 +Subproject commit e1778e915449930aeb88895895cf01488f83f995 diff --git a/scripts/pyqt/gen_widgets.py b/scripts/pyqt/gen_widgets.py index ce1d9f1..d57fba6 100644 --- a/scripts/pyqt/gen_widgets.py +++ b/scripts/pyqt/gen_widgets.py @@ -490,6 +490,29 @@ def generate_sip_for_class__1(header_content, filename=""): return "\n".join(sip_lines) +def parseshitelasuggestbox(content): + + x = re.search(r"struct ELA_EXPORT SuggestData \{[\s\S]*?\};", content) + + klass = content.find("class") + content = content.replace(x.group(), "") + content = content[:klass] + x.group() + "\n" + content[klass:] + return content + + +def parseshitelasuggestbox2(sip_class_def: str): + extra = r"""struct SuggestData { + public: + explicit SuggestData(); + explicit SuggestData(ElaIconType::IconName icon, const QString& suggestText, const QVariantMap& suggestData = {}); + ~SuggestData(); + };""" + + idx = sip_class_def.rfind("public:\n") + 8 + sip_class_def = sip_class_def[:idx] + "\n" + extra + "\n" + sip_class_def[idx:] + return sip_class_def + + def cast_h_to_sip(filename): filename = os.path.splitext(os.path.basename(filename))[0] input_header_file = f"{eladir}/{filename}.h" @@ -497,6 +520,8 @@ def cast_h_to_sip(filename): with open(input_header_file, "r", encoding="utf-8") as f: content = f.read() + if filename == "ElaSuggestBox": + content = parseshitelasuggestbox(content) # A common pattern is to have a main .sip file that includes others. # This script generates the content for a single class. @@ -507,26 +532,31 @@ def cast_h_to_sip(filename): ) sip_class_def = generate_sip_for_class(content, input_header_file) - if sip_class_def: - full_sip_content = [] - # Add necessary imports based on base class and parameter types - # This is a basic set, might need to be smarter - full_sip_content.append("%Import QtCore/QtCoremod.sip") - full_sip_content.append("%Import QtGui/QtGuimod.sip") - full_sip_content.append("%Import QtWidgets/QtWidgetsmod.sip") - full_sip_content.append("") - full_sip_content.append(sip_class_def) - final_output = "\n".join(full_sip_content) - ls = final_output.splitlines() - ls = [_ for _ in ls if "QVector" not in _] # 不支持的类型转换 - ls = [_ for _ in ls if "QList" not in _] # 不支持的类型转换 - bad = ("long *", "qintptr *")[forQt5] - ls = [_ for _ in ls if bad not in _] # 这个是Qt5的条件编译,Qt6的话要删掉另一条 - - final_output = "\n".join(ls) - - with open(output_sip_file, "w", encoding="utf-8") as f: - f.write(final_output) + if not sip_class_def: + return + + if filename == "ElaSuggestBox": + sip_class_def = parseshitelasuggestbox2(sip_class_def) + + full_sip_content = [] + # Add necessary imports based on base class and parameter types + # This is a basic set, might need to be smarter + full_sip_content.append("%Import QtCore/QtCoremod.sip") + full_sip_content.append("%Import QtGui/QtGuimod.sip") + full_sip_content.append("%Import QtWidgets/QtWidgetsmod.sip") + full_sip_content.append("") + full_sip_content.append(sip_class_def) + final_output = "\n".join(full_sip_content) + ls = final_output.splitlines() + #ls = [_ for _ in ls if "QVector" not in _] # 不支持的类型转换 + ls = [_ for _ in ls if "QList" not in _] # 不支持的类型转换 + bad = ("long *", "qintptr *")[forQt5] + ls = [_ for _ in ls if bad not in _] # 这个是Qt5的条件编译,Qt6的话要删掉另一条 + + final_output = "\n".join(ls) + + with open(output_sip_file, "w", encoding="utf-8") as f: + f.write(final_output) allfiles = [] diff --git a/scripts/wheel/setup.py b/scripts/wheel/setup.py index b6225cd..28243db 100644 --- a/scripts/wheel/setup.py +++ b/scripts/wheel/setup.py @@ -33,7 +33,7 @@ def has_ext_modules(self): setup( name=f"{bindingfor}-ElaWidgetTools", - version="0.5.1", + version="0.6", author="HIllya51", license="MIT", install_requires=[f"""{bindingfor}"""],