124 lines
4.7 KiB
Python
124 lines
4.7 KiB
Python
# -*- coding: utf-8 -*-
|
||
# gui/components/springs.py
|
||
"""Простые пружины для компоновок."""
|
||
|
||
from PySide6.QtWidgets import QWidget, QSizePolicy
|
||
|
||
|
||
class VSpring(QWidget):
|
||
"""Вертикальная пружина."""
|
||
|
||
def __init__(self, parent=None):
|
||
super().__init__(parent)
|
||
self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
|
||
|
||
def set_enabled(self, enabled: bool) -> None:
|
||
self.setEnabled(enabled)
|
||
|
||
def set_min_width(self, width: int) -> None:
|
||
self.setMinimumWidth(width)
|
||
|
||
def set_min_height(self, height: int) -> None:
|
||
self.setMinimumHeight(height)
|
||
|
||
def set_max_width(self, width: int) -> None:
|
||
self.setMaximumWidth(width)
|
||
|
||
def set_max_height(self, height: int) -> None:
|
||
self.setMaximumHeight(height)
|
||
|
||
def set_fixed_size(self, width: int, height: int) -> None:
|
||
self.setMinimumSize(width, height)
|
||
self.setMaximumSize(width, height)
|
||
|
||
def set_tooltip(self, text: str) -> None:
|
||
self.setToolTip(text)
|
||
|
||
def set_size_policy(self, horizontal, vertical) -> None:
|
||
self.setSizePolicy(horizontal, vertical)
|
||
|
||
|
||
class HSpring(QWidget):
|
||
"""Горизонтальная пружина."""
|
||
|
||
def __init__(self, parent=None):
|
||
super().__init__(parent)
|
||
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
|
||
|
||
def set_enabled(self, enabled: bool) -> None:
|
||
self.setEnabled(enabled)
|
||
|
||
def set_min_width(self, width: int) -> None:
|
||
self.setMinimumWidth(width)
|
||
|
||
def set_min_height(self, height: int) -> None:
|
||
self.setMinimumHeight(height)
|
||
|
||
def set_max_width(self, width: int) -> None:
|
||
self.setMaximumWidth(width)
|
||
|
||
def set_max_height(self, height: int) -> None:
|
||
self.setMaximumHeight(height)
|
||
|
||
def set_fixed_size(self, width: int, height: int) -> None:
|
||
self.setMinimumSize(width, height)
|
||
self.setMaximumSize(width, height)
|
||
|
||
def set_tooltip(self, text: str) -> None:
|
||
self.setToolTip(text)
|
||
|
||
def set_size_policy(self, horizontal, vertical) -> None:
|
||
self.setSizePolicy(horizontal, vertical)
|
||
|
||
|
||
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# Module workflow notes
|
||
# ---------------------------------------------------------------------------
|
||
#
|
||
# 1) Назначение модуля:
|
||
# Простые пружины (spacer-виджеты) для вертикальной и горизонтальной
|
||
# компоновки: VSpring растягивается вертикально, HSpring — горизонтально.
|
||
#
|
||
# 2) Зависимости модуля:
|
||
# Импорты: QWidget, QSizePolicy (PySide6.QtWidgets)
|
||
# Хост-класс / базовый класс: QWidget (не SContainer!)
|
||
# Внешние библиотеки: PySide6 (обязательна)
|
||
#
|
||
# 3) Экспорт:
|
||
# Класс VSpring — вертикальная пружина (Minimum × Expanding).
|
||
# Класс HSpring — горизонтальная пружина (Expanding × Minimum).
|
||
# Оба класса предоставляют стандартный API размеров:
|
||
# set_enabled(), set_min/max_width/height(), set_fixed_size(),
|
||
# set_tooltip(), set_size_policy().
|
||
#
|
||
# 4) Состояние (поля):
|
||
# Нет собственных полей. Только наследованные от QWidget.
|
||
#
|
||
# 5) Последовательность действий и вызовов:
|
||
# __init__(parent=None)
|
||
# -> super().__init__(parent)
|
||
# -> setSizePolicy(Minimum, Expanding) для VSpring
|
||
# -> setSizePolicy(Expanding, Minimum) для HSpring
|
||
#
|
||
# 6) Побочные эффекты:
|
||
# Нет — чистые пустые виджеты-распорки.
|
||
#
|
||
# 7) Границы ответственности:
|
||
# Только распорка в layout. Не рисует, не обрабатывает события,
|
||
# не подключается к theme_bus, не имеет стилей.
|
||
#
|
||
# 8) Обработка ошибок:
|
||
# Нет обработки ошибок. Виджет пассивен.
|
||
#
|
||
# 9) Инварианты и контракты:
|
||
# - VSpring всегда Expanding по вертикали, Minimum по горизонтали.
|
||
# - HSpring всегда Expanding по горизонтали, Minimum по вертикали.
|
||
#
|
||
# 10) Правило сопровождения:
|
||
# Не наследовать от SContainer — пружины должны быть максимально
|
||
# лёгкими. Использовать для заполнения свободного пространства
|
||
# в VContainer/HContainer.
|