Add Dispatch_V0.1.1
This commit is contained in:
422
Dispatch_V0.1.1/gui/styles/widgets.py
Normal file
422
Dispatch_V0.1.1/gui/styles/widgets.py
Normal 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 коде.
|
||||
Reference in New Issue
Block a user