Add Dispatch_V0.1.1
This commit is contained in:
56
Dispatch_V0.1.1/gui/styles/__init__.py
Normal file
56
Dispatch_V0.1.1/gui/styles/__init__.py
Normal file
@@ -0,0 +1,56 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/__init__.py
|
||||
from .buttons import BUTTONS
|
||||
from .labels import LABELS
|
||||
from .inputs import INPUTS
|
||||
from .widgets import WIDGETS
|
||||
from .ticket import TICKET
|
||||
from .ticket_cards import TICKET_CARDS
|
||||
from .ticket_details import TICKET_DETAILS
|
||||
from .ticket_refusal_dialog import TICKET_REFUSAL_DIALOG
|
||||
from .ticket_specialist_dialog import TICKET_SPECIALIST_DIALOG
|
||||
from .ticket_document_dialog import TICKET_DOCUMENT_DIALOG
|
||||
from .ticket_reports import TICKET_REPORTS
|
||||
from .login_dialog import LOGIN_DIALOG
|
||||
from .profile_dossier import PROFILE_DOSSIER
|
||||
from .quality_assurance import QUALITY_ASSURANCE
|
||||
from .quality_assurance_word_workspace import QUALITY_ASSURANCE_WORD_WORKSPACE
|
||||
from .welcome import WELCOME
|
||||
|
||||
APP_STYLES = {}
|
||||
APP_STYLES.update(BUTTONS)
|
||||
APP_STYLES.update(LABELS)
|
||||
APP_STYLES.update(INPUTS)
|
||||
APP_STYLES.update(WIDGETS)
|
||||
APP_STYLES.update(TICKET)
|
||||
APP_STYLES.update(TICKET_CARDS)
|
||||
APP_STYLES.update(TICKET_DETAILS)
|
||||
APP_STYLES.update(TICKET_REFUSAL_DIALOG)
|
||||
APP_STYLES.update(TICKET_SPECIALIST_DIALOG)
|
||||
APP_STYLES.update(TICKET_DOCUMENT_DIALOG)
|
||||
APP_STYLES.update(TICKET_REPORTS)
|
||||
APP_STYLES.update(LOGIN_DIALOG)
|
||||
APP_STYLES.update(PROFILE_DOSSIER)
|
||||
APP_STYLES.update(QUALITY_ASSURANCE)
|
||||
APP_STYLES.update(QUALITY_ASSURANCE_WORD_WORKSPACE)
|
||||
APP_STYLES.update(WELCOME)
|
||||
|
||||
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Module workflow notes (compact)
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
# 1) Назначение модуля:
|
||||
# Пакетный __init__.py для gui/styles. Аггрегирует все словари стилей
|
||||
# (BUTTONS, LABELS, INPUTS, WIDGETS и Ticket-профили) в единый реестр
|
||||
# APP_STYLES для использования через StylableMixin._apply_style().
|
||||
#
|
||||
# 2) Зависимости модуля:
|
||||
# Реимпорт из: buttons (BUTTONS), labels (LABELS), inputs (INPUTS),
|
||||
# widgets (WIDGETS), ticket* style-модулей.
|
||||
#
|
||||
# 3) Экспорт:
|
||||
# APP_STYLES: dict[str, str] — глобальный реестр всех QSS-стилей.
|
||||
# Также реэкспортирует BUTTONS, LABELS, INPUTS, WIDGETS и Ticket-словари.
|
||||
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/__init__.cpython-313.pyc
Normal file
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/__init__.cpython-313.pyc
Normal file
Binary file not shown.
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/buttons.cpython-313.pyc
Normal file
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/buttons.cpython-313.pyc
Normal file
Binary file not shown.
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/inputs.cpython-313.pyc
Normal file
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/inputs.cpython-313.pyc
Normal file
Binary file not shown.
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/labels.cpython-313.pyc
Normal file
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/labels.cpython-313.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/ticket.cpython-313.pyc
Normal file
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/ticket.cpython-313.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/welcome.cpython-313.pyc
Normal file
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/welcome.cpython-313.pyc
Normal file
Binary file not shown.
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/widgets.cpython-313.pyc
Normal file
BIN
Dispatch_V0.1.1/gui/styles/__pycache__/widgets.cpython-313.pyc
Normal file
Binary file not shown.
3
Dispatch_V0.1.1/gui/styles/assets/arrow_down.svg
Normal file
3
Dispatch_V0.1.1/gui/styles/assets/arrow_down.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8">
|
||||
<path d="M1 1l5 5 5-5" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 209 B |
970
Dispatch_V0.1.1/gui/styles/buttons.py
Normal file
970
Dispatch_V0.1.1/gui/styles/buttons.py
Normal file
@@ -0,0 +1,970 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/buttons.py
|
||||
"""Стили для всех видов кнопок"""
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
LIGHT_TEXT_PRIMARY = "#172B4D"
|
||||
LIGHT_TEXT_SECONDARY = "#5E6C84"
|
||||
LIGHT_TEXT_DISABLED = "#A5ADBA"
|
||||
LIGHT_PANEL = "#FFFFFF"
|
||||
LIGHT_BORDER = "#DFE1E6"
|
||||
LIGHT_HOVER = "#EBECF0"
|
||||
LIGHT_PRESSED = "#DFE1E6"
|
||||
LIGHT_ACCENT_SOFT = "#DEEBFF"
|
||||
LIGHT_ACCENT_BORDER = "#85B8FF"
|
||||
|
||||
BUTTONS = {
|
||||
|
||||
"BUTTON_PRIMARY": """
|
||||
QPushButton {
|
||||
background-color: palette(highlight);
|
||||
color: #ffffff;
|
||||
border: 1px solid palette(highlight);
|
||||
border-radius: 0px;
|
||||
padding: 8px 14px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #0747A6;
|
||||
border-color: #0747A6;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #043A7D;
|
||||
border-color: #043A7D;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: palette(mid);
|
||||
color: #42526E;
|
||||
border-color: palette(mid);
|
||||
}
|
||||
""",
|
||||
|
||||
"BUTTON_SECONDARY": """
|
||||
QPushButton {
|
||||
background-color: palette(button);
|
||||
color: palette(button-text);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
padding: 4px 8px;
|
||||
font-size: 12px;
|
||||
min-width: 100px;
|
||||
min-height: 30px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #EBECF0;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #DFE1E6;
|
||||
}
|
||||
""",
|
||||
|
||||
"BUTTON_SMALL": """
|
||||
QPushButton {
|
||||
background-color: palette(button);
|
||||
color: palette(button-text);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
padding: 6px 12px;
|
||||
font-size: 12px;
|
||||
min-width: 80px;
|
||||
min-height: 30px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #EBECF0;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #DFE1E6;
|
||||
}
|
||||
QPushButton:checked {
|
||||
background-color: palette(highlight);
|
||||
color: #ffffff;
|
||||
border-color: palette(highlight);
|
||||
}
|
||||
""",
|
||||
|
||||
"MEASURE_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/measure_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"MEASURE_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/measure_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
"MEASURE_TEXT_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 0px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextOnly;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"MEASURE_TEXT_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 0px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextOnly;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"CREATE_ZONE_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_zone_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"CREATE_ZONE_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_zone_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"DELETE_ZONE_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/delete_zone_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"DELETE_ZONE_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/delete_zone_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"SELECT_ZONE_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/select_zone_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"SELECT_ZONE_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/select_zone_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
"EDIT_ZONE_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/edit_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"EDIT_ZONE_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/edit_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"CREATE_NEW_MESH_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_mesh_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"CREATE_NEW_MESH_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_mesh_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"USE_CURRENT_MESH_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/use_current_mesh_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"USE_CURRENT_MESH_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/use_current_mesh_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"START_POINT_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/start_point_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"START_POINT_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/start_point_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"CREATE_MESH_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_mesh_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"CREATE_MESH_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_mesh_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
"REMEMBER_POINT_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/remember_point_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"REMEMBER_POINT_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/remember_point_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"SET_GRID_STEP_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/set_step_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"SET_GRID_STEP_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/set_step_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"CREATE_VOLUME_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_volume_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"CREATE_VOLUME_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/create_volume_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"REMEMBER_VOLUME_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/accept_wolume_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"REMEMBER_VOLUME_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 16px;
|
||||
padding-left: 6px;
|
||||
qproperty-icon: url("gui/components/icons/accept_wolume_white.png");
|
||||
qproperty-iconSize: 18px 18px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
"MODEL_TOGGLE": """
|
||||
QToolButton {
|
||||
background-color: transparent;
|
||||
color: white;
|
||||
border: 1px solid #555555;
|
||||
font-size: 14px;
|
||||
padding-left: 6px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:disabled {
|
||||
background-color: #1f1f1f;
|
||||
color: #7a7a7a;
|
||||
border: 1px solid #2a2a2a;
|
||||
}
|
||||
QToolButton:hover { background-color: #4a4a4a; }
|
||||
QToolButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"MODEL_TOGGLE_ACTIVE": """
|
||||
QToolButton {
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
border: 1px solid #cfcfcf;
|
||||
font-size: 14px;
|
||||
padding-left: 6px;
|
||||
qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
|
||||
}
|
||||
QToolButton:hover { background-color: #6a6a6a; }
|
||||
QToolButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
"STANDARD_BUTTON_DARK_THEME": """
|
||||
QPushButton {
|
||||
background-color: #3c3c3c;
|
||||
color: white;
|
||||
border: none;
|
||||
font-size: 16px;
|
||||
text-align: left;
|
||||
border-radius: 0px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
QPushButton:hover { background-color: #4a4a4a; }
|
||||
QPushButton:pressed { background-color: #5a5a5a; }
|
||||
QPushButton:disabled {
|
||||
background-color: #2e2e2e;
|
||||
color: #606060;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"STANDARD_BUTTON_DARK_THEME_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: #5a5a5a;
|
||||
color: white;
|
||||
border: none;
|
||||
font-size: 16px;
|
||||
text-align: left;
|
||||
border-radius: 0px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
QPushButton:hover { background-color: #6a6a6a; }
|
||||
QPushButton:pressed { background-color: #7a7a7a; }
|
||||
QPushButton:disabled {
|
||||
background-color: #2e2e2e;
|
||||
color: #606060;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"STANDARD_BUTTON_LIGHT_THEME": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #DFE1E6;
|
||||
font-size: 16px;
|
||||
border-radius: 0px;
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #EBECF0;
|
||||
border-color: #DFE1E6;
|
||||
}
|
||||
QPushButton:pressed { background-color: #DFE1E6; }
|
||||
QPushButton:disabled {
|
||||
background-color: #F4F5F7;
|
||||
color: #B3BAC5;
|
||||
border: 1px solid #EBECF0;
|
||||
}
|
||||
""",
|
||||
|
||||
"STANDARD_BUTTON_LIGHT_THEME_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #0C66E4;
|
||||
border: 1px solid #85B8FF;
|
||||
font-size: 16px;
|
||||
border-radius: 0px;
|
||||
font-weight: 600;
|
||||
text-align: left;
|
||||
padding-left: 10px;
|
||||
}
|
||||
QPushButton:hover { background-color: #EBECF0; }
|
||||
QPushButton:pressed { background-color: #DFE1E6; }
|
||||
QPushButton:disabled {
|
||||
background-color: #F4F5F7;
|
||||
color: #B3BAC5;
|
||||
border: 1px solid #EBECF0;
|
||||
font-weight: normal;
|
||||
}
|
||||
""",
|
||||
|
||||
"TAB_BUTTON_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: #5a5a5a;
|
||||
color: white;
|
||||
border: 1px solid #6A6A6A;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
border-radius: 0px;
|
||||
margin 10px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #6a6a6a;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #7a7a7a;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #2e2e2e;
|
||||
color: #606060;
|
||||
border: 1px solid #333333;
|
||||
}
|
||||
""",
|
||||
|
||||
"TAB_BUTTON_NORMAL": """
|
||||
QPushButton {
|
||||
background-color: #3c3c3c;
|
||||
color: #DCDCDC;
|
||||
border: 1px solid #3A3A3A;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
border-radius: 0px;
|
||||
margin 10px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #4a4a4a;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #5a5a5a;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #2e2e2e;
|
||||
color: #606060;
|
||||
border: 1px solid #333333;
|
||||
}
|
||||
""",
|
||||
|
||||
"VISUALIZATION_BUTTON_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: #0078d4;
|
||||
color: #ffffff;
|
||||
border: 1px solid #0078d4;
|
||||
border-radius: 0px;
|
||||
padding: 4px 8px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #106ebe;
|
||||
border-color: #106ebe;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #005a9e;
|
||||
}
|
||||
""",
|
||||
|
||||
"VISUALIZATION_BUTTON_FILL": """
|
||||
QPushButton {
|
||||
background-color: palette(button);
|
||||
color: palette(button-text);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
padding: 4px 8px;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover {
|
||||
border-color: palette(highlight);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: palette(light);
|
||||
}
|
||||
""",
|
||||
"TAB_BUTTON_ACTIVE_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #0C66E4;
|
||||
border: 1px solid #85B8FF;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
border-radius: 0px;
|
||||
margin 10px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #EBECF0;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #DFE1E6;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #F4F5F7;
|
||||
color: #B3BAC5;
|
||||
border: 1px solid #EBECF0;
|
||||
}
|
||||
""",
|
||||
|
||||
"TAB_BUTTON_NORMAL_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #DFE1E6;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
border-radius: 0px;
|
||||
margin 10px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #EBECF0;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #DFE1E6;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #F4F5F7;
|
||||
color: #B3BAC5;
|
||||
border: 1px solid #EBECF0;
|
||||
}
|
||||
""",
|
||||
|
||||
"RACK_TAB_BUTTON_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: #5F738A;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #6F8298;
|
||||
border-radius: 3px;
|
||||
padding: 2px 8px;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #6A7F97;
|
||||
border-color: #7A8FA6;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #52657A;
|
||||
border-color: #62778D;
|
||||
}
|
||||
""",
|
||||
|
||||
"RACK_TAB_BUTTON_NORMAL": """
|
||||
QPushButton {
|
||||
background-color: #3A3F45;
|
||||
color: #D9DEE3;
|
||||
border: 1px solid #4A5058;
|
||||
border-radius: 3px;
|
||||
padding: 2px 8px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #434A53;
|
||||
border-color: #5A616A;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #4D5661;
|
||||
border-color: #636D78;
|
||||
}
|
||||
""",
|
||||
|
||||
"RACK_TAB_BUTTON_ACTIVE_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #DCEBFF;
|
||||
color: #0C66E4;
|
||||
border: 1px solid #85B8FF;
|
||||
border-radius: 3px;
|
||||
padding: 2px 8px;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #CFE1FF;
|
||||
border-color: #6FA8FF;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #BFD6FF;
|
||||
border-color: #5D9BFF;
|
||||
}
|
||||
""",
|
||||
|
||||
"RACK_TAB_BUTTON_NORMAL_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 3px;
|
||||
padding: 2px 8px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #F4F5F7;
|
||||
border-color: #CDD4DD;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #EBECF0;
|
||||
border-color: #C1C7D0;
|
||||
}
|
||||
""",
|
||||
}
|
||||
|
||||
_ICONS_DIR = Path(__file__).resolve().parents[1] / "components" / "icons"
|
||||
|
||||
|
||||
def _replace_white_icons_with_black(style_text: str) -> str:
|
||||
"""Заменить *_white.png на *_black.png, только если файл чёрной иконки существует."""
|
||||
pattern = re.compile(r'([a-z0-9_]+)_white\.png', re.IGNORECASE)
|
||||
|
||||
def _swap(match):
|
||||
icon_base = match.group(1)
|
||||
black_name = f"{icon_base}_black.png"
|
||||
if (_ICONS_DIR / black_name).exists():
|
||||
return black_name
|
||||
return match.group(0)
|
||||
|
||||
return pattern.sub(_swap, style_text)
|
||||
|
||||
|
||||
def _make_light_toggle_style(style_text: str, is_active: bool = False) -> str:
|
||||
"""Построить читаемый вариант светлой темы для стилей QToolButton панели инструментов зон."""
|
||||
result = _replace_white_icons_with_black(style_text)
|
||||
replacements = [
|
||||
("color: white;", f"color: {LIGHT_TEXT_PRIMARY};"),
|
||||
("color: #ffffff;", f"color: {LIGHT_TEXT_PRIMARY};"),
|
||||
("border: 1px solid #555555;", f"border: 1px solid {LIGHT_BORDER};"),
|
||||
("QToolButton:hover { background-color: #4a4a4a; }", f"QToolButton:hover {{ background-color: {LIGHT_HOVER}; }}"),
|
||||
("QToolButton:pressed { background-color: #5a5a5a; }", f"QToolButton:pressed {{ background-color: {LIGHT_PRESSED}; }}"),
|
||||
("background-color: #1f1f1f;", f"background-color: {LIGHT_PANEL};"),
|
||||
("color: #7a7a7a;", f"color: {LIGHT_TEXT_SECONDARY};"),
|
||||
("border: 1px solid #2a2a2a;", f"border: 1px solid {LIGHT_BORDER};"),
|
||||
]
|
||||
for old, new in replacements:
|
||||
result = result.replace(old, new)
|
||||
|
||||
if is_active:
|
||||
result = result.replace(
|
||||
"background-color: rgba(255, 255, 255, 0.3);",
|
||||
f"background-color: {LIGHT_ACCENT_SOFT};",
|
||||
)
|
||||
result = result.replace("border: 1px solid #cfcfcf;", f"border: 1px solid {LIGHT_ACCENT_BORDER};")
|
||||
result = result.replace("QToolButton:hover { background-color: #6a6a6a; }", "QToolButton:hover { background-color: #CFE1FF; }")
|
||||
result = result.replace("QToolButton:pressed { background-color: #7a7a7a; }", "QToolButton:pressed { background-color: #B3D4FF; }")
|
||||
else:
|
||||
result = result.replace("background-color: transparent;", f"background-color: {LIGHT_PANEL};")
|
||||
result = result.replace("color: #9a9a9a;", f"color: {LIGHT_TEXT_DISABLED};")
|
||||
result = result.replace("color: #1a1a1a;", f"color: {LIGHT_TEXT_PRIMARY};")
|
||||
return result
|
||||
|
||||
|
||||
_ZONE_TOOL_TOGGLE_KEYS = (
|
||||
"MEASURE_TEXT_TOGGLE",
|
||||
"MEASURE_TEXT_TOGGLE_ACTIVE",
|
||||
"CREATE_ZONE_TOGGLE",
|
||||
"CREATE_ZONE_TOGGLE_ACTIVE",
|
||||
"DELETE_ZONE_TOGGLE",
|
||||
"DELETE_ZONE_TOGGLE_ACTIVE",
|
||||
"SELECT_ZONE_TOGGLE",
|
||||
"SELECT_ZONE_TOGGLE_ACTIVE",
|
||||
"EDIT_ZONE_TOGGLE",
|
||||
"EDIT_ZONE_TOGGLE_ACTIVE",
|
||||
"CREATE_NEW_MESH_TOGGLE",
|
||||
"CREATE_NEW_MESH_TOGGLE_ACTIVE",
|
||||
"USE_CURRENT_MESH_TOGGLE",
|
||||
"USE_CURRENT_MESH_TOGGLE_ACTIVE",
|
||||
"START_POINT_TOGGLE",
|
||||
"START_POINT_TOGGLE_ACTIVE",
|
||||
"REMEMBER_POINT_TOGGLE",
|
||||
"REMEMBER_POINT_TOGGLE_ACTIVE",
|
||||
"SET_GRID_STEP_TOGGLE",
|
||||
"SET_GRID_STEP_TOGGLE_ACTIVE",
|
||||
"CREATE_VOLUME_TOGGLE",
|
||||
"CREATE_VOLUME_TOGGLE_ACTIVE",
|
||||
"REMEMBER_VOLUME_TOGGLE",
|
||||
"REMEMBER_VOLUME_TOGGLE_ACTIVE",
|
||||
"MODEL_TOGGLE",
|
||||
"MODEL_TOGGLE_ACTIVE",
|
||||
)
|
||||
|
||||
for _key in _ZONE_TOOL_TOGGLE_KEYS:
|
||||
_style = BUTTONS.get(_key)
|
||||
if _style:
|
||||
BUTTONS[f"{_key}_LIGHT"] = _make_light_toggle_style(
|
||||
_style,
|
||||
is_active=_key.endswith("_ACTIVE"),
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Module workflow notes
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
# 1) Назначение модуля:
|
||||
# Определение всех стилей (QSS) для кнопок приложения: primary, secondary,
|
||||
# standard, tab, visualization, toggle-кнопки инструментов (measure, zone,
|
||||
# mesh, volume, model и др.) в тёмной и светлой темах. Содержит автогенерацию
|
||||
# светлых вариантов toggle-стилей через _make_light_toggle_style().
|
||||
#
|
||||
# 2) Зависимости модуля:
|
||||
# Импорты: Path (pathlib), re
|
||||
# Хост/базовый класс: нет (модуль-словарь)
|
||||
# Внешние библиотеки: нет (стандартная библиотека)
|
||||
#
|
||||
# 3) Экспорт:
|
||||
# Словарь BUTTONS: dict[str, str] — ключ → QSS-строка.
|
||||
# Константы цветов светлой темы: LIGHT_TEXT_PRIMARY, LIGHT_TEXT_SECONDARY,
|
||||
# LIGHT_TEXT_DISABLED, LIGHT_PANEL, LIGHT_BORDER, LIGHT_HOVER,
|
||||
# LIGHT_PRESSED, LIGHT_ACCENT_SOFT, LIGHT_ACCENT_BORDER.
|
||||
#
|
||||
# 4) Состояние (поля):
|
||||
# BUTTONS : dict[str, str] — основной реестр стилей кнопок.
|
||||
# _ICONS_DIR : Path — путь к gui/components/icons/ (для подстановки иконок).
|
||||
# _ZONE_TOOL_TOGGLE_KEYS: tuple[str] — ключи toggle-стилей для автогенерации.
|
||||
#
|
||||
# 5) Последовательность действий и вызовов:
|
||||
# 1. Определение словаря BUTTONS с тёмными стилями.
|
||||
# 2. _ICONS_DIR = Path → gui/components/icons/
|
||||
# 3. _replace_white_icons_with_black(style_text) — regex-замена *_white.png
|
||||
# на *_black.png, если файл существует.
|
||||
# 4. _make_light_toggle_style(style_text, is_active) — построение светлого
|
||||
# варианта toggle-стилей: замена цветов, бордюров, hover/pressed.
|
||||
# 5. Цикл по _ZONE_TOOL_TOGGLE_KEYS: для каждого ключа создаётся
|
||||
# BUTTONS["{key}_LIGHT"] через _make_light_toggle_style().
|
||||
#
|
||||
# 6) Побочные эффекты:
|
||||
# Мутирует словарь BUTTONS при импорте модуля — добавляет *_LIGHT ключи.
|
||||
# Проверяет наличие файлов иконок через Path.exists() на этапе импорта.
|
||||
#
|
||||
# 7) Границы ответственности:
|
||||
# НЕ применяет стили к виджетам — только хранит QSS-строки.
|
||||
# НЕ взаимодействует с theme_bus — переключение темы в StylableMixin.
|
||||
# НЕ содержит стили для не-кнопочных виджетов.
|
||||
#
|
||||
# 8) Обработка ошибок:
|
||||
# _replace_white_icons_with_black: если чёрная иконка не найдена —
|
||||
# оригинальное имя сохраняется (fallback).
|
||||
# Нет исключений при отсутствии ключей в BUTTONS.get().
|
||||
#
|
||||
# 9) Инварианты и контракты:
|
||||
# - Каждый toggle-стиль имеет пару: KEY и KEY_ACTIVE.
|
||||
# - Автогенерированные светлые стили имеют суффикс _LIGHT.
|
||||
# - Все QSS-строки — валидный Qt StyleSheet синтаксис.
|
||||
#
|
||||
# 10) Правило сопровождения:
|
||||
# Новые toggle-стили добавлять в BUTTONS + в _ZONE_TOOL_TOGGLE_KEYS
|
||||
# для автогенерации светлого варианта. Иконки _white.png и _black.png
|
||||
# должны существовать парами в gui/components/icons/. При добавлении
|
||||
# non-toggle стилей — добавлять *_LIGHT вариант вручную.
|
||||
439
Dispatch_V0.1.1/gui/styles/inputs.py
Normal file
439
Dispatch_V0.1.1/gui/styles/inputs.py
Normal file
@@ -0,0 +1,439 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/inputs.py
|
||||
|
||||
"""Стили для полей ввода"""
|
||||
|
||||
INPUTS = {
|
||||
|
||||
"COORDINATE_INPUT": """
|
||||
QDoubleSpinBox {
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: palette(base);
|
||||
color: palette(text);
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QDoubleSpinBox:focus {
|
||||
border: 2px solid palette(highlight);
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"COORDINATE_INPUT_DARK": """
|
||||
QDoubleSpinBox {
|
||||
border: 1px solid #5a5a5a;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #2e2e2e;
|
||||
color: #f2f2f2;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QDoubleSpinBox:focus {
|
||||
border: 2px solid #3b82f6;
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"COORDINATE_INPUT_LIGHT": """
|
||||
QDoubleSpinBox {
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QDoubleSpinBox:focus {
|
||||
border: 2px solid #0C66E4;
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"COORDINATE_INPUT_DARK_ACTIVE": """
|
||||
QDoubleSpinBox {
|
||||
border: 2px solid #3b82f6;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #2e2e2e;
|
||||
color: #f2f2f2;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
""",
|
||||
|
||||
"COORDINATE_INPUT_LIGHT_ACTIVE": """
|
||||
QDoubleSpinBox {
|
||||
border: 2px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
""",
|
||||
|
||||
"ERROR_DIALOG_TEXT": """
|
||||
QTextEdit {
|
||||
background-color: white;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 0px;
|
||||
font-family: monospace;
|
||||
font-size: 12px;
|
||||
}
|
||||
""",
|
||||
|
||||
"FORM_WIDGET": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
}
|
||||
QLabel {
|
||||
color: palette(window-text);
|
||||
font-size: 14px;
|
||||
}
|
||||
QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QTextEdit {
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: palette(base);
|
||||
color: palette(text);
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QRadioButton {
|
||||
color: palette(window-text);
|
||||
background-color: transparent;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: palette(base);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: palette(base);
|
||||
border: 2px solid palette(highlight);
|
||||
border-radius: 0px;
|
||||
}
|
||||
QLineEdit:focus, QComboBox:focus, QSpinBox:focus, QDoubleSpinBox:focus, QTextEdit:focus {
|
||||
border: 2px solid palette(highlight);
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"FORM_WIDGET_DARK": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
}
|
||||
QLabel, QRadioButton {
|
||||
color: #f2f2f2;
|
||||
font-size: 14px;
|
||||
}
|
||||
QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QTextEdit {
|
||||
border: 1px solid #5a5a5a;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #2e2e2e;
|
||||
color: #f2f2f2;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: #2e2e2e;
|
||||
border: 1px solid #7a7a7a;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: #2e2e2e;
|
||||
border: 2px solid #3b82f6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QLineEdit:focus, QComboBox:focus, QSpinBox:focus, QDoubleSpinBox:focus, QTextEdit:focus {
|
||||
border: 2px solid #3b82f6;
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"FORM_WIDGET_LIGHT": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
}
|
||||
QLabel, QRadioButton {
|
||||
color: #172B4D;
|
||||
font-size: 14px;
|
||||
}
|
||||
QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QTextEdit {
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: #FFFFFF;
|
||||
border: 2px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QLineEdit:focus, QComboBox:focus, QSpinBox:focus, QDoubleSpinBox:focus, QTextEdit:focus {
|
||||
border: 2px solid #0C66E4;
|
||||
outline: none;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #5E6C84;
|
||||
}
|
||||
""",
|
||||
|
||||
"FORM_WIDGET_DARK_ACTIVE": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
}
|
||||
QLabel {
|
||||
color: #ffffff;
|
||||
font-size: 14px;
|
||||
}
|
||||
QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QTextEdit {
|
||||
border: 2px solid #0078d4;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #333;
|
||||
color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QRadioButton {
|
||||
color: #ffffff;
|
||||
background-color: transparent;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: #666;
|
||||
border: 1px solid #999;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #999;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"FORM_WIDGET_LIGHT_ACTIVE": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
}
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
font-size: 14px;
|
||||
}
|
||||
QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QTextEdit {
|
||||
border: 2px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QRadioButton {
|
||||
color: #172B4D;
|
||||
background-color: transparent;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: #FFFFFF;
|
||||
border: 2px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"TEXT_INPUT": """
|
||||
QLineEdit {
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: palette(base);
|
||||
color: palette(text);
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QLineEdit:focus {
|
||||
border: 2px solid palette(highlight);
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"TEXT_INPUT_DARK": """
|
||||
QLineEdit {
|
||||
border: 1px solid #5a5a5a;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #2e2e2e;
|
||||
color: #f2f2f2;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QLineEdit:focus {
|
||||
border: 2px solid #3b82f6;
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"TEXT_INPUT_LIGHT": """
|
||||
QLineEdit {
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QLineEdit:focus {
|
||||
border: 2px solid #0C66E4;
|
||||
outline: none;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #5E6C84;
|
||||
}
|
||||
""",
|
||||
|
||||
"TEXT_INPUT_DARK_ACTIVE": """
|
||||
QLineEdit {
|
||||
border: 2px solid #0078d4;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #333;
|
||||
color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TEXT_INPUT_LIGHT_ACTIVE": """
|
||||
QLineEdit {
|
||||
border: 2px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
""",
|
||||
|
||||
"RADIO_BUTTON": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
QRadioButton {
|
||||
color: palette(window-text);
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: palette(base);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: palette(base);
|
||||
border: 2px solid palette(highlight);
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"RADIO_BUTTON_DARK": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
QRadioButton {
|
||||
color: #f2f2f2;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: #2e2e2e;
|
||||
border: 1px solid #7a7a7a;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: #2e2e2e;
|
||||
border: 2px solid #3b82f6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"RADIO_BUTTON_LIGHT": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
QRadioButton {
|
||||
color: #172B4D;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
background-color: #FFFFFF;
|
||||
border: 2px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Module workflow notes
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
# 1) Назначение модуля:
|
||||
# Определение QSS-стилей для полей ввода: координатные input'ы
|
||||
# (QDoubleSpinBox), текстовые поля (QLineEdit), формы (QLineEdit +
|
||||
# QComboBox + QSpinBox + QRadioButton + QTextEdit), радио-кнопки.
|
||||
# Поддержка тем: стандартная (palette), dark, light, active-варианты.
|
||||
#
|
||||
# 2) Зависимости модуля:
|
||||
# Импорты: нет
|
||||
# Хост/базовый класс: нет (модуль-словарь)
|
||||
# Внешние библиотеки: нет
|
||||
#
|
||||
# 3) Экспорт:
|
||||
# Словарь INPUTS: dict[str, str] — ключ → QSS-строка.
|
||||
# Ключи: COORDINATE_INPUT, COORDINATE_INPUT_DARK, COORDINATE_INPUT_LIGHT,
|
||||
# ERROR_DIALOG_TEXT, FORM_WIDGET, FORM_WIDGET_DARK, FORM_WIDGET_LIGHT,
|
||||
# FORM_WIDGET_DARK_ACTIVE, FORM_WIDGET_LIGHT_ACTIVE,
|
||||
# TEXT_INPUT, TEXT_INPUT_DARK, TEXT_INPUT_LIGHT,
|
||||
# TEXT_INPUT_DARK_ACTIVE, TEXT_INPUT_LIGHT_ACTIVE,
|
||||
# RADIO_BUTTON, RADIO_BUTTON_DARK, RADIO_BUTTON_LIGHT.
|
||||
#
|
||||
# 4) Состояние (поля):
|
||||
# INPUTS: dict[str, str] — единственный экспортируемый словарь.
|
||||
#
|
||||
# 5) Последовательность действий и вызовов:
|
||||
# Нет вызовов; модуль содержит только декларативные QSS-строки.
|
||||
# Импортируется в gui/styles/__init__.py → APP_STYLES.update(INPUTS).
|
||||
#
|
||||
# 6) Побочные эффекты:
|
||||
# Нет побочных эффектов при импорте.
|
||||
#
|
||||
# 7) Границы ответственности:
|
||||
# НЕ применяет стили — только хранит QSS-строки.
|
||||
# НЕ содержит стили для кнопок, меток или контейнеров.
|
||||
#
|
||||
# 8) Обработка ошибок:
|
||||
# Нет; модуль декларативный.
|
||||
#
|
||||
# 9) Инварианты и контракты:
|
||||
# - Каждый ключ имеет варианты: базовый (palette), _DARK, _LIGHT.
|
||||
# - Active-варианты имеют суффикс _DARK_ACTIVE / _LIGHT_ACTIVE.
|
||||
# - Все QSS-строки — валидный Qt StyleSheet синтаксис.
|
||||
#
|
||||
# 10) Правило сопровождения:
|
||||
# Новые стили полей ввода добавлять сюда, соблюдая паттерн
|
||||
# KEY / KEY_DARK / KEY_LIGHT. Active-варианты — по необходимости.
|
||||
# Не дублировать стили кнопок (→ buttons.py) или меток (→ labels.py).
|
||||
270
Dispatch_V0.1.1/gui/styles/labels.py
Normal file
270
Dispatch_V0.1.1/gui/styles/labels.py
Normal file
@@ -0,0 +1,270 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/labels.py
|
||||
"""Стили для QLabel и текстовых меток"""
|
||||
|
||||
LABELS = {
|
||||
|
||||
"ERROR_LABEL": """
|
||||
color: #c0392b;
|
||||
font-weight: bold;
|
||||
""",
|
||||
|
||||
"INFO_LABEL": """
|
||||
QLabel {
|
||||
font-size: 22px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
"INFO_LABEL_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 22px;
|
||||
font-weight: 600;
|
||||
color: #172B4D;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"INFO_NOTE_LABEL": """
|
||||
color: #42526E;
|
||||
font-size: 12px;
|
||||
""",
|
||||
|
||||
"INFO_TEXT_BORDERED": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: palette(base);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
padding: 4px 8px;
|
||||
qproperty-alignment: 'AlignVCenter | AlignLeft';
|
||||
}
|
||||
""",
|
||||
"INFO_TEXT_BORDERED_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #172B4D;
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
padding: 4px 8px;
|
||||
qproperty-alignment: 'AlignVCenter | AlignLeft';
|
||||
}
|
||||
""",
|
||||
|
||||
"INFO_TEXT_GRAY": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignBottom | AlignLeft';
|
||||
}
|
||||
""",
|
||||
|
||||
"INFO_TEXT_GRAY_SMALL": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignBottom | AlignLeft';
|
||||
}
|
||||
""",
|
||||
|
||||
"INFO_TEXT": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
border: none;
|
||||
padding: 8px 0px;
|
||||
qproperty-alignment: 'AlignBottom | AlignLeft';
|
||||
}
|
||||
""",
|
||||
|
||||
"MODULE_TITLE": """
|
||||
QLabel {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
color: palette(window-text);
|
||||
margin-bottom: 10px;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
"MODULE_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
color: #172B4D;
|
||||
margin-bottom: 10px;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"PROJECT_TREE_LABEL": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: palette(base);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
|
||||
min-width: 400px;
|
||||
min-height: 200px;
|
||||
}
|
||||
""",
|
||||
|
||||
"STATUS_LABEL": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
color: palette(window-text);
|
||||
background-color: palette(base);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
""",
|
||||
"STATUS_LABEL_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
color: #172B4D;
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TITLE_BAR": """
|
||||
QLabel {
|
||||
background-color: #3C3C3C;
|
||||
color: palette(button-text);
|
||||
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: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
""",
|
||||
"TITLE_BAR_LIGHT": """
|
||||
QLabel {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-top-left-radius: 0px;
|
||||
border-top-right-radius: 0px;
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
""",
|
||||
"WIDGET_LABEL": """
|
||||
QLabel {
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
color: palette(window-text);
|
||||
background-color: palette(base);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 0px;
|
||||
min-width: 400px;
|
||||
min-height: 200px;
|
||||
}
|
||||
""",
|
||||
|
||||
"ZONE_PROPERTIES_TITLE": """
|
||||
QLabel {
|
||||
background-color: #3C3C3C;
|
||||
color: palette(button-text);
|
||||
border-left: 0px;
|
||||
border-right: 0px;
|
||||
border-top: 0px;
|
||||
border-bottom: 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: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
""",
|
||||
"ZONE_PROPERTIES_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: #F4F5F7;
|
||||
color: #172B4D;
|
||||
border-left: 0px;
|
||||
border-right: 0px;
|
||||
border-top: 0px;
|
||||
border-bottom: 1px solid #DFE1E6;
|
||||
border-top-left-radius: 0px;
|
||||
border-top-right-radius: 0px;
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
""",
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Module workflow notes
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
# 1) Назначение модуля:
|
||||
# Определение QSS-стилей для QLabel и текстовых меток: заголовки модулей,
|
||||
# информационные метки, статусные строки, title bar'ы, зонные заголовки
|
||||
# свойств, метки проектного дерева и стилизованные виджет-метки.
|
||||
# Поддержка тем: стандартная (palette) и _LIGHT-варианты.
|
||||
#
|
||||
# 2) Зависимости модуля:
|
||||
# Импорты: нет
|
||||
# Хост/базовый класс: нет (модуль-словарь)
|
||||
# Внешние библиотеки: нет
|
||||
#
|
||||
# 3) Экспорт:
|
||||
# Словарь LABELS: dict[str, str] — ключ → QSS-строка.
|
||||
# Ключи: ERROR_LABEL, INFO_LABEL, INFO_LABEL_LIGHT, INFO_NOTE_LABEL,
|
||||
# INFO_TEXT_BORDERED, INFO_TEXT_BORDERED_LIGHT, INFO_TEXT_GRAY,
|
||||
# INFO_TEXT_GRAY_SMALL, INFO_TEXT, MODULE_TITLE, MODULE_TITLE_LIGHT,
|
||||
# PROJECT_TREE_LABEL, STATUS_LABEL, STATUS_LABEL_LIGHT,
|
||||
# TITLE_BAR, TITLE_BAR_LIGHT, WIDGET_LABEL,
|
||||
# ZONE_PROPERTIES_TITLE, ZONE_PROPERTIES_TITLE_LIGHT.
|
||||
#
|
||||
# 4) Состояние (поля):
|
||||
# LABELS: dict[str, str] — единственный экспортируемый словарь.
|
||||
#
|
||||
# 5) Последовательность действий и вызовов:
|
||||
# Нет вызовов; модуль декларативный.
|
||||
# Импортируется в gui/styles/__init__.py → APP_STYLES.update(LABELS).
|
||||
#
|
||||
# 6) Побочные эффекты:
|
||||
# Нет побочных эффектов при импорте.
|
||||
#
|
||||
# 7) Границы ответственности:
|
||||
# НЕ применяет стили — только хранит QSS-строки.
|
||||
# НЕ содержит стили для кнопок (→ buttons.py) или полей ввода (→ inputs.py).
|
||||
#
|
||||
# 8) Обработка ошибок:
|
||||
# Нет; модуль декларативный.
|
||||
#
|
||||
# 9) Инварианты и контракты:
|
||||
# - Каждый ключ с поддержкой светлой темы имеет суффикс _LIGHT.
|
||||
# - Все QSS-строки — валидный Qt StyleSheet синтаксис.
|
||||
# - ERROR_LABEL использует inline-стиль (без селектора QLabel {}).
|
||||
#
|
||||
# 10) Правило сопровождения:
|
||||
# Новые стили меток добавлять сюда по паттерну KEY / KEY_LIGHT.
|
||||
# Для стилей с qproperty-alignment использовать строковые значения
|
||||
# Qt ('AlignVCenter | AlignLeft'). Не смешивать стили кнопок и меток.
|
||||
250
Dispatch_V0.1.1/gui/styles/login_dialog.py
Normal file
250
Dispatch_V0.1.1/gui/styles/login_dialog.py
Normal file
@@ -0,0 +1,250 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/login_dialog.py
|
||||
|
||||
"""Стили для диалога авторизации."""
|
||||
|
||||
LOGIN_DIALOG = {
|
||||
|
||||
"LOGIN_DIALOG_DARK": """
|
||||
QDialog {
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_DIALOG_LIGHT": """
|
||||
QDialog {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_TITLE_DARK": """
|
||||
QLabel {
|
||||
color: #f2f2f2;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_FIELD_LABEL_DARK": """
|
||||
QLabel {
|
||||
color: #b0b0b0;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_FIELD_LABEL_LIGHT": """
|
||||
QLabel {
|
||||
color: #5E6C84;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_INPUT_DARK": """
|
||||
QFrame {
|
||||
background-color: #2e2e2e;
|
||||
border: 1px solid #5a5a5a;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QLineEdit, QTextEdit {
|
||||
background-color: #2e2e2e;
|
||||
color: #f2f2f2;
|
||||
border: none;
|
||||
font-size: 14px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QLineEdit:focus, QTextEdit:focus {
|
||||
border: 1px solid #3b82f6;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #7a7a7a;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_INPUT_LIGHT": """
|
||||
QFrame {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QLineEdit, QTextEdit {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: none;
|
||||
font-size: 14px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QLineEdit:focus, QTextEdit:focus {
|
||||
border: 1px solid #0C66E4;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #5E6C84;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_INPUT_ERROR_DARK": """
|
||||
QFrame {
|
||||
background-color: #2e2e2e;
|
||||
border: 2px solid #e74c3c;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QLineEdit, QTextEdit {
|
||||
background-color: #2e2e2e;
|
||||
color: #f2f2f2;
|
||||
border: none;
|
||||
font-size: 14px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QLineEdit:focus, QTextEdit:focus {
|
||||
border: 1px solid #e74c3c;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #7a7a7a;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_INPUT_ERROR_LIGHT": """
|
||||
QFrame {
|
||||
background-color: #FFFFFF;
|
||||
border: 2px solid #e74c3c;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QLineEdit, QTextEdit {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: none;
|
||||
font-size: 14px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
QLineEdit:focus, QTextEdit:focus {
|
||||
border: 1px solid #e74c3c;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #5E6C84;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_ERROR_LABEL_DARK": """
|
||||
QLabel {
|
||||
color: #e74c3c;
|
||||
font-size: 12px;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_ERROR_LABEL_LIGHT": """
|
||||
QLabel {
|
||||
color: #e74c3c;
|
||||
font-size: 12px;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_NAV_BUTTON_DARK": """
|
||||
QPushButton {
|
||||
background-color: #3c3c3c;
|
||||
color: white;
|
||||
border: none;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QPushButton:hover { background-color: #4a4a4a; }
|
||||
QPushButton:pressed { background-color: #5a5a5a; }
|
||||
""",
|
||||
|
||||
"LOGIN_NAV_BUTTON_DARK_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: #5a5a5a;
|
||||
color: white;
|
||||
border: none;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QPushButton:hover { background-color: #6a6a6a; }
|
||||
QPushButton:pressed { background-color: #7a7a7a; }
|
||||
""",
|
||||
|
||||
"LOGIN_NAV_BUTTON_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #DFE1E6;
|
||||
font-size: 16px;
|
||||
border-radius: 0px;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #EBECF0;
|
||||
border-color: #DFE1E6;
|
||||
}
|
||||
QPushButton:pressed { background-color: #DFE1E6; }
|
||||
""",
|
||||
|
||||
"LOGIN_NAV_BUTTON_LIGHT_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #0C66E4;
|
||||
border: 1px solid #85B8FF;
|
||||
font-size: 16px;
|
||||
border-radius: 0px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover { background-color: #EBECF0; }
|
||||
QPushButton:pressed { background-color: #DFE1E6; }
|
||||
""",
|
||||
|
||||
"LOGIN_CANCEL_BUTTON": """
|
||||
QPushButton {
|
||||
background-color: transparent;
|
||||
color: #6B84A5;
|
||||
border: 1px solid #D7DEE8;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: rgba(12, 102, 228, 0.06);
|
||||
border-color: #A8B8CF;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: rgba(12, 102, 228, 0.10);
|
||||
}
|
||||
""",
|
||||
|
||||
"LOGIN_SUBMIT_BUTTON": """
|
||||
QPushButton {
|
||||
background-color: #0C66E4;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
padding: 8px 16px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #0055CC;
|
||||
border-color: #0055CC;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #09326C;
|
||||
border-color: #09326C;
|
||||
}
|
||||
""",
|
||||
}
|
||||
199
Dispatch_V0.1.1/gui/styles/profile_dossier.py
Normal file
199
Dispatch_V0.1.1/gui/styles/profile_dossier.py
Normal file
@@ -0,0 +1,199 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/profile_dossier.py
|
||||
|
||||
"""Стили карточки досье сотрудника (Profile Dossier)."""
|
||||
|
||||
PROFILE_DOSSIER: dict[str, str] = {
|
||||
# ── Контейнер страницы (самый глубокий фон — как TICKET_SHELL_ROOT) ──
|
||||
"DOSSIER_SPREAD_DARK": """
|
||||
QWidget {
|
||||
background-color: #232323;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"DOSSIER_SPREAD_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #F4F5F7;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Колонка (средний слой — как TICKET_BOARD_COLUMN_BODY) ────
|
||||
"DOSSIER_COLUMN_DARK": """
|
||||
QWidget {
|
||||
background-color: #2B2B2B;
|
||||
}
|
||||
""",
|
||||
"DOSSIER_COLUMN_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Блок секции данных (верхний слой — как TASK_CARD) ────────
|
||||
"DOSSIER_DATA_BLOCK_DARK": """
|
||||
QWidget {
|
||||
background-color: #3C3C3C;
|
||||
border: 1px solid #5A5A5A;
|
||||
}
|
||||
""",
|
||||
"DOSSIER_DATA_BLOCK_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Вертикальный разделитель ─────────────────────────────────
|
||||
"DOSSIER_DIVIDER_DARK": """
|
||||
QWidget {
|
||||
background-color: #444444;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
"DOSSIER_DIVIDER_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #DFE1E6;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Внутренний контейнер (сброс наследования от родителя) ───────
|
||||
"DOSSIER_INNER_DARK": """
|
||||
QWidget {
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
"DOSSIER_INNER_LIGHT": """
|
||||
QWidget {
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
|
||||
# ── Текст заголовка секции ───────────────────────────────────
|
||||
"DOSSIER_TITLE_HEADER_DARK": """
|
||||
QLabel {
|
||||
color: #7CB9FF;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
padding: 4px 10px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignVCenter | AlignHorizontalCenter';
|
||||
}
|
||||
""",
|
||||
"DOSSIER_TITLE_HEADER_LIGHT": """
|
||||
QLabel {
|
||||
color: #0C66E4;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
padding: 4px 10px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignVCenter';
|
||||
}
|
||||
""",
|
||||
"DOSSIER_SECTION_TITLE_DARK": """
|
||||
QLabel {
|
||||
color: #7CB9FF;
|
||||
font-size: 40px;
|
||||
font-weight: 600;
|
||||
padding: 4px 10px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignVCenter | AlignHorizontalCenter';
|
||||
}
|
||||
""",
|
||||
"DOSSIER_SECTION_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
color: #0C66E4;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
padding: 4px 10px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignVCenter';
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Контейнер фотографии ─────────────────────────────────────
|
||||
"DOSSIER_PHOTO_DARK": """
|
||||
QWidget {
|
||||
background-color: #363636;
|
||||
border: 1px solid #4a4a4a;
|
||||
}
|
||||
""",
|
||||
"DOSSIER_PHOTO_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #F4F5F7;
|
||||
border: 1px solid #DFE1E6;
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Подпись поля ─────────────────────────────────────────────
|
||||
"DOSSIER_FIELD_LABEL_DARK": """
|
||||
QLabel {
|
||||
color: #8B95A5;
|
||||
font-size: 13px;
|
||||
padding: 2px 6px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
"DOSSIER_FIELD_LABEL_LIGHT": """
|
||||
QLabel {
|
||||
color: #6B778C;
|
||||
font-size: 13px;
|
||||
padding: 2px 6px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Значение поля ────────────────────────────────────────────
|
||||
"DOSSIER_FIELD_VALUE_DARK": """
|
||||
QLabel {
|
||||
color: #DCDCDC;
|
||||
font-size: 14px;
|
||||
padding: 2px 18px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft';
|
||||
}
|
||||
""",
|
||||
"DOSSIER_FIELD_VALUE_LIGHT": """
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
font-size: 14px;
|
||||
padding: 2px 18px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft';
|
||||
}
|
||||
""",
|
||||
|
||||
# ── Текст «Фото отсутствует» ────────────────────────────────
|
||||
"DOSSIER_NO_PHOTO_DARK": """
|
||||
QLabel {
|
||||
color: #2B2B2B;
|
||||
font-size: 13px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
"DOSSIER_NO_PHOTO_LIGHT": """
|
||||
QLabel {
|
||||
color: #F7F8F9;
|
||||
font-size: 13px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
}
|
||||
342
Dispatch_V0.1.1/gui/styles/quality_assurance.py
Normal file
342
Dispatch_V0.1.1/gui/styles/quality_assurance.py
Normal file
@@ -0,0 +1,342 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/quality_assurance.py
|
||||
|
||||
"""Styles for Quality Assurance pages."""
|
||||
|
||||
|
||||
QUALITY_ASSURANCE: dict[str, str] = {
|
||||
"QA_PAGE_TITLE_DARK": """
|
||||
QLabel {
|
||||
color: #E6EDF7;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignVCenter';
|
||||
}
|
||||
""",
|
||||
"QA_PAGE_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignVCenter';
|
||||
}
|
||||
""",
|
||||
"QA_SECTION_TITLE_DARK": """
|
||||
QLabel {
|
||||
color: #E6EDF7;
|
||||
font-size: 22px;
|
||||
font-weight: 700;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignVCenter';
|
||||
}
|
||||
""",
|
||||
"QA_SECTION_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
font-size: 22px;
|
||||
font-weight: 700;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignVCenter';
|
||||
}
|
||||
""",
|
||||
"QA_PLACEHOLDER_DESCRIPTION_DARK": """
|
||||
QLabel {
|
||||
color: #B8C0CC;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
"QA_PLACEHOLDER_DESCRIPTION_LIGHT": """
|
||||
QLabel {
|
||||
color: #42526E;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
"QA_PLACEHOLDER_NOTE_DARK": """
|
||||
QLabel {
|
||||
color: #8C9BAB;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
"QA_PLACEHOLDER_NOTE_LIGHT": """
|
||||
QLabel {
|
||||
color: #5E6C84;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
padding: 0px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
"QA_ADMIN_INFO_COMBO_DARK": """
|
||||
QComboBox {
|
||||
border: 1px solid #5a5a5a;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #2e2e2e;
|
||||
color: #A7B3C2;
|
||||
padding: 4px 8px;
|
||||
combobox-popup: 0;
|
||||
}
|
||||
QComboBox:focus {
|
||||
border: 2px solid #3b82f6;
|
||||
outline: none;
|
||||
}
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: #2e2e2e;
|
||||
color: #E6EDF7;
|
||||
selection-background-color: #3b82f6;
|
||||
selection-color: #FFFFFF;
|
||||
border: 1px solid #5a5a5a;
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
"QA_ADMIN_INFO_COMBO_LIGHT": """
|
||||
QComboBox {
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 0px;
|
||||
font-size: 14px;
|
||||
background-color: #FFFFFF;
|
||||
color: #7A869A;
|
||||
padding: 4px 8px;
|
||||
combobox-popup: 0;
|
||||
}
|
||||
QComboBox:focus {
|
||||
border: 2px solid #0C66E4;
|
||||
outline: none;
|
||||
}
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
selection-background-color: #0C66E4;
|
||||
selection-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
outline: none;
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_NEW_DOCUMENT_REQUEST": """
|
||||
QPushButton {
|
||||
background-color: #6B86CC;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #6B86CC;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #6B86CC;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #6B86CC;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_UNDER_REVIEW": """
|
||||
QPushButton {
|
||||
background-color: #AD71DD;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #AD71DD;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #AD71DD;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #AD71DD;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_IN_DRAFTING": """
|
||||
QPushButton {
|
||||
background-color: #6B86CC;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #6B86CC;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #6B86CC;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #6B86CC;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_IN_APPROVAL": """
|
||||
QPushButton {
|
||||
background-color: #C2945E;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #C2945E;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #C2945E;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #C2945E;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_TO_BE_SIGNED": """
|
||||
QPushButton {
|
||||
background-color: #D86727;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #D86727;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #D86727;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #D86727;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_PUBLISHED": """
|
||||
QPushButton {
|
||||
background-color: #58B522;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #58B522;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #58B522;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #58B522;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_CLOSED_ARCHIVED": """
|
||||
QPushButton {
|
||||
background-color: #96A0B6;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #96A0B6;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #96A0B6;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #96A0B6;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
"QA_DESIGN_BOARD_CANCELLED": """
|
||||
QPushButton {
|
||||
background-color: #DB3C3C;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid rgba(255, 255, 255, 0.16);
|
||||
border-radius: 0px;
|
||||
padding: 20px 16px;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #DB3C3C;
|
||||
border: 1px solid rgba(255, 255, 255, 0.34);
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #DB3C3C;
|
||||
border: 1px solid rgba(0, 0, 0, 0.22);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #DB3C3C;
|
||||
color: rgba(255, 255, 255, 0.70);
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
""",
|
||||
}
|
||||
590
Dispatch_V0.1.1/gui/styles/quality_assurance_word_workspace.py
Normal file
590
Dispatch_V0.1.1/gui/styles/quality_assurance_word_workspace.py
Normal file
@@ -0,0 +1,590 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/quality_assurance_word_workspace.py
|
||||
"""Стили ленты QA Word workspace.
|
||||
|
||||
Словарь читается сверху вниз в порядке визуальной иерархии ленты:
|
||||
|
||||
1. Поверхности (ribbon surface, topbar, tab strip, group, style card).
|
||||
2. Кнопки верхней панели (badge, topbar button, topbar toggle).
|
||||
3. Вкладки (file tab, tab, tab active).
|
||||
4. Инструменты ribbon (large button, tool button).
|
||||
5. Поля ввода (combo, search).
|
||||
6. Текстовые метки (topbar text, topbar title, group title,
|
||||
style text, style caption).
|
||||
|
||||
Каждая пара `*_DARK` / `*_LIGHT` — две темы одного ключа, записанные
|
||||
рядом. Все значения (цвета, размеры, вес, отступы) указаны прямо
|
||||
в QSS-строке, без промежуточных helper-функций.
|
||||
"""
|
||||
|
||||
QUALITY_ASSURANCE_WORD_WORKSPACE = {
|
||||
# =====================================================================
|
||||
# 1. Поверхности
|
||||
# =====================================================================
|
||||
|
||||
# --- Общая поверхность ленты ----------------------------------------
|
||||
"QA_WORD_WORKSPACE_RIBBON_SURFACE_DARK": """
|
||||
QWidget {
|
||||
background-color: #1E1F21;
|
||||
border: 1px solid #2B2D31;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_RIBBON_SURFACE_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #F4F6F8;
|
||||
border: 1px solid #D8DEE6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Верхняя панель --------------------------------------------------
|
||||
"QA_WORD_WORKSPACE_TOPBAR_DARK": """
|
||||
QWidget {
|
||||
background-color: #1F2023;
|
||||
border: 1px solid #1F2023;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TOPBAR_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #D6DAE1;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Полоса вкладок --------------------------------------------------
|
||||
"QA_WORD_WORKSPACE_TAB_STRIP_DARK": """
|
||||
QWidget {
|
||||
background-color: #242629;
|
||||
border: 1px solid #34373B;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TAB_STRIP_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #D6DAE1;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Ribbon-группа ---------------------------------------------------
|
||||
"QA_WORD_WORKSPACE_GROUP_DARK": """
|
||||
QWidget {
|
||||
background-color: #242629;
|
||||
border: 1px solid #3A3D42;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_GROUP_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #D8DEE6;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Карточка стиля (обычная / активная) -----------------------------
|
||||
"QA_WORD_WORKSPACE_STYLE_CARD_DARK": """
|
||||
QWidget {
|
||||
background-color: #FBFBFC;
|
||||
border: 1px solid #D6DAE1;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_STYLE_CARD_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #D6DAE1;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_STYLE_CARD_ACTIVE_DARK": """
|
||||
QWidget {
|
||||
background-color: #FBFBFC;
|
||||
border: 1px solid #679B62;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_STYLE_CARD_ACTIVE_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #679B62;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# =====================================================================
|
||||
# 2. Кнопки верхней панели
|
||||
# =====================================================================
|
||||
|
||||
# --- Логотип-бейдж «W» -----------------------------------------------
|
||||
"QA_WORD_WORKSPACE_BADGE_DARK": """
|
||||
QPushButton {
|
||||
background-color: #185ABD;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #185ABD;
|
||||
border-radius: 0px;
|
||||
padding: 2px 0px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #2A6DCE; border-color: #2A6DCE; }
|
||||
QPushButton:pressed { background-color: #15499A; border-color: #15499A; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_BADGE_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #185ABD;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #185ABD;
|
||||
border-radius: 0px;
|
||||
padding: 2px 0px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #2A6DCE; border-color: #2A6DCE; }
|
||||
QPushButton:pressed { background-color: #15499A; border-color: #15499A; }
|
||||
""",
|
||||
|
||||
# --- Стандартная кнопка верхней панели (Save/Undo/Redo/окно) ---------
|
||||
"QA_WORD_WORKSPACE_TOPBAR_BUTTON_DARK": """
|
||||
QPushButton {
|
||||
background-color: #25282C;
|
||||
color: #F1F3F5;
|
||||
border: 1px solid #3C4045;
|
||||
border-radius: 0px;
|
||||
padding: 3px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #33373C; border-color: #33373C; }
|
||||
QPushButton:pressed { background-color: #202327; border-color: #202327; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TOPBAR_BUTTON_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #243248;
|
||||
border: 1px solid #D1D8E2;
|
||||
border-radius: 0px;
|
||||
padding: 3px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #EFF3F7; border-color: #EFF3F7; }
|
||||
QPushButton:pressed { background-color: #E4EAF1; border-color: #E4EAF1; }
|
||||
""",
|
||||
|
||||
# --- Переключатель «On» автосохранения -------------------------------
|
||||
"QA_WORD_WORKSPACE_TOPBAR_TOGGLE_DARK": """
|
||||
QPushButton {
|
||||
background-color: #4D535A;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #4D535A;
|
||||
border-radius: 0px;
|
||||
padding: 3px 8px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #5B626A; border-color: #5B626A; }
|
||||
QPushButton:pressed { background-color: #43494F; border-color: #43494F; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TOPBAR_TOGGLE_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #CFD8E3;
|
||||
color: #172B4D;
|
||||
border: 1px solid #CFD8E3;
|
||||
border-radius: 0px;
|
||||
padding: 3px 8px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #DCE4ED; border-color: #DCE4ED; }
|
||||
QPushButton:pressed { background-color: #C0CCD9; border-color: #C0CCD9; }
|
||||
""",
|
||||
|
||||
# =====================================================================
|
||||
# 3. Вкладки
|
||||
# =====================================================================
|
||||
|
||||
# --- «Файл» (зелёная вкладка) ----------------------------------------
|
||||
"QA_WORD_WORKSPACE_FILE_TAB_DARK": """
|
||||
QPushButton {
|
||||
background-color: #2F7D32;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #2F7D32;
|
||||
border-radius: 0px;
|
||||
padding: 6px 12px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #388E3C; border-color: #388E3C; }
|
||||
QPushButton:pressed { background-color: #2B6F2D; border-color: #2B6F2D; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_FILE_TAB_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #2F7D32;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #2F7D32;
|
||||
border-radius: 0px;
|
||||
padding: 6px 12px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #388E3C; border-color: #388E3C; }
|
||||
QPushButton:pressed { background-color: #2B6F2D; border-color: #2B6F2D; }
|
||||
""",
|
||||
|
||||
# --- Обычная вкладка (Вставка / Макет / …) ---------------------------
|
||||
"QA_WORD_WORKSPACE_TAB_DARK": """
|
||||
QPushButton {
|
||||
background-color: #242629;
|
||||
color: #E7EBEF;
|
||||
border: 1px solid #242629;
|
||||
border-radius: 0px;
|
||||
padding: 6px 12px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #303338; border-color: #303338; }
|
||||
QPushButton:pressed { background-color: #23262A; border-color: #23262A; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TAB_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #243248;
|
||||
border: 1px solid #E6EBF1;
|
||||
border-radius: 0px;
|
||||
padding: 6px 12px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #F0F4F8; border-color: #F0F4F8; }
|
||||
QPushButton:pressed { background-color: #DCE4ED; border-color: #DCE4ED; }
|
||||
""",
|
||||
|
||||
# --- Активная вкладка («Главная») ------------------------------------
|
||||
"QA_WORD_WORKSPACE_TAB_ACTIVE_DARK": """
|
||||
QPushButton {
|
||||
background-color: #2F3237;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #4E535A;
|
||||
border-radius: 0px;
|
||||
padding: 6px 12px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #383D43; border-color: #383D43; }
|
||||
QPushButton:pressed { background-color: #292D31; border-color: #292D31; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TAB_ACTIVE_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #C7D1DD;
|
||||
border-radius: 0px;
|
||||
padding: 6px 12px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
QPushButton:hover { background-color: #F6F8FB; border-color: #F6F8FB; }
|
||||
QPushButton:pressed { background-color: #E8EDF3; border-color: #E8EDF3; }
|
||||
""",
|
||||
|
||||
# =====================================================================
|
||||
# 4. Инструменты ribbon
|
||||
# =====================================================================
|
||||
|
||||
# --- Крупная кнопка группы («Вставить», «Сетка») ---------------------
|
||||
"QA_WORD_WORKSPACE_LARGE_BUTTON_DARK": """
|
||||
QPushButton {
|
||||
background-color: #2A2E33;
|
||||
color: #F1F3F5;
|
||||
border: 1px solid #40454B;
|
||||
border-radius: 0px;
|
||||
padding: 6px 8px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #34393F; border-color: #34393F; }
|
||||
QPushButton:pressed { background-color: #25292D; border-color: #25292D; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_LARGE_BUTTON_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #F8FAFC;
|
||||
color: #172B4D;
|
||||
border: 1px solid #D2DAE5;
|
||||
border-radius: 0px;
|
||||
padding: 6px 8px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #EFF3F7; border-color: #EFF3F7; }
|
||||
QPushButton:pressed { background-color: #E6ECF3; border-color: #E6ECF3; }
|
||||
""",
|
||||
|
||||
# --- Мелкая инструментальная кнопка (B/I/U, L/C/R/J, «Найти» и т. п.)
|
||||
"QA_WORD_WORKSPACE_TOOL_BUTTON_DARK": """
|
||||
QPushButton {
|
||||
background-color: #25282C;
|
||||
color: #F1F3F5;
|
||||
border: 1px solid #3A3E43;
|
||||
border-radius: 0px;
|
||||
padding: 4px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #30353A; border-color: #30353A; }
|
||||
QPushButton:pressed { background-color: #23272B; border-color: #23272B; }
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TOOL_BUTTON_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #243248;
|
||||
border: 1px solid #D1D8E2;
|
||||
border-radius: 0px;
|
||||
padding: 4px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
}
|
||||
QPushButton:hover { background-color: #EFF3F7; border-color: #EFF3F7; }
|
||||
QPushButton:pressed { background-color: #E4EAF1; border-color: #E4EAF1; }
|
||||
""",
|
||||
|
||||
# =====================================================================
|
||||
# 5. Поля ввода
|
||||
# =====================================================================
|
||||
|
||||
# --- Выпадающий список ribbon ----------------------------------------
|
||||
"QA_WORD_WORKSPACE_COMBO_DARK": """
|
||||
QComboBox {
|
||||
background-color: #25282C;
|
||||
color: #F1F3F5;
|
||||
border: 1px solid #3A3E43;
|
||||
border-radius: 0px;
|
||||
padding: 2px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
combobox-popup: 0;
|
||||
}
|
||||
QComboBox:focus {
|
||||
border: 1px solid #5B9BD5;
|
||||
}
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: #25282C;
|
||||
color: #F1F3F5;
|
||||
border: 1px solid #3A3E43;
|
||||
selection-background-color: #5B9BD5;
|
||||
selection-color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_COMBO_LIGHT": """
|
||||
QComboBox {
|
||||
background-color: #FFFFFF;
|
||||
color: #243248;
|
||||
border: 1px solid #D1D8E2;
|
||||
border-radius: 0px;
|
||||
padding: 2px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 11px;
|
||||
combobox-popup: 0;
|
||||
}
|
||||
QComboBox:focus {
|
||||
border: 1px solid #0C66E4;
|
||||
}
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: #FFFFFF;
|
||||
color: #243248;
|
||||
border: 1px solid #D1D8E2;
|
||||
selection-background-color: #0C66E4;
|
||||
selection-color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Поле поиска верхней панели --------------------------------------
|
||||
"QA_WORD_WORKSPACE_SEARCH_DARK": """
|
||||
QLineEdit {
|
||||
background-color: #2A2D32;
|
||||
color: #F1F3F5;
|
||||
border: 1px solid #3D4248;
|
||||
border-radius: 0px;
|
||||
padding: 4px 10px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
}
|
||||
QLineEdit:focus {
|
||||
border: 1px solid #5B9BD5;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #9CA7B5;
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_SEARCH_LIGHT": """
|
||||
QLineEdit {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #CDD6E1;
|
||||
border-radius: 0px;
|
||||
padding: 4px 10px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
}
|
||||
QLineEdit:focus {
|
||||
border: 1px solid #0C66E4;
|
||||
}
|
||||
QLineEdit::placeholder {
|
||||
color: #6B778C;
|
||||
}
|
||||
""",
|
||||
|
||||
# =====================================================================
|
||||
# 6. Текстовые метки
|
||||
# =====================================================================
|
||||
|
||||
# --- Надпись «Автосохранение» в верхней панели -----------------------
|
||||
"QA_WORD_WORKSPACE_TOPBAR_TEXT_DARK": """
|
||||
QLabel {
|
||||
color: #E7EBEF;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TOPBAR_TEXT_LIGHT": """
|
||||
QLabel {
|
||||
color: #243248;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Заголовок документа в верхней панели ----------------------------
|
||||
"QA_WORD_WORKSPACE_TOPBAR_TITLE_DARK": """
|
||||
QLabel {
|
||||
color: #FFFFFF;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px 8px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_TOPBAR_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px 8px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Заголовок ribbon-группы («Буфер обмена», «Шрифт», …) ------------
|
||||
"QA_WORD_WORKSPACE_GROUP_TITLE_DARK": """
|
||||
QLabel {
|
||||
color: #E7EBEF;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_GROUP_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
color: #243248;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Основной текст карточки стиля ----------------------------------
|
||||
"QA_WORD_WORKSPACE_STYLE_TEXT_DARK": """
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 4px 6px 0px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_STYLE_TEXT_LIGHT": """
|
||||
QLabel {
|
||||
color: #172B4D;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 4px 6px 0px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
|
||||
# --- Подпись карточки стиля («Обычный», «Заголовок 1», …) ------------
|
||||
"QA_WORD_WORKSPACE_STYLE_CAPTION_DARK": """
|
||||
QLabel {
|
||||
color: #4F5B6B;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px 6px 4px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
"QA_WORD_WORKSPACE_STYLE_CAPTION_LIGHT": """
|
||||
QLabel {
|
||||
color: #4F5B6B;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0px 6px 4px 6px;
|
||||
font-family: 'Segoe UI';
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignLeft | AlignTop';
|
||||
}
|
||||
""",
|
||||
}
|
||||
559
Dispatch_V0.1.1/gui/styles/ticket.py
Normal file
559
Dispatch_V0.1.1/gui/styles/ticket.py
Normal file
@@ -0,0 +1,559 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/ticket.py
|
||||
|
||||
"""Стили для модуля Ticket (канбан-доска, карточки задач, бейджи, фильтры)."""
|
||||
|
||||
TICKET = {
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Канбан-колонка
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"KANBAN_COLUMN": """
|
||||
QFrame {
|
||||
background-color: palette(base);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 6px;
|
||||
}
|
||||
""",
|
||||
|
||||
"KANBAN_COLUMN_LIGHT": """
|
||||
QFrame {
|
||||
background-color: #F7F8F9;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 6px;
|
||||
}
|
||||
""",
|
||||
|
||||
"KANBAN_COLUMN_DARK": """
|
||||
QFrame {
|
||||
background-color: #2D2D2D;
|
||||
border: 1px solid #5A5A5A;
|
||||
border-radius: 6px;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Заголовок колонки
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"KANBAN_COLUMN_HEADER": """
|
||||
QLabel {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: transparent;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
""",
|
||||
|
||||
"KANBAN_COLUMN_HEADER_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #5E6C84;
|
||||
background-color: transparent;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
""",
|
||||
|
||||
"KANBAN_COLUMN_HEADER_DARK": """
|
||||
QLabel {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #B8C0CC;
|
||||
background-color: transparent;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Счётчик задач в заголовке колонки
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"KANBAN_COUNTER": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: palette(light);
|
||||
border-radius: 8px;
|
||||
min-width: 20px;
|
||||
min-height: 20px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
""",
|
||||
|
||||
"KANBAN_COUNTER_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: #5E6C84;
|
||||
background-color: #EBECF0;
|
||||
border-radius: 8px;
|
||||
min-width: 20px;
|
||||
min-height: 20px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
""",
|
||||
|
||||
"KANBAN_COUNTER_DARK": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: #B8C0CC;
|
||||
background-color: #3C3C3C;
|
||||
border-radius: 8px;
|
||||
min-width: 20px;
|
||||
min-height: 20px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Карточка задачи
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"TASK_CARD": """
|
||||
QFrame {
|
||||
background-color: palette(button);
|
||||
border: 1px solid palette(mid);
|
||||
border-radius: 6px;
|
||||
}
|
||||
QFrame:hover {
|
||||
border-color: palette(highlight);
|
||||
}
|
||||
""",
|
||||
|
||||
"TASK_CARD_LIGHT": """
|
||||
QFrame {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 6px;
|
||||
}
|
||||
QFrame:hover {
|
||||
border-color: #85B8FF;
|
||||
}
|
||||
""",
|
||||
|
||||
"TASK_CARD_DARK": """
|
||||
QFrame {
|
||||
background-color: #3C3C3C;
|
||||
border: 1px solid #5A5A5A;
|
||||
border-radius: 6px;
|
||||
}
|
||||
QFrame:hover {
|
||||
border-color: #5B9FFF;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Заголовок карточки задачи
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"TASK_CARD_TITLE": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TASK_CARD_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #172B4D;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TASK_CARD_TITLE_DARK": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #F2F2F2;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Подпись карточки (локация, время)
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"TASK_CARD_SUBTITLE": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
color: palette(dark);
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TASK_CARD_SUBTITLE_LIGHT": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
color: #5E6C84;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TASK_CARD_SUBTITLE_DARK": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
color: #8C9BAB;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Бейдж состояния задачи
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"TASK_BADGE": """
|
||||
QLabel {
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
color: #FFFFFF;
|
||||
border-radius: 3px;
|
||||
min-height: 18px;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Панель фильтров над доской
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"FILTER_BUTTON": """
|
||||
QPushButton {
|
||||
background-color: palette(button);
|
||||
color: palette(button-text);
|
||||
border: 1px solid palette(mid);
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: palette(light);
|
||||
}
|
||||
""",
|
||||
|
||||
"FILTER_BUTTON_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #DFE1E6;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #EBECF0;
|
||||
}
|
||||
""",
|
||||
|
||||
"FILTER_BUTTON_DARK": """
|
||||
QPushButton {
|
||||
background-color: #3C3C3C;
|
||||
color: #F2F2F2;
|
||||
border: 1px solid #5A5A5A;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #4A4A4A;
|
||||
}
|
||||
""",
|
||||
|
||||
"FILTER_BUTTON_ACTIVE": """
|
||||
QPushButton {
|
||||
background-color: palette(highlight);
|
||||
color: #FFFFFF;
|
||||
border: 1px solid palette(highlight);
|
||||
border-radius: 6px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #0747A6;
|
||||
border-color: #0747A6;
|
||||
}
|
||||
""",
|
||||
|
||||
"FILTER_BUTTON_ACTIVE_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #0C66E4;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #0C66E4;
|
||||
border-radius: 6px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #0747A6;
|
||||
border-color: #0747A6;
|
||||
}
|
||||
""",
|
||||
|
||||
"FILTER_BUTTON_ACTIVE_DARK": """
|
||||
QPushButton {
|
||||
background-color: #5B9FFF;
|
||||
color: #000000;
|
||||
border: 1px solid #5B9FFF;
|
||||
border-radius: 6px;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #85B8FF;
|
||||
border-color: #85B8FF;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# COM-порт статус виджет
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
"COM_STATUS_CONNECTED": """
|
||||
QLabel {
|
||||
font-size: 11px;
|
||||
color: #36AC87;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"COM_STATUS_DISCONNECTED": """
|
||||
QLabel {
|
||||
font-size: 11px;
|
||||
color: #FF5938;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Архив / Отчёты / Акты — общие элементы списков
|
||||
# ------------------------------------------------------------------
|
||||
"TICKET_LIST_CONTAINER": """
|
||||
QWidget {
|
||||
background-color: palette(base);
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_LIST_ITEM": """
|
||||
QWidget {
|
||||
background-color: palette(button);
|
||||
border-radius: 4px;
|
||||
}
|
||||
QWidget:hover {
|
||||
border-color: palette(highlight);
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_LIST_ITEM_SELECTED": """
|
||||
QWidget {
|
||||
background-color: palette(light);
|
||||
border-radius: 4px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_LIST_HEADER": """
|
||||
QLabel {
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_LIST_TITLE": """
|
||||
QLabel {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: palette(window-text);
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_LIST_SUBTITLE": """
|
||||
QLabel {
|
||||
font-size: 12px;
|
||||
color: palette(dark);
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_PREVIEW_AREA": """
|
||||
QTextEdit {
|
||||
background-color: palette(base);
|
||||
color: palette(window-text);
|
||||
font-size: 13px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_EMPTY_LABEL": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
color: palette(dark);
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_SHELL_ROOT": """
|
||||
QWidget {
|
||||
background-color: #2B2B2B;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_SURFACE_HOST": """
|
||||
QWidget {
|
||||
background-color: #2B2B2B;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_SURFACE_HOST_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #F4F5F7;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_SHELL_ROOT_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #F4F5F7;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_BODY": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #E5E7EB;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_BODY_DARK": """
|
||||
QWidget {
|
||||
background-color: #2D2D2D;
|
||||
border: 1px solid #3C3C3C;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_HEADER": """
|
||||
QWidget {
|
||||
background-color: #5A5A5A;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_HEADER_DARK": """
|
||||
QWidget {
|
||||
background-color: #5A5A5A;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_HEADER_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: none;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_BODY_LIGHT": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #D0D7E2;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_TITLE": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F3F4F6;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
qproperty-alignment: 'AlignVCenter | AlignLeft';
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COLUMN_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #172B4D;
|
||||
border: none;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
qproperty-alignment: 'AlignVCenter | AlignLeft';
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COUNTER_TEXT_WHITE": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #FFFFFF;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COUNTER_TEXT_MUTED": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #4B5563;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
qproperty-alignment: 'AlignCenter';
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COUNTER_SHELL_TODO": """
|
||||
QWidget {
|
||||
background-color: #FF5938;
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COUNTER_SHELL_IN_PROGRESS": """
|
||||
QWidget {
|
||||
background-color: #008BFA;
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COUNTER_SHELL_CONFIRMATION": """
|
||||
QWidget {
|
||||
background-color: #FFD27A;
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COUNTER_SHELL_COMPLETED": """
|
||||
QWidget {
|
||||
background-color: #36AC87;
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
}
|
||||
""",
|
||||
|
||||
"TICKET_BOARD_COUNTER_SHELL_REFUSED": """
|
||||
QWidget {
|
||||
background-color: #D1D5DB;
|
||||
border: none;
|
||||
border-radius: 999px;
|
||||
}
|
||||
""",
|
||||
|
||||
}
|
||||
186
Dispatch_V0.1.1/gui/styles/ticket_cards.py
Normal file
186
Dispatch_V0.1.1/gui/styles/ticket_cards.py
Normal file
@@ -0,0 +1,186 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/ticket_cards.py
|
||||
|
||||
"""Card-style registry для Ticket kanban-карточек."""
|
||||
|
||||
TICKET_CARDS = {
|
||||
"TICKET_TASK_CARD_ROOT_TODO": """
|
||||
QWidget#ticket_task_card {
|
||||
background-color: #FF5938;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QWidget#ticket_task_card:hover {
|
||||
border-color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_ROOT_IN_PROGRESS": """
|
||||
QWidget#ticket_task_card {
|
||||
background-color: #008BFA;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QWidget#ticket_task_card:hover {
|
||||
border-color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_ROOT_CONFIRMATION": """
|
||||
QWidget#ticket_task_card {
|
||||
background-color: #FFD27A;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QWidget#ticket_task_card:hover {
|
||||
border-color: #172B4D;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_ROOT_COMPLETED": """
|
||||
QWidget#ticket_task_card {
|
||||
background-color: #36AC87;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QWidget#ticket_task_card:hover {
|
||||
border-color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_ROOT_REFUSED": """
|
||||
QWidget#ticket_task_card {
|
||||
background-color: #D1D5DB;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QWidget#ticket_task_card:hover {
|
||||
border-color: #4B5563;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #FFFFFF;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_TITLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #111111;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_TEXT_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #FFFFFF;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_TEXT_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #111111;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_META_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: rgba(255, 255, 255, 0.82);
|
||||
font-size: 11px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_META_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #111111;
|
||||
font-size: 11px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_STATUS_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #FFFFFF;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_STAGE_ACTIVE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: rgba(255, 255, 255, 0.22);
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
color: #FFFFFF;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_STAGE_INACTIVE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: 1px solid rgba(255, 255, 255, 0.36);
|
||||
border-radius: 10px;
|
||||
color: rgba(255, 255, 255, 0.78);
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_STAGE_ACTIVE_DARK": """
|
||||
QLabel {
|
||||
background-color: rgba(23, 43, 77, 0.14);
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
color: #172B4D;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_STAGE_INACTIVE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: 1px solid rgba(23, 43, 77, 0.24);
|
||||
border-radius: 10px;
|
||||
color: #4B5563;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_AVATAR_LIGHT": """
|
||||
QLabel {
|
||||
background-color: rgba(255, 255, 255, 0.14);
|
||||
border: 2px solid #FFFFFF;
|
||||
border-radius: 22px;
|
||||
color: #FFFFFF;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_AVATAR_DARK": """
|
||||
QLabel {
|
||||
background-color: rgba(255, 255, 255, 0.42);
|
||||
border: 2px solid #FFFFFF;
|
||||
border-radius: 22px;
|
||||
color: #172B4D;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_TASK_CARD_AVATAR_IMAGE": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
}
|
||||
221
Dispatch_V0.1.1/gui/styles/ticket_details.py
Normal file
221
Dispatch_V0.1.1/gui/styles/ticket_details.py
Normal file
@@ -0,0 +1,221 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/ticket_details.py
|
||||
|
||||
"""Стили dialog-экрана подробностей Ticket."""
|
||||
|
||||
TICKET_DETAILS = {
|
||||
"TICKET_DETAILS_SUMMARY_TITLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_SUMMARY_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_SUMMARY_VALUE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_SUMMARY_VALUE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_SECTION_TITLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_SECTION_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 18px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_DIVIDER_DARK": """
|
||||
QLabel {
|
||||
background-color: #3C4553;
|
||||
border: none;
|
||||
min-height: 1px;
|
||||
max-height: 1px;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_DIVIDER_LIGHT": """
|
||||
QLabel {
|
||||
background-color: #D6DCE5;
|
||||
border: none;
|
||||
min-height: 1px;
|
||||
max-height: 1px;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_STAGE_ROW": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 10px;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_STAGE_ROW_ACTIVE": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 10px;
|
||||
}
|
||||
QWidget:hover {
|
||||
background-color: rgba(12, 102, 228, 0.10);
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_STAGE_TEXT_ACTIVE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_STAGE_TEXT_ACTIVE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #172B4D;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_STAGE_TEXT_INACTIVE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #8C9BAB;
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_STAGE_TEXT_INACTIVE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #6B778C;
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_EMPLOYEE_NAME_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 17px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_EMPLOYEE_NAME_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #172B4D;
|
||||
font-size: 17px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_EMPLOYEE_ROLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #D0D7E2;
|
||||
font-size: 17px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_EMPLOYEE_ROLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #172B4D;
|
||||
font-size: 17px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_REFUSE_BUTTON": """
|
||||
QPushButton {
|
||||
background-color: #DE350B;
|
||||
color: #FFFFFF;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
min-width: 260px;
|
||||
min-height: 48px;
|
||||
padding: 10px 18px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #BF2600;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #A32000;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #9AA5B1;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_REFUSE_BUTTON_DARK": """
|
||||
QPushButton {
|
||||
background-color: #DE350B;
|
||||
color: #FFFFFF;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
min-width: 260px;
|
||||
min-height: 48px;
|
||||
padding: 10px 18px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #BF2600;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #A32000;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #9AA5B1;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
"TICKET_DETAILS_REFUSE_BUTTON_LIGHT": """
|
||||
QPushButton {
|
||||
background-color: #DE350B;
|
||||
color: #111111;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
min-width: 260px;
|
||||
min-height: 48px;
|
||||
padding: 10px 18px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #BF2600;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #A32000;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #9AA5B1;
|
||||
color: #6B778C;
|
||||
}
|
||||
""",
|
||||
}
|
||||
79
Dispatch_V0.1.1/gui/styles/ticket_document_dialog.py
Normal file
79
Dispatch_V0.1.1/gui/styles/ticket_document_dialog.py
Normal file
@@ -0,0 +1,79 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/ticket_document_dialog.py
|
||||
|
||||
"""Стили dialog-окон документов Ticket."""
|
||||
|
||||
TICKET_DOCUMENT_DIALOG = {
|
||||
"TICKET_DOCUMENT_TEXTAREA_DARK": """
|
||||
QTextEdit {
|
||||
background-color: #23272F;
|
||||
color: #F5F7FA;
|
||||
border: 1px solid #3C4553;
|
||||
border-radius: 12px;
|
||||
font-size: 16px;
|
||||
padding: 12px 14px;
|
||||
}
|
||||
QTextEdit:focus {
|
||||
border: 1px solid #0C66E4;
|
||||
}
|
||||
""",
|
||||
"TICKET_DOCUMENT_TEXTAREA_LIGHT": """
|
||||
QTextEdit {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
border: 1px solid #D7DEE8;
|
||||
border-radius: 12px;
|
||||
font-size: 16px;
|
||||
padding: 12px 14px;
|
||||
}
|
||||
QTextEdit:focus {
|
||||
border: 1px solid #0C66E4;
|
||||
}
|
||||
""",
|
||||
"TICKET_DOCUMENT_CANCEL_BUTTON": """
|
||||
QPushButton {
|
||||
background-color: transparent;
|
||||
color: #6B84A5;
|
||||
border: 1px solid #D7DEE8;
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
padding: 10px 20px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: rgba(12, 102, 228, 0.06);
|
||||
border-color: #A8B8CF;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: rgba(12, 102, 228, 0.10);
|
||||
}
|
||||
QPushButton:disabled {
|
||||
color: #A8B8CF;
|
||||
border-color: #E1E6ED;
|
||||
}
|
||||
""",
|
||||
"TICKET_DOCUMENT_SUBMIT_BUTTON": """
|
||||
QPushButton {
|
||||
background-color: #0C66E4;
|
||||
color: #FFFFFF;
|
||||
border: 1px solid #0C66E4;
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
padding: 10px 20px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #0055CC;
|
||||
border-color: #0055CC;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #09326C;
|
||||
border-color: #09326C;
|
||||
}
|
||||
QPushButton:disabled {
|
||||
background-color: #D5D9E2;
|
||||
color: #7890AF;
|
||||
border-color: #D5D9E2;
|
||||
}
|
||||
""",
|
||||
}
|
||||
71
Dispatch_V0.1.1/gui/styles/ticket_refusal_dialog.py
Normal file
71
Dispatch_V0.1.1/gui/styles/ticket_refusal_dialog.py
Normal file
@@ -0,0 +1,71 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/ticket_refusal_dialog.py
|
||||
|
||||
"""Стили dialog-экрана отказа Ticket."""
|
||||
|
||||
TICKET_REFUSAL_DIALOG = {
|
||||
"TICKET_REFUSAL_HEADING_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_REFUSAL_HEADING_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_REFUSAL_LOCATION_TITLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_REFUSAL_LOCATION_TITLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
""",
|
||||
"TICKET_REFUSAL_LOCATION_VALUE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_REFUSAL_LOCATION_VALUE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_REFUSAL_WARNING_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #FF8F73;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_REFUSAL_WARNING_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
}
|
||||
184
Dispatch_V0.1.1/gui/styles/ticket_reports.py
Normal file
184
Dispatch_V0.1.1/gui/styles/ticket_reports.py
Normal file
@@ -0,0 +1,184 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/ticket_reports.py
|
||||
|
||||
"""Стили страницы отчётов Ticket (колонка-канбан, карточки, предпросмотр)."""
|
||||
|
||||
TICKET_REPORTS = {
|
||||
# ------------------------------------------------------------------
|
||||
# Карточка отчёта — корневой контейнер
|
||||
# ------------------------------------------------------------------
|
||||
"TICKET_REPORT_CARD_ROOT": """
|
||||
QWidget#ticket_report_card {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #E5E7EB;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QWidget#ticket_report_card:hover {
|
||||
border-color: #0C66E4;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_ROOT_DARK": """
|
||||
QWidget#ticket_report_card {
|
||||
background-color: #2D2D2D;
|
||||
border: 1px solid #3C3C3C;
|
||||
border-radius: 0px;
|
||||
}
|
||||
QWidget#ticket_report_card:hover {
|
||||
border-color: #5B9FFF;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_ROOT_SELECTED": """
|
||||
QWidget#ticket_report_card {
|
||||
background-color: #E9F2FF;
|
||||
border: 1px solid #0C66E4;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_ROOT_SELECTED_DARK": """
|
||||
QWidget#ticket_report_card {
|
||||
background-color: #1C3A5F;
|
||||
border: 1px solid #5B9FFF;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_CONTENT": """
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Карточка отчёта — текстовые стили
|
||||
# ------------------------------------------------------------------
|
||||
"TICKET_REPORT_CARD_TITLE": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #172B4D;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_TITLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #F3F4F6;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_SUBTITLE": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #5E6C84;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_SUBTITLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #8C9BAB;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_META": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #5E6C84;
|
||||
font-size: 11px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_CARD_META_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: #6B7A8D;
|
||||
font-size: 11px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Колонка списка отчётов — body (подложка под карточками)
|
||||
# ------------------------------------------------------------------
|
||||
"TICKET_REPORT_COLUMN_BODY": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #E5E7EB;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_COLUMN_BODY_DARK": """
|
||||
QWidget {
|
||||
background-color: #2D2D2D;
|
||||
border: 1px solid #3C3C3C;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Панель предпросмотра отчёта — body
|
||||
# ------------------------------------------------------------------
|
||||
"TICKET_REPORT_PREVIEW_BODY": """
|
||||
QWidget {
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #E5E7EB;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_PREVIEW_BODY_DARK": """
|
||||
QWidget {
|
||||
background-color: #2D2D2D;
|
||||
border: 1px solid #3C3C3C;
|
||||
border-radius: 0px;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Текстовая область предпросмотра (увеличенный кегль)
|
||||
# ------------------------------------------------------------------
|
||||
"TICKET_REPORT_PREVIEW_AREA": """
|
||||
QTextEdit {
|
||||
background-color: #FFFFFF;
|
||||
color: #172B4D;
|
||||
font-size: 18px;
|
||||
border: none;
|
||||
padding: 12px 14px;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_PREVIEW_AREA_DARK": """
|
||||
QTextEdit {
|
||||
background-color: #2D2D2D;
|
||||
color: #F3F4F6;
|
||||
font-size: 18px;
|
||||
border: none;
|
||||
padding: 12px 14px;
|
||||
}
|
||||
""",
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Пустой placeholder
|
||||
# ------------------------------------------------------------------
|
||||
"TICKET_REPORT_EMPTY_LABEL": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
color: #5E6C84;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
"TICKET_REPORT_EMPTY_LABEL_DARK": """
|
||||
QLabel {
|
||||
font-size: 14px;
|
||||
color: #8C9BAB;
|
||||
background-color: transparent;
|
||||
}
|
||||
""",
|
||||
}
|
||||
59
Dispatch_V0.1.1/gui/styles/ticket_specialist_dialog.py
Normal file
59
Dispatch_V0.1.1/gui/styles/ticket_specialist_dialog.py
Normal file
@@ -0,0 +1,59 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/ticket_specialist_dialog.py
|
||||
|
||||
"""Стили окна выбора специалиста Ticket."""
|
||||
|
||||
TICKET_SPECIALIST_DIALOG = {
|
||||
"TICKET_SPECIALIST_HINT_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #F5F7FA;
|
||||
font-size: 17px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_SPECIALIST_HINT_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #0F2F61;
|
||||
font-size: 17px;
|
||||
font-weight: 500;
|
||||
}
|
||||
""",
|
||||
"TICKET_SPECIALIST_ROLE_DARK": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #AEB9C8;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_SPECIALIST_ROLE_LIGHT": """
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
color: #667A9A;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
""",
|
||||
"TICKET_SPECIALIST_ITEM": """
|
||||
QWidget#ticket_specialist_row {
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 16px;
|
||||
}
|
||||
QWidget#ticket_specialist_row:hover {
|
||||
background-color: rgba(12, 102, 228, 0.06);
|
||||
}
|
||||
""",
|
||||
"TICKET_SPECIALIST_ITEM_SELECTED": """
|
||||
QWidget#ticket_specialist_row {
|
||||
background-color: rgba(12, 102, 228, 0.10);
|
||||
border: 1px solid rgba(12, 102, 228, 0.28);
|
||||
border-radius: 16px;
|
||||
}
|
||||
QWidget#ticket_specialist_row:hover {
|
||||
background-color: rgba(12, 102, 228, 0.14);
|
||||
}
|
||||
""",
|
||||
}
|
||||
21
Dispatch_V0.1.1/gui/styles/welcome.py
Normal file
21
Dispatch_V0.1.1/gui/styles/welcome.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/styles/welcome.py
|
||||
|
||||
"""Стили для страницы приветствия."""
|
||||
|
||||
WELCOME = {
|
||||
"WELCOME_IMAGE_FRAME_DARK": """
|
||||
QFrame {
|
||||
border: 1px solid #5a5a5a;
|
||||
border-radius: 4px;
|
||||
background: #1e1e1e;
|
||||
}
|
||||
""",
|
||||
"WELCOME_IMAGE_FRAME_LIGHT": """
|
||||
QFrame {
|
||||
border: 1px solid #DFE1E6;
|
||||
border-radius: 4px;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
""",
|
||||
}
|
||||
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