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,422 @@
# -*- coding: utf-8 -*-
# gui/styles/widgets.py
"""Стили для контейнеров, диалогов, сплиттеров и т.д."""
WIDGETS = {
"DIALOG": """
QDialog {
background-color: palette(window);
}
""",
"DIALOG_BUTTON_BOX": """
QDialogButtonBox {
background-color: transparent;
}
QDialogButtonBox QPushButton {
background-color: palette(button);
color: palette(button-text);
border: 1px solid palette(mid);
border-radius: 0px;
font-size: 14px;
min-height: 32px;
padding: 4px 10px;
}
QDialogButtonBox QPushButton:hover { border-color: palette(highlight); }
QDialogButtonBox QPushButton:pressed { background-color: palette(light); }
QDialogButtonBox QPushButton:disabled { color: palette(mid); border-color: palette(dark); }
""",
"GROUP_BOX": """
QGroupBox {
font-size: 14px;
font-weight: 600;
color: palette(window-text);
border: 1px solid palette(mid);
border-radius: 0px;
margin-top: 6px;
background-color: palette(base);
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
background-color: palette(base);
color: palette(window-text);
padding: 2px 5px 2px 9px;
}
""",
"GROUP_BOX_DARK": """
QGroupBox {
font-size: 14px;
font-weight: 600;
color: #f2f2f2;
border: 1px solid #5a5a5a;
border-radius: 0px;
margin-top: 6px;
background-color: #2d2d2d;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
background-color: #2d2d2d;
color: #f2f2f2;
padding: 2px 5px 2px 9px;
}
""",
"GROUP_BOX_LIGHT": """
QGroupBox {
font-size: 14px;
font-weight: 600;
color: #172B4D;
border: 1px solid #DFE1E6;
border-radius: 0px;
margin-top: 6px;
background-color: #FFFFFF;
}
QGroupBox::title {
subcontrol-origin: margin;
subcontrol-position: top left;
background-color: #FFFFFF;
color: #172B4D;
padding: 2px 5px 2px 9px;
}
""",
"GROUP_BOX_CENTER_TITLE": """
QGroupBox {
font-size: 14px;
font-weight: 600;
color: palette(window-text);
border: 1px solid palette(mid);
border-radius: 0px;
margin-top: 6px;
background-color: palette(base);
}
QGroupBox::title {
subcontrol-position: top center;
background-color: transparent;
color: palette(window-text);
padding: 12px 5px 2px 9px;
}
""",
"GROUP_BOX_CENTER_TITLE_DARK": """
QGroupBox {
font-size: 14px;
font-weight: 600;
color: #f2f2f2;
border: 1px solid #5a5a5a;
border-radius: 0px;
margin-top: 6px;
background-color: #2d2d2d;
}
QGroupBox::title {
subcontrol-position: top center;
background-color: transparent;
color: #f2f2f2;
padding: 12px 5px 2px 9px;
}
""",
"GROUP_BOX_CENTER_TITLE_LIGHT": """
QGroupBox {
font-size: 14px;
font-weight: 600;
color: #172B4D;
border: 1px solid #DFE1E6;
border-radius: 0px;
margin-top: 6px;
background-color: #FFFFFF;
}
QGroupBox::title {
subcontrol-position: top center;
background-color: transparent;
color: #172B4D;
padding: 12px 5px 2px 9px;
}
""",
"W": """
background-color: rgba(255, 255, 255, 0.15);
border: 1px solid #ffffff;
border-radius: 0px;
outline: 1px solid #007bff;
""",
"W_FRAME": """
QWidget#main_container {
background-color: rgba(255, 255, 255, 0.15);
border: 1px solid #ffffff;
border-radius: 0px;
outline: 1px solid #007bff;
}
""",
"B": """
background-color: rgba(0, 0, 0, 0.15);
border: 1px solid #000000;
border-radius: 0px;
outline: 1px solid #ff8400;
""",
"MODEL_VIEW_PANEL": """
QWidget#model_view_panel {
background-color: palette(base);
border: 1px solid palette(mid);
border-radius: 0px;
}
""",
"SPLITTER": """
QSplitter::handle {
background-color: palette(mid);
width: 4px;
}
QSplitter::handle:hover {
background-color: palette(highlight);
}
""",
"STACKED_WIDGET": """
QStackedWidget {
background-color: palette(window);
}
""",
"SCROLL_CONTAINER": """
QScrollArea {
background-color: transparent;
border: none;
}
QScrollArea > QWidget > QWidget {
background-color: transparent;
border: none;
}
""",
"DEFAULT": """
QWidget {
background-color: transparent;
border: none;
border-radius: 0px;
}
""",
"TOOLS_PANEL_CONTAINER": """
QWidget {
background-color: palette(base);
border: 1px solid palette(mid);
}
""",
"TOOLS_PANEL_CONTAINER_TRANSPARENT": """
QWidget {
background-color: transparent;
border: 1px solid palette(mid);
border-radius: 0px;
}
""",
"TREE_WIDGET": """
QTreeWidget {
background-color: palette(base);
border: 1px solid palette(mid);
border-radius: 0px;
font-size: 14px;
color: palette(text);
}
QTreeWidget::item {
color: palette(text);
}
QTreeWidget::item:selected {
background-color: palette(highlight);
color: palette(highlighted-text);
}
QHeaderView::section {
background-color: palette(button);
color: palette(button-text);
border: 1px solid palette(mid);
}
""",
"TREE_WIDGET_TOP_FLAT": """
QTreeWidget {
background-color: palette(base);
border: 1px solid palette(mid);
border-top-left-radius: 0px;
border-top-right-radius: 0px;
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
font-size: 14px;
color: palette(text);
}
QLabel#properties_body_label,
QWidget#properties_body_label {
background-color: palette(base);
border: 1px solid palette(mid);
border-top-left-radius: 0px;
border-top-right-radius: 0px;
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
color: palette(text);
font-size: 13px;
font-weight: 600;
}
QTreeWidget::item {
color: palette(text);
}
QTreeWidget::item:selected {
background-color: palette(highlight);
color: palette(highlighted-text);
}
QHeaderView::section {
background-color: palette(button);
color: palette(button-text);
border: 1px solid palette(mid);
}
""",
"TOPOLOGY_TREE_PANEL": """
background-color: palette(base);
border: 1px solid palette(mid);
border-radius: 0px;
QTreeWidget {
background-color: #3C3C3C;
border: 1px solid palette(mid);
border-radius: 0px;
font-size: 14px;
color: palette(text);
}
QTreeWidget::item {
background-color: #3C3C3C;
color: palette(text);
}
QTreeWidget::item:selected {
background-color: palette(highlight);
color: palette(highlighted-text);
}
QHeaderView::section {
background-color: #3C3C3C;
color: palette(button-text);
border: 1px solid palette(mid);
}
""",
"VIEW_IMAGE_BACKGROUND": """
background-color: palette(window);
""",
"VIEW_WIDGET_BACKGROUND": """
background-color: palette(base);
border: 1px solid palette(mid);
border-radius: 0px;
""",
# Стили для модуля зонирования
"ZONE_PROPERTIES_GROUP": """
QGroupBox {
font-weight: 600;
border: 1px solid palette(mid);
border-radius: 0px;
margin-top: 12px;
padding-top: 10px;
background-color: palette(base);
color: palette(window-text);
}
QGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 5px 0 5px;
color: palette(window-text);
}
""",
"ZONE_PROPERTIES_PANEL": """
QWidget {
border: 1px solid palette(mid);
background-color: palette(base);
}
""",
"ZONE_PROPERTIES_HOST": """
QWidget {
border: none;
background-color: palette(window);
}
""",
"ZONE_PROPERTIES_WIDGET": """
QWidget#zone_properties_widget {
background-color: palette(window);
}
""",
"MAIN_WINDOW_DARK": """
QMainWindow { background-color: #2b2b2b; }
""",
"MAIN_WINDOW_LIGHT": """
QMainWindow { background-color: #F4F5F7; }
""",
}
# ---------------------------------------------------------------------------
# Module workflow notes
# ---------------------------------------------------------------------------
#
# 1) Назначение модуля:
# Определение QSS-стилей для контейнеров, диалогов, сплиттеров,
# group box'ов, scroll-контейнеров, tree widget'ов, панелей свойств
# зон, модели вида и прочих составных виджетов. Поддержка тем:
# база (palette), _DARK, _LIGHT варианты.
#
# 2) Зависимости модуля:
# Импорты: нет
# Хост/базовый класс: нет (модуль-словарь)
# Внешние библиотеки: нет
#
# 3) Экспорт:
# Словарь WIDGETS: dict[str, str] — ключ → QSS-строка.
# Ключи: DIALOG, DIALOG_BUTTON_BOX, GROUP_BOX, GROUP_BOX_DARK,
# GROUP_BOX_LIGHT, GROUP_BOX_CENTER_TITLE, GROUP_BOX_CENTER_TITLE_DARK,
# GROUP_BOX_CENTER_TITLE_LIGHT, W, W_FRAME, B,
# MODEL_VIEW_PANEL, SPLITTER, STACKED_WIDGET, SCROLL_CONTAINER,
# DEFAULT, TOOLS_PANEL_CONTAINER, TOOLS_PANEL_CONTAINER_TRANSPARENT,
# TREE_WIDGET, TREE_WIDGET_TOP_FLAT, TOPOLOGY_TREE_PANEL,
# VIEW_IMAGE_BACKGROUND, VIEW_WIDGET_BACKGROUND,
# ZONE_PROPERTIES_GROUP, ZONE_PROPERTIES_PANEL,
# ZONE_PROPERTIES_HOST, ZONE_PROPERTIES_WIDGET.
#
# 4) Состояние (поля):
# WIDGETS: dict[str, str] — единственный экспортируемый словарь.
#
# 5) Последовательность действий и вызовов:
# Нет вызовов; модуль декларативный.
# Импортируется в gui/styles/__init__.py → APP_STYLES.update(WIDGETS).
#
# 6) Побочные эффекты:
# Нет побочных эффектов при импорте.
#
# 7) Границы ответственности:
# НЕ применяет стили — только хранит QSS-строки.
# НЕ содержит стили для кнопок (→ buttons.py), меток (→ labels.py)
# или полей ввода (→ inputs.py).
#
# 8) Обработка ошибок:
# Нет; модуль декларативный.
#
# 9) Инварианты и контракты:
# - Тематические варианты: KEY / KEY_DARK / KEY_LIGHT.
# - W и B — debug-стили с полупрозрачным фоном и outline.
# - GROUP_BOX_CENTER_TITLE — вариант с центрированным заголовком.
# - Все QSS-строки — валидный Qt StyleSheet синтаксис.
#
# 10) Правило сопровождения:
# Новые стили контейнеров/диалогов/виджетов добавлять сюда.
# Соблюдать паттерн KEY / KEY_DARK / KEY_LIGHT.
# Debug-стили (W, B) не использовать в production коде.