# -*- coding: utf-8 -*- # gui/containers/h_container.py """Горизонтальный контейнер — тонкая обёртка над SContainer(orientation='h'). Удобство: ``HContainer(height_percent=10)`` вместо ``SContainer(height_percent=10, orientation='h')``. Ширина всегда Expanding (width_percent=None). """ from PySide6.QtWidgets import QWidget from .s_container import SContainer class HContainer(SContainer): """Горизонтальный контейнер с высотой в процентах от родителя.""" def __init__( self, height_percent: int | float | None = None, margin: int | tuple[int, int, int, int] = 0, spacing: int = 0, content_width_percent: int | None = None, content_height_percent: int | None = None, content_width: int | None = None, content_height: int | None = None, content_fit: bool = True, content_driven: bool = False, parent: QWidget | None = None, style: str | None = None, active_style: str | None = None, is_active: bool | None = None, ): super().__init__( width_percent=None, height_percent=height_percent, margin=margin, spacing=spacing, orientation="h", content_width_percent=content_width_percent, content_height_percent=content_height_percent, content_width=content_width, content_height=content_height, content_fit=content_fit, content_driven=content_driven, parent=parent, style=style, active_style=active_style, is_active=is_active, ) # --------------------------------------------------------------------------- # Module workflow notes # --------------------------------------------------------------------------- # # 1) Назначение модуля: # Горизонтальный контейнер — тонкая обёртка над SContainer с фиксированной # ориентацией "h". Удобный синтаксический сахар: HContainer(height_percent=10) # вместо SContainer(height_percent=10, orientation='h'). Ширина всегда # Expanding (width_percent=None по умолчанию). # # 2) Зависимости модуля: # Импорты: QWidget (PySide6) # Хост/базовый класс: SContainer (s_container.py) # Внешние библиотеки: PySide6 # # 3) Экспорт: # Класс HContainer — горизонтальный контейнер с высотой в процентах. # # 4) Состояние (поля): # Собственных полей нет — всё наследуется от SContainer. # Параметр alignment в __init__ принимается, но игнорируется # (deprecated, для обратной совместимости). # # 5) Последовательность действий и вызовов: # __init__(params) -> super().__init__(width_percent=None, orientation="h", ...) # Все методы делегируются SContainer: add_widget(), add_stretch(), # set_margins(), set_spacing(), get_layout() и т.д. # # 6) Побочные эффекты: # Те же, что и у SContainer: стилизация через _apply_style(), # флаг _auto_add_children=True, subscribe на theme_bus. # # 7) Границы ответственности: # НЕ добавляет собственной логики — только фиксирует orientation="h" # и width_percent=None. Вся логика — в SContainer. # # 8) Обработка ошибок: # Делегируется SContainer. # # 9) Инварианты и контракты: # - width_percent всегда None → горизонтальная ось Expanding. # - orientation всегда "h". # # 10) Правило сопровождения: # Не добавлять сюда логику. Если нужна новая функциональность — # добавлять в SContainer, чтобы HContainer и VContainer наследовали # её автоматически.