diff --git a/CHANGELOG.md b/CHANGELOG.md index e94727b03..daa6e99c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,10 +26,14 @@ ### Bug Fixes +- IDA Pro: FLARE Capa Explorer has been fixed to work for IDA Pro 9.2 using PyQt6 @nicolaipre #2713 + ### capa Explorer Web ### capa Explorer IDA Pro plugin +- fixed bug where plugin did not open due to PyQt6 upgrade @nicolaipre #2713 + ### Development - ci: remove redundant "test_run" action from build workflow @mike-hunhoff #2692 diff --git a/capa/ida/plugin/item.py b/capa/ida/plugin/item.py index c8d3bdab7..3c31951a1 100644 --- a/capa/ida/plugin/item.py +++ b/capa/ida/plugin/item.py @@ -24,6 +24,17 @@ from capa.features.address import Address, FileOffsetAddress, AbsoluteVirtualAddress +# PyQT6 support with PyQt5 fallback +if hasattr(QtCore.Qt, 'ItemFlag'): + # PyQt6 / PySide6 + ItemFlag = QtCore.Qt.ItemFlag + TRISTATE = ItemFlag.ItemIsAutoTristate +else: + # PyQt5 + ItemFlag = QtCore.Qt + TRISTATE = ItemFlag.ItemIsTristate + + def info_to_name(display): """extract root value from display name @@ -52,10 +63,10 @@ def __init__(self, parent: Optional["CapaExplorerDataItem"], data: list[str], ca self._can_check = can_check # default state for item - self.flags = QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable + self.flags = ItemFlag.ItemIsEnabled.value | ItemFlag.ItemIsSelectable.value if self._can_check: - self.flags = self.flags | QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsTristate + self.flags = self.flags | ItemFlag.ItemIsUserCheckable.value | TRISTATE.value if self.pred: self.pred.appendChild(self) @@ -66,9 +77,9 @@ def setIsEditable(self, isEditable=False): @param isEditable: True, can edit, False cannot edit """ if isEditable: - self.flags |= QtCore.Qt.ItemIsEditable + self.flags |= ItemFlag.ItemIsEditable.value else: - self.flags &= ~QtCore.Qt.ItemIsEditable + self.flags &= ~ItemFlag.ItemIsEditable.value def setChecked(self, checked): """set item as checked