57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
|
|
# 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)
|