add findInFiles plugin
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user