102 lines
4.3 KiB
Python
102 lines
4.3 KiB
Python
# -*- 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 наследовали
|
||
# её автоматически.
|