Skip to content

Commit

Permalink
Fix pyqt6 enum patch
Browse files Browse the repository at this point in the history
  • Loading branch information
t20100 committed Dec 13, 2023
1 parent 7fc5486 commit 2239ebb
Showing 1 changed file with 31 additions and 17 deletions.
48 changes: 31 additions & 17 deletions src/silx/gui/qt/_pyqt6.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,35 @@ def patch_enums(*modules):
for module in modules:
for clsName in dir(module):
cls = getattr(module, clsName, None)
if isinstance(cls, PyQt6.sip.wrappertype) and clsName.startswith("Q"):
for qenumName in dir(cls):
if qenumName[0].isupper():
qenum = getattr(cls, qenumName, None)
if isinstance(qenum, enum.EnumMeta):
if qenum is getattr(cls.__mro__[1], qenumName, None):
continue # Only handle it once
for item in qenum:
# Special cases to avoid overrides and mimic PySide6
if clsName == "QColorSpace" and qenumName in (
"Primaries",
"TransferFunction",
):
break
if qenumName in ("DeviceType", "PointerType"):
break
if not isinstance(cls, PyQt6.sip.wrappertype) or not clsName.startswith(
"Q"
):
continue

setattr(cls, item.name, item)
for qenumName in dir(cls):
if not qenumName[0].isupper():
continue
# Special cases to avoid overrides and mimic PySide6
if clsName == "QColorSpace" and qenumName in (
"Primaries",
"TransferFunction",
):
continue
if qenumName in ("DeviceType", "PointerType"):
continue

qenum = getattr(cls, qenumName)
if not isinstance(qenum, enum.EnumMeta):
continue

if any(
map(
lambda ancestor: isinstance(ancestor, PyQt6.sip.wrappertype)
and qenum is getattr(ancestor, qenumName, None),
cls.__mro__[1:],
)
):
continue # Only handle it once in case of inheritance

for name, value in qenum.__members__.items():
setattr(cls, name, value)

0 comments on commit 2239ebb

Please sign in to comment.