# -*- 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).