add findInFiles plugin
This commit is contained in:
0
src/plugins/findInFiles/__init__.py
Normal file
0
src/plugins/findInFiles/__init__.py
Normal file
86
src/plugins/findInFiles/findinfileswidget.py
Normal file
86
src/plugins/findInFiles/findinfileswidget.py
Normal 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
|
||||
Reference in New Issue
Block a user