166 lines
6.6 KiB
Python
166 lines
6.6 KiB
Python
import json
|
||
from typing import Dict, Any
|
||
from PySide6.QtWidgets import (
|
||
QMainWindow, QWidget, QVBoxLayout, QTabWidget, QMessageBox,
|
||
QLabel, QHBoxLayout
|
||
)
|
||
from PySide6.QtGui import QIcon
|
||
|
||
from utils.encryption import ConfigManager
|
||
from widgets.serial_widget import SerialNumberWidget
|
||
from widgets.light_widget import LightVersionWidget
|
||
from widgets.hopper_widget import HopperSensorWidget
|
||
from widgets.webserver_widget import WebServerWidget
|
||
from widgets.preview_widget import PreviewWidget
|
||
|
||
class MainWindow(QMainWindow):
|
||
"""Главное окно приложения"""
|
||
|
||
def __init__(self):
|
||
super().__init__()
|
||
self.config_manager = ConfigManager()
|
||
self.init_ui()
|
||
self.load_current_config()
|
||
|
||
self.setWindowIcon(QIcon("logo.png"))
|
||
|
||
# Подписываемся на изменения во всех виджетах
|
||
self.setup_value_changed_connections()
|
||
|
||
def init_ui(self):
|
||
self.setWindowTitle("Конфигуратор аппарат 4 в ряд")
|
||
self.setGeometry(100, 100, 650, 850)
|
||
|
||
# Центральный виджет
|
||
central_widget = QWidget()
|
||
self.setCentralWidget(central_widget)
|
||
|
||
# Основной layout
|
||
main_layout = QVBoxLayout(central_widget)
|
||
|
||
# Информационная панель с путем сохранения
|
||
info_layout = QHBoxLayout()
|
||
info_layout.addWidget(QLabel("📁 Файл конфигурации:"))
|
||
|
||
path_label = QLabel(self.config_manager.get_config_path())
|
||
path_label.setStyleSheet("""
|
||
QLabel {
|
||
color: #666;
|
||
font-family: monospace;
|
||
font-size: 11px;
|
||
background-color: #f5f5f5;
|
||
padding: 3px 8px;
|
||
border-radius: 3px;
|
||
}
|
||
""")
|
||
path_label.setWordWrap(True)
|
||
info_layout.addWidget(path_label, 1)
|
||
|
||
main_layout.addLayout(info_layout)
|
||
|
||
# Создаем вкладки
|
||
tabs = QTabWidget()
|
||
tabs.setTabPosition(QTabWidget.TabPosition.North)
|
||
|
||
# Вкладка 1: Серийный номер
|
||
self.serial_widget = SerialNumberWidget()
|
||
tabs.addTab(self.serial_widget, "Серийный номер")
|
||
|
||
# Вкладка 2: Подсветка
|
||
self.light_widget = LightVersionWidget("Подсветка", default=2)
|
||
tabs.addTab(self.light_widget, "Подсветка")
|
||
|
||
# Вкладка 3: Электроника
|
||
electronics_layout = QVBoxLayout()
|
||
|
||
# Версия электроники
|
||
self.electronics_widget = LightVersionWidget(
|
||
"Версия электроники",
|
||
default=2,
|
||
options={1: "Версия 1", 2: "Версия 2"}
|
||
)
|
||
electronics_layout.addWidget(self.electronics_widget)
|
||
|
||
# Датчик хоппера
|
||
self.hopper_widget = HopperSensorWidget()
|
||
electronics_layout.addWidget(self.hopper_widget)
|
||
|
||
electronics_tab = QWidget()
|
||
electronics_tab.setLayout(electronics_layout)
|
||
tabs.addTab(electronics_tab, "Электроника")
|
||
|
||
# Вкладка 4: Веб-сервер
|
||
self.webserver_widget = WebServerWidget()
|
||
tabs.addTab(self.webserver_widget, "Веб-сервер")
|
||
|
||
# Вкладка 5: Сохранение
|
||
self.preview_widget = PreviewWidget(self.config_manager)
|
||
self.preview_widget.set_get_config_callback(self.get_current_config)
|
||
self.preview_widget.save_button.clicked.connect(self.save_config)
|
||
tabs.addTab(self.preview_widget, "Сохранение")
|
||
|
||
main_layout.addWidget(tabs)
|
||
|
||
def setup_value_changed_connections(self):
|
||
"""Настраивает соединения для обновления предпросмотра"""
|
||
self.serial_widget.valueChanged.connect(self.on_config_changed)
|
||
self.light_widget.valueChanged.connect(self.on_config_changed)
|
||
self.electronics_widget.valueChanged.connect(self.on_config_changed)
|
||
self.hopper_widget.valueChanged.connect(self.on_config_changed)
|
||
self.webserver_widget.valueChanged.connect(self.on_config_changed)
|
||
|
||
def on_config_changed(self):
|
||
"""Обработчик изменения конфигурации"""
|
||
self.preview_widget.update_preview()
|
||
|
||
def get_current_config(self) -> Dict[str, Any]:
|
||
"""Собирает текущие значения из виджетов"""
|
||
config = {
|
||
"serial": self.serial_widget.get_serial(),
|
||
"light-version": self.light_widget.get_value(),
|
||
"electronic-version": self.electronics_widget.get_value(),
|
||
"sensor-positive-value": self.hopper_widget.get_value(),
|
||
"start-server": self.webserver_widget.get_start_server(),
|
||
"server-password": self.webserver_widget.get_password()
|
||
}
|
||
return config
|
||
|
||
def load_current_config(self):
|
||
"""Загружает текущий конфиг в виджеты"""
|
||
config = self.config_manager.current_config
|
||
|
||
if config:
|
||
if "serial" in config:
|
||
self.serial_widget.set_serial(config["serial"])
|
||
|
||
if "light-version" in config:
|
||
self.light_widget.set_value(config["light-version"])
|
||
|
||
if "electronic-version" in config:
|
||
self.electronics_widget.set_value(config["electronic-version"])
|
||
|
||
if "sensor-positive-value" in config:
|
||
self.hopper_widget.set_value(config["sensor-positive-value"])
|
||
|
||
if "start-server" in config:
|
||
self.webserver_widget.set_start_server(config["start-server"])
|
||
|
||
if "server-password" in config:
|
||
self.webserver_widget.set_password(config["server-password"])
|
||
|
||
def save_config(self):
|
||
"""Сохраняет конфигурацию"""
|
||
config = self.get_current_config()
|
||
|
||
if self.config_manager.save_config(config):
|
||
QMessageBox.information(
|
||
self,
|
||
"Успех",
|
||
f"Конфигурация успешно сохранена\n\nФайл: {self.config_manager.get_config_path()}"
|
||
)
|
||
else:
|
||
QMessageBox.critical(
|
||
self,
|
||
"Ошибка",
|
||
"Не удалось сохранить конфигурацию"
|
||
) |