""" 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}' удалён")