Files
2026-04-29 08:18:54 +04:00

440 lines
13 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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).