Source code for RWESharp.Core.TreeElement

from __future__ import annotations
from RWESharp.Modify.Ui import SettingUI
from RWESharp.Configurable.QtTypes import KeyConfigurable
from PySide6.QtWidgets import QTreeWidgetItem
from PySide6.QtCore import Qt
from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from RWESharp.Modify.Mod import Mod


[docs] class TreeElement:
[docs] def __init__(self, mod: Mod, text: str, name: str, parent=None, children: list[TreeElement] = None): self.mod: Mod = mod self.text: str = text self.name: str = name self.children: list[TreeElement] = [] self.parent: TreeElement | None = parent if children is not None: self.add_children(*children) if parent is not None: self.parent.add_child(self)
[docs] def add_children(self, *children: TreeElement): for i in children: self.add_child(i)
[docs] def add_child(self, child: TreeElement): child.parent = self self.children.append(child)
[docs] def find_child(self, name: str, recursive=False) -> TreeElement | None: for i in self.children: if name == i.name: return i if recursive: return i.find_child(name, True) return None
[docs] def construct_tree(self) -> QTreeWidgetItem: me = QTreeWidgetItem([self.text]) self.set_data(me) for i in self.children: me.addChild(i.construct_tree()) return me
[docs] def set_data(self, item): item.setData(0, Qt.ItemDataRole.UserRole, [self.name])
[docs] class SettingElement(TreeElement):
[docs] def __init__(self, mod: Mod, text: str, name: str, ui: SettingUI = None, parent=None, children: list[SettingElement] = None): super().__init__(mod, text, name, parent, children) self.ui: SettingUI | None = ui
[docs] def add_myself(self): self.mod.add_setting(self) return self
[docs] def set_data(self, item): item.setData(0, Qt.ItemDataRole.UserRole, [self.name, self.ui])
[docs] class HotkeyElement(TreeElement):
[docs] def __init__(self, mod: Mod, text: str, name: str, key: KeyConfigurable | None = None, parent=None, children: list[HotkeyElement] = None): super().__init__(mod, text, name, parent, children) self.key: KeyConfigurable | None = key
[docs] def add_myself(self): self.mod.add_hotkey(self) return self
[docs] def set_data(self, item): if self.key is None: item.setData(0, Qt.ItemDataRole.UserRole, [self.name]) return item.setData(0, Qt.ItemDataRole.UserRole, [self.name, self.key]) item.setText(1, self.key.value.toString())
[docs] def add_children_configurables(self, *keys: KeyConfigurable): for i in keys: HotkeyElement(self.mod, i.shortdesc, i.name, i, self)
[docs] def get_hotkeys_from_pattern(mod: Mod, pattern: str) -> list[KeyConfigurable]: keys = [] for i in mod.configs: if isinstance(i, KeyConfigurable) and pattern in i.name: keys.append(i) return keys