diff --git a/src/plugins/findInFiles/findinfileswidget.py b/src/plugins/findInFiles/findinfileswidget.py index a5f501e..1315612 100644 --- a/src/plugins/findInFiles/findinfileswidget.py +++ b/src/plugins/findInFiles/findinfileswidget.py @@ -1,12 +1,15 @@ +import glob import os import sys from pathlib import Path -from PySide6.QtGui import QIcon +from PySide6.QtCore import QDir, QModelIndex +from PySide6.QtGui import QIcon, QStandardItemModel, QStandardItem from src.pluginregistry import PluginRegistry from src.plugins.krowlog.Tab import Tab -from PySide6.QtWidgets import QTextEdit, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialog +from PySide6.QtWidgets import QTextEdit, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialog, QTreeView, \ + QFileSystemModel from src.i18n import _ from src.settings.settings import Settings from src.ui.formgrid import FormGrid @@ -27,7 +30,7 @@ class FindInFilesWidget(Tab): self._base_dir = QLineEdit(self._initialFolder()) self._base_dir.textChanged.connect(self._base_dir_changed) - btn_select_base_dir = QPushButton(QIcon.fromTheme("document-open"), "") + btn_select_base_dir = QPushButton(QIcon.fromTheme("folder"), "") btn_select_base_dir.pressed.connect(self._select_base_dir) btn_base_dir_for_current_file = QPushButton(QIcon("icons/myicons/target.svg"), "") @@ -37,17 +40,47 @@ class FindInFilesWidget(Tab): form.addRow(QLabel(_("Folder:")), HBox(self._base_dir, btn_select_base_dir, btn_base_dir_for_current_file)) - self._filter = QLineEdit("*.log") + self._filter = QLineEdit(self._settings.get_session("findInFiles", "filter", fallback="*.log")) + self._filter.textChanged.connect(self._filter_changed) form.addRow(QLabel(_("Filter:")), self._filter) - self._btn_search = QPushButton(QIcon("icons/ionicons/search-outline.svg"), _("Search")) - self._btn_search.pressed.connect(self._search) - self.layout.addWidget(self._btn_search) + # self._found_files = QTreeView() + # self._found_files_model = QStandardItemModel() + # self._found_files_model.setHorizontalHeaderLabels(["Name"]) + # self._found_files.setModel(self._found_files_model) + # self.layout.addWidget(self._found_files) - self.layout.addWidget(QTextEdit()) + self._model = QFileSystemModel() + self._model.setRootPath(self._base_dir.text()) + self._model.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot | QDir.AllEntries) + self._model.setNameFilters([self._filter.text()]) + self._model.setNameFilterDisables(False) + self._view = QTreeView() + self._view.setModel(self._model) + self._view.setRootIndex(self._model.index(self._base_dir.text())) + self._view.show() + self.layout.addWidget(self._view) - def _search(self): - pass + self._view.doubleClicked.connect(self._open_file) + + # icons: /snap/gtk-common-themes/1534/share/icons/ + # folder, document, text-css, text-xml, text-x-python + # + + def _open_file(self, index: QModelIndex): + + path = [] + i = index + while i.isValid(): + path.append(i.data()) + i = i.parent() + path.reverse() + file = Path() + for s in path: + file = file / s + + if file.is_file(): + PluginRegistry.execute_single("open_file", f"{file}") def _select_base_dir(self): dialog = QFileDialog() @@ -62,9 +95,15 @@ class FindInFilesWidget(Tab): dir = self._get_base_dir_for_current_file() self._base_dir.setText(dir) + def _filter_changed(self, filter): + self._settings.set_session("findInFiles", "filter", filter) + self._model.setNameFilters([filter]) + def _base_dir_changed(self, base_dir): if os.path.isdir(base_dir): self._settings.set_session("findInFiles", "folder", base_dir) + self._model.setRootPath(base_dir) + self._view.setRootIndex(self._model.index(base_dir)) def _initialFolder(self) -> str: folder = self._settings.get_session("findInFiles", "folder", fallback=None) diff --git a/src/plugins/findinfilesplugin.py b/src/plugins/findinfilesplugin.py index 5642138..914b18f 100644 --- a/src/plugins/findinfilesplugin.py +++ b/src/plugins/findinfilesplugin.py @@ -32,9 +32,9 @@ class FindInFilesPlugin(PluginBase): icon_file="icons/ionicons/search-outline.svg") def _add_notes_tab(self): - findInFiles = FindInFilesWidget( + find_in_files = FindInFilesWidget( "find_in_files", _("Find In Files"), self.settings ) - PluginRegistry.execute_single("add_dock", Qt.DockWidgetArea.LeftDockWidgetArea, findInFiles) + PluginRegistry.execute_single("add_dock", Qt.DockWidgetArea.LeftDockWidgetArea, find_in_files)