202 lines
No EOL
8.4 KiB
Python
202 lines
No EOL
8.4 KiB
Python
"""
|
||
EquipmentDialog - диалог управления оборудованием (камеры и объективы)
|
||
Аналог EquipmentDialogController из JavaFX версии
|
||
"""
|
||
from PySide6.QtWidgets import (
|
||
QDialog, QVBoxLayout, QHBoxLayout, QLabel, QListWidget,
|
||
QPushButton, QInputDialog, QMessageBox, QListWidgetItem
|
||
)
|
||
from PySide6.QtCore import Qt
|
||
from PySide6.QtGui import QFont
|
||
|
||
from services.config_service import ConfigService
|
||
|
||
|
||
class EquipmentDialog(QDialog):
|
||
"""Диалог для управления списками камер и объективов"""
|
||
|
||
def __init__(self, parent, config_service: ConfigService):
|
||
super().__init__(parent)
|
||
|
||
self.config_service = config_service
|
||
self.setWindowTitle("Управление оборудованием")
|
||
self.setMinimumSize(600, 400)
|
||
self.resize(650, 450)
|
||
|
||
# Загружаем текущие списки
|
||
self.cameras = self.config_service.get_cameras()
|
||
self.lenses = self.config_service.get_lenses()
|
||
|
||
self._create_ui()
|
||
self._update_cameras_list()
|
||
self._update_lenses_list()
|
||
|
||
def _create_ui(self):
|
||
"""Создаёт интерфейс диалога"""
|
||
layout = QVBoxLayout(self)
|
||
layout.setSpacing(15)
|
||
layout.setContentsMargins(20, 20, 20, 20)
|
||
|
||
# Заголовок
|
||
title_label = QLabel("Управление оборудованием")
|
||
title_font = QFont()
|
||
title_font.setPointSize(16)
|
||
title_font.setBold(True)
|
||
title_label.setFont(title_font)
|
||
title_label.setAlignment(Qt.AlignCenter)
|
||
layout.addWidget(title_label)
|
||
|
||
# Контейнер для двух колонок
|
||
columns_layout = QHBoxLayout()
|
||
columns_layout.setSpacing(20)
|
||
|
||
# Левая колонка - Камеры
|
||
left_layout = QVBoxLayout()
|
||
|
||
cameras_label = QLabel("Камеры")
|
||
cameras_font = QFont()
|
||
cameras_font.setPointSize(12)
|
||
cameras_font.setBold(True)
|
||
cameras_label.setFont(cameras_font)
|
||
left_layout.addWidget(cameras_label)
|
||
|
||
self.cameras_list = QListWidget()
|
||
self.cameras_list.itemClicked.connect(lambda item: self._select_camera(item.text()))
|
||
left_layout.addWidget(self.cameras_list)
|
||
|
||
cameras_buttons_layout = QHBoxLayout()
|
||
|
||
add_camera_btn = QPushButton("➕ Добавить")
|
||
add_camera_btn.clicked.connect(self._add_camera)
|
||
cameras_buttons_layout.addWidget(add_camera_btn)
|
||
|
||
self.remove_camera_btn = QPushButton("❌ Удалить")
|
||
self.remove_camera_btn.setEnabled(False)
|
||
self.remove_camera_btn.clicked.connect(self._remove_camera)
|
||
cameras_buttons_layout.addWidget(self.remove_camera_btn)
|
||
|
||
left_layout.addLayout(cameras_buttons_layout)
|
||
|
||
# Правая колонка - Объективы
|
||
right_layout = QVBoxLayout()
|
||
|
||
lenses_label = QLabel("Объективы")
|
||
lenses_label.setFont(cameras_font)
|
||
right_layout.addWidget(lenses_label)
|
||
|
||
self.lenses_list = QListWidget()
|
||
self.lenses_list.itemClicked.connect(lambda item: self._select_lens(item.text()))
|
||
right_layout.addWidget(self.lenses_list)
|
||
|
||
lenses_buttons_layout = QHBoxLayout()
|
||
|
||
add_lens_btn = QPushButton("➕ Добавить")
|
||
add_lens_btn.clicked.connect(self._add_lens)
|
||
lenses_buttons_layout.addWidget(add_lens_btn)
|
||
|
||
self.remove_lens_btn = QPushButton("❌ Удалить")
|
||
self.remove_lens_btn.setEnabled(False)
|
||
self.remove_lens_btn.clicked.connect(self._remove_lens)
|
||
lenses_buttons_layout.addWidget(self.remove_lens_btn)
|
||
|
||
right_layout.addLayout(lenses_buttons_layout)
|
||
|
||
columns_layout.addLayout(left_layout)
|
||
columns_layout.addLayout(right_layout)
|
||
layout.addLayout(columns_layout)
|
||
|
||
# Кнопка закрытия
|
||
close_btn = QPushButton("Закрыть")
|
||
close_btn.clicked.connect(self.accept)
|
||
close_layout = QHBoxLayout()
|
||
close_layout.addStretch()
|
||
close_layout.addWidget(close_btn)
|
||
layout.addLayout(close_layout)
|
||
|
||
def _update_cameras_list(self):
|
||
"""Обновляет отображение списка камер"""
|
||
self.cameras_list.clear()
|
||
for camera in self.cameras:
|
||
self.cameras_list.addItem(camera)
|
||
self._selected_camera = None
|
||
self.remove_camera_btn.setEnabled(False)
|
||
|
||
def _update_lenses_list(self):
|
||
"""Обновляет отображение списка объективов"""
|
||
self.lenses_list.clear()
|
||
for lens in self.lenses:
|
||
self.lenses_list.addItem(lens)
|
||
self._selected_lens = None
|
||
self.remove_lens_btn.setEnabled(False)
|
||
|
||
def _select_camera(self, camera: str):
|
||
"""Выделяет камеру в списке"""
|
||
self._selected_camera = camera
|
||
self.remove_camera_btn.setEnabled(True)
|
||
|
||
# Снимаем выделение с объективов
|
||
self.lenses_list.clearSelection()
|
||
self._selected_lens = None
|
||
self.remove_lens_btn.setEnabled(False)
|
||
|
||
def _select_lens(self, lens: str):
|
||
"""Выделяет объектив в списке"""
|
||
self._selected_lens = lens
|
||
self.remove_lens_btn.setEnabled(True)
|
||
|
||
# Снимаем выделение с камер
|
||
self.cameras_list.clearSelection()
|
||
self._selected_camera = None
|
||
self.remove_camera_btn.setEnabled(False)
|
||
|
||
def _add_camera(self):
|
||
"""Добавляет новую камеру"""
|
||
new_camera, ok = QInputDialog.getText(self, "Добавить камеру", "Введите название камеры:")
|
||
if ok and new_camera and new_camera.strip():
|
||
new_name = new_camera.strip()
|
||
if new_name in self.cameras:
|
||
QMessageBox.warning(self, "Ошибка", "Такая камера уже существует!")
|
||
return
|
||
|
||
self.cameras.append(new_name)
|
||
self.config_service.add_camera(new_name)
|
||
self._update_cameras_list()
|
||
QMessageBox.information(self, "Успех", f"Камера '{new_name}' добавлена")
|
||
|
||
def _remove_camera(self):
|
||
"""Удаляет выбранную камеру"""
|
||
if hasattr(self, '_selected_camera') and self._selected_camera:
|
||
reply = QMessageBox.question(self, "Подтверждение",
|
||
f"Удалить камеру '{self._selected_camera}'?",
|
||
QMessageBox.Yes | QMessageBox.No)
|
||
if reply == QMessageBox.Yes:
|
||
self.cameras.remove(self._selected_camera)
|
||
self.config_service.remove_camera(self._selected_camera)
|
||
self._update_cameras_list()
|
||
QMessageBox.information(self, "Успех", f"Камера '{self._selected_camera}' удалена")
|
||
|
||
def _add_lens(self):
|
||
"""Добавляет новый объектив"""
|
||
new_lens, ok = QInputDialog.getText(self, "Добавить объектив", "Введите название объектива:")
|
||
if ok and new_lens and new_lens.strip():
|
||
new_name = new_lens.strip()
|
||
if new_name in self.lenses:
|
||
QMessageBox.warning(self, "Ошибка", "Такой объектив уже существует!")
|
||
return
|
||
|
||
self.lenses.append(new_name)
|
||
self.config_service.add_lens(new_name)
|
||
self._update_lenses_list()
|
||
QMessageBox.information(self, "Успех", f"Объектив '{new_name}' добавлен")
|
||
|
||
def _remove_lens(self):
|
||
"""Удаляет выбранный объектив"""
|
||
if hasattr(self, '_selected_lens') and self._selected_lens:
|
||
reply = QMessageBox.question(self, "Подтверждение",
|
||
f"Удалить объектив '{self._selected_lens}'?",
|
||
QMessageBox.Yes | QMessageBox.No)
|
||
if reply == QMessageBox.Yes:
|
||
self.lenses.remove(self._selected_lens)
|
||
self.config_service.remove_lens(self._selected_lens)
|
||
self._update_lenses_list()
|
||
QMessageBox.information(self, "Успех", f"Объектив '{self._selected_lens}' удалён") |