add findInFiles plugin

This commit is contained in:
2022-07-30 09:17:08 +02:00
parent 1a4006ca8f
commit 14c059e5aa
12 changed files with 247 additions and 11 deletions

View File

View File

@@ -0,0 +1,86 @@
import os
import sys
from pathlib import Path
from PySide6.QtGui import QIcon
from src.pluginregistry import PluginRegistry
from src.plugins.krowlog.Tab import Tab
from PySide6.QtWidgets import QTextEdit, QVBoxLayout, QLabel, QLineEdit, QPushButton, QFileDialog
from src.i18n import _
from src.settings.settings import Settings
from src.ui.formgrid import FormGrid
from src.ui.hbox import HBox
class FindInFilesWidget(Tab):
def __init__(self, unique_id: str, title: str, settings: Settings):
super(FindInFilesWidget, self).__init__(unique_id, title)
self._settings = settings
self.layout = QVBoxLayout(self)
self.layout.setContentsMargins(0, 0, 0, 0)
form = FormGrid();
self.layout.addWidget(form)
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.pressed.connect(self._select_base_dir)
btn_base_dir_for_current_file = QPushButton(QIcon("icons/myicons/target.svg"), "")
btn_base_dir_for_current_file.setToolTip(_("Focus on current file"))
btn_base_dir_for_current_file.pressed.connect(self._select_btn_base_dir_for_current_file)
form.addRow(QLabel(_("Folder:")),
HBox(self._base_dir, btn_select_base_dir, btn_base_dir_for_current_file))
self._filter = QLineEdit("*.log")
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.layout.addWidget(QTextEdit())
def _search(self):
pass
def _select_base_dir(self):
dialog = QFileDialog()
selected_dir = dialog.getExistingDirectory(
caption=_("Open Directory"),
dir=self._base_dir.text()
)
if selected_dir:
self._base_dir.setText(selected_dir)
def _select_btn_base_dir_for_current_file(self):
dir = self._get_base_dir_for_current_file()
self._base_dir.setText(dir)
def _base_dir_changed(self, base_dir):
if os.path.isdir(base_dir):
self._settings.set_session("findInFiles", "folder", base_dir)
def _initialFolder(self) -> str:
folder = self._settings.get_session("findInFiles", "folder", fallback=None)
if folder is None or not os.path.isdir(folder):
folder = self._get_base_dir_for_current_file()
return folder
def _get_base_dir_for_current_file(self):
current_file = PluginRegistry.execute_single("current_file")
folder = os.path.dirname(current_file) if current_file else None
if not os.path.isdir(folder):
if sys.platform == 'win32' or sys.platform == 'cygwin':
folder = "C:\\"
else:
folder = os.path.join(Path.home())
return folder