# modules/light_module.py import tkinter as tk from tkinter import ttk, messagebox from pathlib import Path import sys import os # Добавляем родительскую директорию в путь для импорта sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) try: import config DOCUMENTS_PATH = config.DOCUMENTS_PATH except ImportError: # Локальные значения по умолчанию DOCUMENTS_PATH = Path.home() / "Documents" / "C4" class LightModuleTab: """ Класс для создания вкладки настройки подсветки. Поддерживает версии 1 и 2 подсветки для аппаратов "Фишка". """ def __init__(self, parent_frame): """ Инициализация компонента вкладки. Args: parent_frame: Родительский фрейм, куда будет помещен интерфейс """ self.parent = parent_frame # Пути к файлам self.overrides_dir = DOCUMENTS_PATH / "overrides" self.light_conf_file = self.overrides_dir / "Light.conf" # Текущая версия подсветки self.current_version = None # Переменная для радиокнопок self.light_version = tk.IntVar(value=2) # По умолчанию вторая версия # Создаем основной контейнер для вкладки self.container = ttk.Frame(parent_frame, padding=20) self.container.pack(fill=tk.BOTH, expand=True) self._build_ui() # Проверяем текущую версию при запуске self.check_light_version() def _build_ui(self): """Построение интерфейса вкладки""" # Заголовок вкладки title_frame = ttk.Frame(self.container) title_frame.pack(fill=tk.X, pady=(0, 20)) title_label = ttk.Label( title_frame, text='Настройка подсветки', font=("Segoe UI", 12, "bold") ) title_label.pack() # Разделитель ttk.Separator(self.container, orient="horizontal").pack( fill=tk.X, pady=(0, 20) ) # Фрейм для выбора версии selector_frame = ttk.LabelFrame( self.container, text="Выбор версии подсветки", padding=15 ) selector_frame.pack(fill=tk.X, pady=(0, 20)) # Версия 1 version1_frame = ttk.Frame(selector_frame) version1_frame.pack(fill=tk.X, pady=(0, 10)) version1_radio = ttk.Radiobutton( version1_frame, text="Версия 1 (старая)", variable=self.light_version, value=1, command=self._on_version_change ) version1_radio.pack(side=tk.LEFT, anchor=tk.W) # Версия 2 version2_frame = ttk.Frame(selector_frame) version2_frame.pack(fill=tk.X, pady=(0, 10)) version2_radio = ttk.Radiobutton( version2_frame, text="Версия 2 (новая, по умолчанию)", variable=self.light_version, value=2, command=self._on_version_change ) version2_radio.pack(side=tk.LEFT, anchor=tk.W) # Кнопки управления button_frame = ttk.Frame(selector_frame) button_frame.pack(fill=tk.X, pady=(10, 0)) # Кнопка сохранения save_btn = ttk.Button( button_frame, text="Сохранить настройки", command=self._save_config, width=30 ) save_btn.pack(side=tk.LEFT, padx=(0, 10)) # Кнопка проверки check_btn = ttk.Button( button_frame, text="Проверить текущую версию", command=self.check_light_version, width=30 ) check_btn.pack(side=tk.LEFT) # Информационная панель info_frame = ttk.LabelFrame( self.container, text="Информация", padding=15 ) info_frame.pack(fill=tk.X) # Статус self.status_label = ttk.Label( info_frame, text="Статус: не проверено", font=("Segoe UI", 10) ) self.status_label.pack(anchor=tk.W, pady=(0, 5)) # Файл self.file_label = ttk.Label( info_frame, text=f"Файл: {self.light_conf_file.name}", font=("Segoe UI", 9), foreground="gray" ) self.file_label.pack(anchor=tk.W) def _on_version_change(self): """Обработчик изменения выбранной версии""" selected_version = self.light_version.get() # Визуальная обратная связь if selected_version == 1: self.status_label.config( text="Статус: выбрана версия 1", foreground="orange" ) else: self.status_label.config( text="Статус: выбрана версия 2", foreground="green" ) def check_light_version(self): """Проверить текущую версию подсветки""" try: # Проверяем существование файла if not self.light_conf_file.exists(): self.current_version = None self.status_label.config( text="Статус: файл не найден", foreground="red" ) return None # Читаем файл with open(self.light_conf_file, 'r', encoding='utf-8') as f: content = f.read().strip() # Парсим версию if content == "1": self.current_version = 1 self.light_version.set(1) self.status_label.config( text="Статус: установлена версия 1", foreground="orange" ) elif content == "2": self.current_version = 2 self.light_version.set(2) self.status_label.config( text="Статус: установлена версия 2", foreground="green" ) else: self.current_version = None self.status_label.config( text="Статус: некорректное содержимое файла", foreground="red" ) return self.current_version except Exception as e: self.current_version = None self.status_label.config( text=f"Статус: ошибка чтения файла", foreground="red" ) return None def _save_config(self): """Сохранить выбранную версию подсветки (внутренний метод)""" try: selected_version = self.light_version.get() # Создаем директорию, если её нет self.overrides_dir.mkdir(parents=True, exist_ok=True) # Сохраняем в файл with open(self.light_conf_file, 'w', encoding='utf-8') as f: f.write(str(selected_version)) # Обновляем текущую версию self.current_version = selected_version # Обновляем интерфейс if selected_version == 1: self.status_label.config( text="Статус: ✓ сохранена версия 1", foreground="green" ) else: self.status_label.config( text="Статус: ✓ сохранена версия 2", foreground="green" ) messagebox.showinfo( "Готово", f"Версия подсветки успешно сохранена!\n\n" f"Версия: {selected_version}" ) except Exception as e: messagebox.showerror( "Ошибка сохранения", f"Не удалось сохранить настройки подсветки:\n{e}" ) def get_current_version(self): """Получить текущую версию подсветки (для использования другими модулями)""" return self.current_version def save_light_config(self): """Сохранить конфигурацию подсветки (интерфейсный метод для main)""" self._save_config()