# ui/widgets/settings_dialog.py from PyQt6.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QListWidget, QFileDialog, QMessageBox ) class SettingsDialog(QDialog): def __init__(self, current_settings, parent=None): super().__init__(parent) self.settings = current_settings self.setWindowTitle("Настройки подключения и папок") self.resize(500, 380) self.init_ui() def init_ui(self): layout = QVBoxLayout(self) layout.addWidget(QLabel("Адрес API ComfyUI:")) self.url_input = QLineEdit() self.url_input.setText(self.settings.get("comfyui_url", "http://127.0.0.1:8000")) layout.addWidget(self.url_input) layout.addWidget(QLabel("Отслеживаемые папки генерации:")) self.paths_list = QListWidget() for p in self.settings.get("tracked_paths", []): self.paths_list.addItem(p) layout.addWidget(self.paths_list) paths_btn_layout = QHBoxLayout() self.add_path_btn = QPushButton("Добавить дополнительную папку") self.add_path_btn.clicked.connect(self._add_path) self.remove_path_btn = QPushButton("Удалить выбранную") self.remove_path_btn.clicked.connect(self._remove_path) paths_btn_layout.addWidget(self.add_path_btn) paths_btn_layout.addWidget(self.remove_path_btn) layout.addLayout(paths_btn_layout) btn_layout = QHBoxLayout() self.save_btn = QPushButton("Сохранить") self.save_btn.clicked.connect(self._save) self.cancel_btn = QPushButton("Отмена") self.cancel_btn.clicked.connect(self.reject) btn_layout.addStretch() btn_layout.addWidget(self.save_btn) btn_layout.addWidget(self.cancel_btn) layout.addLayout(btn_layout) def _add_path(self): dir_path = QFileDialog.getExistingDirectory(self, "Выбрать отслеживаемую папку") if dir_path: items = [self.paths_list.item(i).text() for i in range(self.paths_list.count())] if dir_path not in items: self.paths_list.addItem(dir_path) def _remove_path(self): selected = self.paths_list.selectedItems() if not selected: return for s in selected: self.paths_list.takeItem(self.paths_list.row(s)) def _save(self): url = self.url_input.text().strip() if not url: QMessageBox.warning(self, "Ошибка", "Адрес API не может быть пустым.") return paths = [self.paths_list.item(i).text() for i in range(self.paths_list.count())] if not paths: QMessageBox.warning(self, "Ошибка", "Должна быть добавлена хотя бы одна папка.") return self.settings["comfyui_url"] = url self.settings["tracked_paths"] = paths self.accept()