so-gui/utils/indentation.py

25 lines
915 B
Python
Raw Normal View History

2025-02-01 18:16:23 +01:00
from PySide6.QtWidgets import QTreeWidget, QTreeWidgetItem
from PySide6.QtCore import Qt
def apply_indentation_to_all_columns(tree: QTreeWidget):
"""
Rekurencyjnie stosuje wizualne wcięcie dla wszystkich elementów w drzewie
we wszystkich kolumnach.
"""
for i in range(tree.topLevelItemCount()):
item = tree.topLevelItem(i)
_indent_subtree(item, 0)
def _indent_subtree(item: QTreeWidgetItem, level: int):
"""Dodaje wcięcie (np. spacje) na każdy poziom hierarchii w całym wierszu."""
indent_spaces = " " * 2 * level
for col in range(item.columnCount()):
original_text = item.text(col).lstrip()
item.setText(col, f"{indent_spaces}{original_text}")
item.setData(col, Qt.TextAlignmentRole, Qt.AlignLeft | Qt.AlignVCenter)
# Rekurencja dla dzieci
for i in range(item.childCount()):
_indent_subtree(item.child(i), level + 1)