Add Dispatch_V0.1.1

This commit is contained in:
2026-04-29 08:18:54 +04:00
commit a7ede6ded4
404 changed files with 39167 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
# -*- 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.