add findInFiles plugin

This commit is contained in:
2022-08-21 09:32:32 +02:00
parent 14c059e5aa
commit dd0cba259b
2 changed files with 51 additions and 12 deletions

View File

@@ -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)