74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
|
|
# 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()
|