Files
Dispatch/Dispatch_V0.1.1/gui/components/springs.py
2026-04-29 08:18:54 +04:00

124 lines
4.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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.