Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 50 additions & 20 deletions scripts/pyqt/gen_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -490,13 +490,38 @@ 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"
output_sip_file = f"sip/{filename}.sip"

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.
Expand All @@ -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<QVariantMap>" 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<QVariantMap>" 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 = []
Expand Down
2 changes: 1 addition & 1 deletion scripts/wheel/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}"""],
Expand Down
Loading