# ui/widgets/left_panel.py from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QTreeView, QComboBox from PyQt6.QtGui import QFileSystemModel from PyQt6.QtCore import QDir, pyqtSignal class LeftPanel(QWidget): search_changed = pyqtSignal(str) root_folder_changed = pyqtSignal(str) # Сигнал переключения активной корневой папки def __init__(self, parent=None): super().__init__(parent) self.init_ui() def init_ui(self): layout = QVBoxLayout(self) layout.setContentsMargins(5, 5, 5, 5) self.search_input = QLineEdit() self.search_input.setPlaceholderText("Поиск по тегам или промтам...") self.search_input.textChanged.connect(self.search_changed.emit) layout.addWidget(self.search_input) # Выпадающий список выбора активной корневой директории layout.addWidget(QLabel("Активная папка:")) self.folder_selector = QComboBox() self.folder_selector.currentTextChanged.connect(self._on_folder_changed) layout.addWidget(self.folder_selector) layout.addWidget(QLabel("Дерево подпапок:")) self.folder_model = QFileSystemModel() self.folder_model.setFilter(QDir.Filter.Dirs | QDir.Filter.NoDotAndDotDot) self.tree_view = QTreeView() self.tree_view.setModel(self.folder_model) self.tree_view.setHeaderHidden(True) for i in range(1, self.folder_model.columnCount()): self.tree_view.setColumnHidden(i, True) layout.addWidget(self.tree_view) def set_tracked_folders(self, folders: list): """ Обновляет выпадающий список папок """ self.folder_selector.blockSignals(True) self.folder_selector.clear() self.folder_selector.addItems(folders) self.folder_selector.blockSignals(False) def set_root_path(self, path: str): self.folder_model.setRootPath(path) self.tree_view.setRootIndex(self.folder_model.index(path)) def _on_folder_changed(self, path: str): if path: self.set_root_path(path) self.root_folder_changed.emit(path)