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 os
import sys import sys
from pathlib import Path 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.pluginregistry import PluginRegistry
from src.plugins.krowlog.Tab import Tab 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.i18n import _
from src.settings.settings import Settings from src.settings.settings import Settings
from src.ui.formgrid import FormGrid from src.ui.formgrid import FormGrid
@@ -27,7 +30,7 @@ class FindInFilesWidget(Tab):
self._base_dir = QLineEdit(self._initialFolder()) self._base_dir = QLineEdit(self._initialFolder())
self._base_dir.textChanged.connect(self._base_dir_changed) 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_select_base_dir.pressed.connect(self._select_base_dir)
btn_base_dir_for_current_file = QPushButton(QIcon("icons/myicons/target.svg"), "") btn_base_dir_for_current_file = QPushButton(QIcon("icons/myicons/target.svg"), "")
@@ -37,17 +40,47 @@ class FindInFilesWidget(Tab):
form.addRow(QLabel(_("Folder:")), form.addRow(QLabel(_("Folder:")),
HBox(self._base_dir, btn_select_base_dir, btn_base_dir_for_current_file)) 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) form.addRow(QLabel(_("Filter:")), self._filter)
self._btn_search = QPushButton(QIcon("icons/ionicons/search-outline.svg"), _("Search")) # self._found_files = QTreeView()
self._btn_search.pressed.connect(self._search) # self._found_files_model = QStandardItemModel()
self.layout.addWidget(self._btn_search) # 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): self._view.doubleClicked.connect(self._open_file)
pass
# 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): def _select_base_dir(self):
dialog = QFileDialog() dialog = QFileDialog()
@@ -62,9 +95,15 @@ class FindInFilesWidget(Tab):
dir = self._get_base_dir_for_current_file() dir = self._get_base_dir_for_current_file()
self._base_dir.setText(dir) 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): def _base_dir_changed(self, base_dir):
if os.path.isdir(base_dir): if os.path.isdir(base_dir):
self._settings.set_session("findInFiles", "folder", 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: def _initialFolder(self) -> str:
folder = self._settings.get_session("findInFiles", "folder", fallback=None) folder = self._settings.get_session("findInFiles", "folder", fallback=None)

View File

@@ -32,9 +32,9 @@ class FindInFilesPlugin(PluginBase):
icon_file="icons/ionicons/search-outline.svg") icon_file="icons/ionicons/search-outline.svg")
def _add_notes_tab(self): def _add_notes_tab(self):
findInFiles = FindInFilesWidget( find_in_files = FindInFilesWidget(
"find_in_files", "find_in_files",
_("Find In Files"), _("Find In Files"),
self.settings self.settings
) )
PluginRegistry.execute_single("add_dock", Qt.DockWidgetArea.LeftDockWidgetArea, findInFiles) PluginRegistry.execute_single("add_dock", Qt.DockWidgetArea.LeftDockWidgetArea, find_in_files)