Fri, 24 Sep 2021 20:09:58 +0200
Changed the Find File dialog to an integrated widget (right side)
--- a/eric7.epj Fri Sep 24 17:37:38 2021 +0200 +++ b/eric7.epj Fri Sep 24 20:09:58 2021 +0200 @@ -620,7 +620,6 @@ "eric7/UI/DiffDialog.ui", "eric7/UI/EmailDialog.ui", "eric7/UI/ErrorLogDialog.ui", - "eric7/UI/FindFileNameDialog.ui", "eric7/UI/InstallInfoDialog.ui", "eric7/UI/NotificationFrame.ui", "eric7/UI/NumbersWidget.ui", @@ -713,7 +712,8 @@ "eric7/Preferences/ConfigurationPages/EditorCallTipsJediPage.ui", "eric7/Preferences/ConfigurationPages/EditorMouseClickHandlerJediPage.ui", "eric7/VirtualEnv/VirtualenvManagerWidget.ui", - "eric7/UI/FindFileWidget.ui" + "eric7/UI/FindFileWidget.ui", + "eric7/UI/FindLocationWidget.ui" ], "HASH": "df7daa8781250f7664e6ecaeaf1361fa2efd39ee", "IDLPARAMS": { @@ -1835,7 +1835,6 @@ "eric7/UI/DiffHighlighter.py", "eric7/UI/EmailDialog.py", "eric7/UI/ErrorLogDialog.py", - "eric7/UI/FindFileNameDialog.py", "eric7/UI/Info.py", "eric7/UI/InstallInfoDialog.py", "eric7/UI/LogView.py", @@ -2285,7 +2284,8 @@ "eric7/eric7_virtualenv.py", "eric7/eric7_virtualenv.pyw", "eric7/UI/FindFileWidget.py", - "eric7/VCS/StatusWidget.py" + "eric7/VCS/StatusWidget.py", + "eric7/UI/FindLocationWidget.py" ], "SPELLEXCLUDES": "Dictionaries/excludes.dic", "SPELLLANGUAGE": "en_US",
--- a/eric7/Documentation/Source/eric7.UI.FindFileNameDialog.html Fri Sep 24 17:37:38 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,343 +0,0 @@ -<!DOCTYPE html> -<html><head> -<title>eric7.UI.FindFileNameDialog</title> -<meta charset="UTF-8"> -<link rel="stylesheet" href="styles.css"> -</head> -<body> -<a NAME="top" ID="top"></a> -<h1>eric7.UI.FindFileNameDialog</h1> - -<p> -Module implementing a dialog to search for files. -</p> -<h3>Global Attributes</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Classes</h3> - -<table> - -<tr> -<td><a href="#FindFileNameDialog">FindFileNameDialog</a></td> -<td>Class implementing a dialog to search for files.</td> -</tr> -</table> -<h3>Functions</h3> - -<table> -<tr><td>None</td></tr> -</table> -<hr /> -<hr /> -<a NAME="FindFileNameDialog" ID="FindFileNameDialog"></a> -<h2>FindFileNameDialog</h2> - -<p> - Class implementing a dialog to search for files. -</p> -<p> - The occurrences found are displayed in a QTreeWidget showing the - filename and the pathname. The file will be opened upon a double click - onto the respective entry of the list. -</p> -<h3>Signals</h3> -<dl> - -<dt>designerFile(str)</dt> -<dd> -emitted to open a Qt-Designer file -</dd> -<dt>sourceFile(str)</dt> -<dd> -emitted to open a file in the editor -</dd> -</dl> -<h3>Derived from</h3> -QWidget, Ui_FindFileNameDialog -<h3>Class Attributes</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Class Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> -<h3>Methods</h3> - -<table> - -<tr> -<td><a href="#FindFileNameDialog.__init__">FindFileNameDialog</a></td> -<td>Constructor</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.__openFile">__openFile</a></td> -<td>Private slot to open a file.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.__searchFile">__searchFile</a></td> -<td>Private slot to handle the search.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.checkStop">checkStop</a></td> -<td>Public method to check, if the search should be stopped.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td> -<td>Private slot called by a button of the button box clicked.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_fileExtEdit_textChanged">on_fileExtEdit_textChanged</a></td> -<td>Private slot to handle the textChanged signal of the file extension edit.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_fileList_currentItemChanged">on_fileList_currentItemChanged</a></td> -<td>Private slot handling a change of the current item.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_fileList_itemActivated">on_fileList_itemActivated</a></td> -<td>Private slot to handle the double click on a file item.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_fileNameEdit_textChanged">on_fileNameEdit_textChanged</a></td> -<td>Private slot to handle the textChanged signal of the file name edit.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_projectCheckBox_toggled">on_projectCheckBox_toggled</a></td> -<td>Private slot to handle the toggled signal of the project checkbox.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_searchDirCheckBox_toggled">on_searchDirCheckBox_toggled</a></td> -<td>Private slot to handle the toggled signal of the search directory checkbox.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_searchDirPicker_textChanged">on_searchDirPicker_textChanged</a></td> -<td>Private slot to handle the textChanged signal of the search directory edit.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.on_syspathCheckBox_toggled">on_syspathCheckBox_toggled</a></td> -<td>Private slot to handle the toggled signal of the sys.path checkbox.</td> -</tr> -<tr> -<td><a href="#FindFileNameDialog.show">show</a></td> -<td>Public method to enable/disable the project checkbox.</td> -</tr> -</table> -<h3>Static Methods</h3> - -<table> -<tr><td>None</td></tr> -</table> - -<a NAME="FindFileNameDialog.__init__" ID="FindFileNameDialog.__init__"></a> -<h4>FindFileNameDialog (Constructor)</h4> -<b>FindFileNameDialog</b>(<i>project, parent=None</i>) - -<p> - Constructor -</p> -<dl> - -<dt><i>project</i></dt> -<dd> -reference to the project object -</dd> -<dt><i>parent</i></dt> -<dd> -parent widget of this dialog (QWidget) -</dd> -</dl> -<a NAME="FindFileNameDialog.__openFile" ID="FindFileNameDialog.__openFile"></a> -<h4>FindFileNameDialog.__openFile</h4> -<b>__openFile</b>(<i>itm=None</i>) - -<p> - Private slot to open a file. -</p> -<p> - It emits the signal sourceFile or designerFile depending on the - file extension. -</p> -<dl> - -<dt><i>itm</i></dt> -<dd> -item to be opened (QTreeWidgetItem) -</dd> -</dl> -<a NAME="FindFileNameDialog.__searchFile" ID="FindFileNameDialog.__searchFile"></a> -<h4>FindFileNameDialog.__searchFile</h4> -<b>__searchFile</b>(<i></i>) - -<p> - Private slot to handle the search. -</p> -<a NAME="FindFileNameDialog.checkStop" ID="FindFileNameDialog.checkStop"></a> -<h4>FindFileNameDialog.checkStop</h4> -<b>checkStop</b>(<i></i>) - -<p> - Public method to check, if the search should be stopped. -</p> -<dl> -<dt>Return:</dt> -<dd> -flag indicating the search should be stopped (boolean) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_buttonBox_clicked" ID="FindFileNameDialog.on_buttonBox_clicked"></a> -<h4>FindFileNameDialog.on_buttonBox_clicked</h4> -<b>on_buttonBox_clicked</b>(<i>button</i>) - -<p> - Private slot called by a button of the button box clicked. -</p> -<dl> - -<dt><i>button</i></dt> -<dd> -button that was clicked (QAbstractButton) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_fileExtEdit_textChanged" ID="FindFileNameDialog.on_fileExtEdit_textChanged"></a> -<h4>FindFileNameDialog.on_fileExtEdit_textChanged</h4> -<b>on_fileExtEdit_textChanged</b>(<i>text</i>) - -<p> - Private slot to handle the textChanged signal of the file extension - edit. -</p> -<dl> - -<dt><i>text</i></dt> -<dd> -(ignored) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_fileList_currentItemChanged" ID="FindFileNameDialog.on_fileList_currentItemChanged"></a> -<h4>FindFileNameDialog.on_fileList_currentItemChanged</h4> -<b>on_fileList_currentItemChanged</b>(<i>current, previous</i>) - -<p> - Private slot handling a change of the current item. -</p> -<dl> - -<dt><i>current</i></dt> -<dd> -current item (QTreeWidgetItem) -</dd> -<dt><i>previous</i></dt> -<dd> -prevoius current item (QTreeWidgetItem) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_fileList_itemActivated" ID="FindFileNameDialog.on_fileList_itemActivated"></a> -<h4>FindFileNameDialog.on_fileList_itemActivated</h4> -<b>on_fileList_itemActivated</b>(<i>itm, column</i>) - -<p> - Private slot to handle the double click on a file item. -</p> -<p> - It emits the signal sourceFile or designerFile depending on the - file extension. -</p> -<dl> - -<dt><i>itm</i></dt> -<dd> -the double clicked listview item (QTreeWidgetItem) -</dd> -<dt><i>column</i></dt> -<dd> -column that was double clicked (integer) (ignored) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_fileNameEdit_textChanged" ID="FindFileNameDialog.on_fileNameEdit_textChanged"></a> -<h4>FindFileNameDialog.on_fileNameEdit_textChanged</h4> -<b>on_fileNameEdit_textChanged</b>(<i>text</i>) - -<p> - Private slot to handle the textChanged signal of the file name edit. -</p> -<dl> - -<dt><i>text</i></dt> -<dd> -(ignored) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_projectCheckBox_toggled" ID="FindFileNameDialog.on_projectCheckBox_toggled"></a> -<h4>FindFileNameDialog.on_projectCheckBox_toggled</h4> -<b>on_projectCheckBox_toggled</b>(<i>checked</i>) - -<p> - Private slot to handle the toggled signal of the project checkbox. -</p> -<dl> - -<dt><i>checked</i></dt> -<dd> -flag indicating the state of the checkbox (boolean) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_searchDirCheckBox_toggled" ID="FindFileNameDialog.on_searchDirCheckBox_toggled"></a> -<h4>FindFileNameDialog.on_searchDirCheckBox_toggled</h4> -<b>on_searchDirCheckBox_toggled</b>(<i>checked</i>) - -<p> - Private slot to handle the toggled signal of the search directory - checkbox. -</p> -<dl> - -<dt><i>checked</i></dt> -<dd> -flag indicating the state of the checkbox (boolean) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_searchDirPicker_textChanged" ID="FindFileNameDialog.on_searchDirPicker_textChanged"></a> -<h4>FindFileNameDialog.on_searchDirPicker_textChanged</h4> -<b>on_searchDirPicker_textChanged</b>(<i>text</i>) - -<p> - Private slot to handle the textChanged signal of the search directory - edit. -</p> -<dl> - -<dt><i>text</i></dt> -<dd> -text of the search dir edit (string) -</dd> -</dl> -<a NAME="FindFileNameDialog.on_syspathCheckBox_toggled" ID="FindFileNameDialog.on_syspathCheckBox_toggled"></a> -<h4>FindFileNameDialog.on_syspathCheckBox_toggled</h4> -<b>on_syspathCheckBox_toggled</b>(<i>checked</i>) - -<p> - Private slot to handle the toggled signal of the sys.path checkbox. -</p> -<dl> - -<dt><i>checked</i></dt> -<dd> -flag indicating the state of the checkbox (boolean) -</dd> -</dl> -<a NAME="FindFileNameDialog.show" ID="FindFileNameDialog.show"></a> -<h4>FindFileNameDialog.show</h4> -<b>show</b>(<i></i>) - -<p> - Public method to enable/disable the project checkbox. -</p> -<div align="right"><a href="#top">Up</a></div> -<hr /> -</body></html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/Documentation/Source/eric7.UI.FindLocationWidget.html Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,343 @@ +<!DOCTYPE html> +<html><head> +<title>eric7.UI.FindFileNameDialog</title> +<meta charset="UTF-8"> +<link rel="stylesheet" href="styles.css"> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>eric7.UI.FindFileNameDialog</h1> + +<p> +Module implementing a dialog to search for files. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> + +<table> + +<tr> +<td><a href="#FindFileNameDialog">FindFileNameDialog</a></td> +<td>Class implementing a dialog to search for files.</td> +</tr> +</table> +<h3>Functions</h3> + +<table> +<tr><td>None</td></tr> +</table> +<hr /> +<hr /> +<a NAME="FindFileNameDialog" ID="FindFileNameDialog"></a> +<h2>FindFileNameDialog</h2> + +<p> + Class implementing a dialog to search for files. +</p> +<p> + The occurrences found are displayed in a QTreeWidget showing the + filename and the pathname. The file will be opened upon a double click + onto the respective entry of the list. +</p> +<h3>Signals</h3> +<dl> + +<dt>designerFile(str)</dt> +<dd> +emitted to open a Qt-Designer file +</dd> +<dt>sourceFile(str)</dt> +<dd> +emitted to open a file in the editor +</dd> +</dl> +<h3>Derived from</h3> +QWidget, Ui_FindFileNameDialog +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#FindFileNameDialog.__init__">FindFileNameDialog</a></td> +<td>Constructor</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.__openFile">__openFile</a></td> +<td>Private slot to open a file.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.__searchFile">__searchFile</a></td> +<td>Private slot to handle the search.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.checkStop">checkStop</a></td> +<td>Public method to check, if the search should be stopped.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td> +<td>Private slot called by a button of the button box clicked.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_fileExtEdit_textChanged">on_fileExtEdit_textChanged</a></td> +<td>Private slot to handle the textChanged signal of the file extension edit.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_fileList_currentItemChanged">on_fileList_currentItemChanged</a></td> +<td>Private slot handling a change of the current item.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_fileList_itemActivated">on_fileList_itemActivated</a></td> +<td>Private slot to handle the double click on a file item.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_fileNameEdit_textChanged">on_fileNameEdit_textChanged</a></td> +<td>Private slot to handle the textChanged signal of the file name edit.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_projectCheckBox_toggled">on_projectCheckBox_toggled</a></td> +<td>Private slot to handle the toggled signal of the project checkbox.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_searchDirCheckBox_toggled">on_searchDirCheckBox_toggled</a></td> +<td>Private slot to handle the toggled signal of the search directory checkbox.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_searchDirPicker_textChanged">on_searchDirPicker_textChanged</a></td> +<td>Private slot to handle the textChanged signal of the search directory edit.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.on_syspathCheckBox_toggled">on_syspathCheckBox_toggled</a></td> +<td>Private slot to handle the toggled signal of the sys.path checkbox.</td> +</tr> +<tr> +<td><a href="#FindFileNameDialog.show">show</a></td> +<td>Public method to enable/disable the project checkbox.</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="FindFileNameDialog.__init__" ID="FindFileNameDialog.__init__"></a> +<h4>FindFileNameDialog (Constructor)</h4> +<b>FindFileNameDialog</b>(<i>project, parent=None</i>) + +<p> + Constructor +</p> +<dl> + +<dt><i>project</i></dt> +<dd> +reference to the project object +</dd> +<dt><i>parent</i></dt> +<dd> +parent widget of this dialog (QWidget) +</dd> +</dl> +<a NAME="FindFileNameDialog.__openFile" ID="FindFileNameDialog.__openFile"></a> +<h4>FindFileNameDialog.__openFile</h4> +<b>__openFile</b>(<i>itm=None</i>) + +<p> + Private slot to open a file. +</p> +<p> + It emits the signal sourceFile or designerFile depending on the + file extension. +</p> +<dl> + +<dt><i>itm</i></dt> +<dd> +item to be opened (QTreeWidgetItem) +</dd> +</dl> +<a NAME="FindFileNameDialog.__searchFile" ID="FindFileNameDialog.__searchFile"></a> +<h4>FindFileNameDialog.__searchFile</h4> +<b>__searchFile</b>(<i></i>) + +<p> + Private slot to handle the search. +</p> +<a NAME="FindFileNameDialog.checkStop" ID="FindFileNameDialog.checkStop"></a> +<h4>FindFileNameDialog.checkStop</h4> +<b>checkStop</b>(<i></i>) + +<p> + Public method to check, if the search should be stopped. +</p> +<dl> +<dt>Return:</dt> +<dd> +flag indicating the search should be stopped (boolean) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_buttonBox_clicked" ID="FindFileNameDialog.on_buttonBox_clicked"></a> +<h4>FindFileNameDialog.on_buttonBox_clicked</h4> +<b>on_buttonBox_clicked</b>(<i>button</i>) + +<p> + Private slot called by a button of the button box clicked. +</p> +<dl> + +<dt><i>button</i></dt> +<dd> +button that was clicked (QAbstractButton) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_fileExtEdit_textChanged" ID="FindFileNameDialog.on_fileExtEdit_textChanged"></a> +<h4>FindFileNameDialog.on_fileExtEdit_textChanged</h4> +<b>on_fileExtEdit_textChanged</b>(<i>text</i>) + +<p> + Private slot to handle the textChanged signal of the file extension + edit. +</p> +<dl> + +<dt><i>text</i></dt> +<dd> +(ignored) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_fileList_currentItemChanged" ID="FindFileNameDialog.on_fileList_currentItemChanged"></a> +<h4>FindFileNameDialog.on_fileList_currentItemChanged</h4> +<b>on_fileList_currentItemChanged</b>(<i>current, previous</i>) + +<p> + Private slot handling a change of the current item. +</p> +<dl> + +<dt><i>current</i></dt> +<dd> +current item (QTreeWidgetItem) +</dd> +<dt><i>previous</i></dt> +<dd> +prevoius current item (QTreeWidgetItem) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_fileList_itemActivated" ID="FindFileNameDialog.on_fileList_itemActivated"></a> +<h4>FindFileNameDialog.on_fileList_itemActivated</h4> +<b>on_fileList_itemActivated</b>(<i>itm, column</i>) + +<p> + Private slot to handle the double click on a file item. +</p> +<p> + It emits the signal sourceFile or designerFile depending on the + file extension. +</p> +<dl> + +<dt><i>itm</i></dt> +<dd> +the double clicked listview item (QTreeWidgetItem) +</dd> +<dt><i>column</i></dt> +<dd> +column that was double clicked (integer) (ignored) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_fileNameEdit_textChanged" ID="FindFileNameDialog.on_fileNameEdit_textChanged"></a> +<h4>FindFileNameDialog.on_fileNameEdit_textChanged</h4> +<b>on_fileNameEdit_textChanged</b>(<i>text</i>) + +<p> + Private slot to handle the textChanged signal of the file name edit. +</p> +<dl> + +<dt><i>text</i></dt> +<dd> +(ignored) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_projectCheckBox_toggled" ID="FindFileNameDialog.on_projectCheckBox_toggled"></a> +<h4>FindFileNameDialog.on_projectCheckBox_toggled</h4> +<b>on_projectCheckBox_toggled</b>(<i>checked</i>) + +<p> + Private slot to handle the toggled signal of the project checkbox. +</p> +<dl> + +<dt><i>checked</i></dt> +<dd> +flag indicating the state of the checkbox (boolean) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_searchDirCheckBox_toggled" ID="FindFileNameDialog.on_searchDirCheckBox_toggled"></a> +<h4>FindFileNameDialog.on_searchDirCheckBox_toggled</h4> +<b>on_searchDirCheckBox_toggled</b>(<i>checked</i>) + +<p> + Private slot to handle the toggled signal of the search directory + checkbox. +</p> +<dl> + +<dt><i>checked</i></dt> +<dd> +flag indicating the state of the checkbox (boolean) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_searchDirPicker_textChanged" ID="FindFileNameDialog.on_searchDirPicker_textChanged"></a> +<h4>FindFileNameDialog.on_searchDirPicker_textChanged</h4> +<b>on_searchDirPicker_textChanged</b>(<i>text</i>) + +<p> + Private slot to handle the textChanged signal of the search directory + edit. +</p> +<dl> + +<dt><i>text</i></dt> +<dd> +text of the search dir edit (string) +</dd> +</dl> +<a NAME="FindFileNameDialog.on_syspathCheckBox_toggled" ID="FindFileNameDialog.on_syspathCheckBox_toggled"></a> +<h4>FindFileNameDialog.on_syspathCheckBox_toggled</h4> +<b>on_syspathCheckBox_toggled</b>(<i>checked</i>) + +<p> + Private slot to handle the toggled signal of the sys.path checkbox. +</p> +<dl> + +<dt><i>checked</i></dt> +<dd> +flag indicating the state of the checkbox (boolean) +</dd> +</dl> +<a NAME="FindFileNameDialog.show" ID="FindFileNameDialog.show"></a> +<h4>FindFileNameDialog.show</h4> +<b>show</b>(<i></i>) + +<p> + Public method to enable/disable the project checkbox. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/eric7/UI/FindFileNameDialog.py Fri Sep 24 17:37:38 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,264 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2004 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Module implementing a dialog to search for files. -""" - -import os -import sys - -from PyQt6.QtCore import pyqtSignal, pyqtSlot -from PyQt6.QtWidgets import ( - QWidget, QHeaderView, QApplication, QDialogButtonBox, QTreeWidgetItem -) - -from EricWidgets.EricPathPicker import EricPathPickerModes - -from .Ui_FindFileNameDialog import Ui_FindFileNameDialog - -from Utilities import direntries -import Utilities - - -class FindFileNameDialog(QWidget, Ui_FindFileNameDialog): - """ - Class implementing a dialog to search for files. - - The occurrences found are displayed in a QTreeWidget showing the - filename and the pathname. The file will be opened upon a double click - onto the respective entry of the list. - - @signal sourceFile(str) emitted to open a file in the editor - @signal designerFile(str) emitted to open a Qt-Designer file - """ - sourceFile = pyqtSignal(str) - designerFile = pyqtSignal(str) - - def __init__(self, project, parent=None): - """ - Constructor - - @param project reference to the project object - @param parent parent widget of this dialog (QWidget) - """ - super().__init__(parent) - self.setupUi(self) - - self.searchDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) - - self.fileList.headerItem().setText(self.fileList.columnCount(), "") - - self.stopButton = self.buttonBox.addButton( - self.tr("Stop"), QDialogButtonBox.ButtonRole.ActionRole) - self.stopButton.setToolTip(self.tr("Press to stop the search")) - self.stopButton.setEnabled(False) - self.buttonBox.button( - QDialogButtonBox.StandardButton.Open).setToolTip( - self.tr("Opens the selected file")) - self.buttonBox.button( - QDialogButtonBox.StandardButton.Open).setEnabled(False) - - self.project = project - self.extsepLabel.setText(os.extsep) - - self.shouldStop = False - - def on_buttonBox_clicked(self, button): - """ - Private slot called by a button of the button box clicked. - - @param button button that was clicked (QAbstractButton) - """ - if button == self.stopButton: - self.shouldStop = True - elif button == self.buttonBox.button( - QDialogButtonBox.StandardButton.Open - ): - self.__openFile() - - def __openFile(self, itm=None): - """ - Private slot to open a file. - - It emits the signal sourceFile or designerFile depending on the - file extension. - - @param itm item to be opened (QTreeWidgetItem) - """ - if itm is None: - itm = self.fileList.currentItem() - if itm is not None: - fileName = itm.text(0) - filePath = itm.text(1) - - if fileName.endswith('.ui'): - self.designerFile.emit(os.path.join(filePath, fileName)) - else: - self.sourceFile.emit(os.path.join(filePath, fileName)) - - def __searchFile(self): - """ - Private slot to handle the search. - """ - fileName = self.fileNameEdit.text() - if not fileName: - self.fileList.clear() - return - fileExt = self.fileExtEdit.text() - if not fileExt and Utilities.isWindowsPlatform(): - self.fileList.clear() - return - - patternFormat = fileExt and "{0}{1}{2}" or "{0}*{1}{2}" - fileNamePattern = patternFormat.format( - fileName, os.extsep, fileExt and fileExt or '*') - - searchPaths = [] - if ( - self.searchDirCheckBox.isChecked() and - self.searchDirPicker.text() != "" - ): - searchPaths.append(self.searchDirPicker.text()) - if self.projectCheckBox.isChecked(): - searchPaths.append(self.project.ppath) - if self.syspathCheckBox.isChecked(): - searchPaths.extend(sys.path) - - found = False - self.fileList.clear() - locations = {} - self.shouldStop = False - self.stopButton.setEnabled(True) - QApplication.processEvents() - - for path in searchPaths: - if os.path.isdir(path): - files = direntries(path, True, fileNamePattern, - False, self.checkStop) - if files: - found = True - for file in files: - fp, fn = os.path.split(file) - if fn in locations: - if fp in locations[fn]: - continue - else: - locations[fn].append(fp) - else: - locations[fn] = [fp] - QTreeWidgetItem(self.fileList, [fn, fp]) - QApplication.processEvents() - - del locations - self.stopButton.setEnabled(False) - self.fileList.header().resizeSections( - QHeaderView.ResizeMode.ResizeToContents) - self.fileList.header().setStretchLastSection(True) - - if found: - self.fileList.setCurrentItem(self.fileList.topLevelItem(0)) - - def checkStop(self): - """ - Public method to check, if the search should be stopped. - - @return flag indicating the search should be stopped (boolean) - """ - QApplication.processEvents() - return self.shouldStop - - def on_fileNameEdit_textChanged(self, text): - """ - Private slot to handle the textChanged signal of the file name edit. - - @param text (ignored) - """ - self.__searchFile() - - def on_fileExtEdit_textChanged(self, text): - """ - Private slot to handle the textChanged signal of the file extension - edit. - - @param text (ignored) - """ - self.__searchFile() - - def on_searchDirPicker_textChanged(self, text): - """ - Private slot to handle the textChanged signal of the search directory - edit. - - @param text text of the search dir edit (string) - """ - self.searchDirCheckBox.setEnabled(text != "") - if self.searchDirCheckBox.isChecked(): - self.__searchFile() - - def on_searchDirCheckBox_toggled(self, checked): - """ - Private slot to handle the toggled signal of the search directory - checkbox. - - @param checked flag indicating the state of the checkbox (boolean) - """ - if self.searchDirPicker.text(): - self.__searchFile() - - def on_projectCheckBox_toggled(self, checked): - """ - Private slot to handle the toggled signal of the project checkbox. - - @param checked flag indicating the state of the checkbox (boolean) - """ - self.__searchFile() - - def on_syspathCheckBox_toggled(self, checked): - """ - Private slot to handle the toggled signal of the sys.path checkbox. - - @param checked flag indicating the state of the checkbox (boolean) - """ - self.__searchFile() - - def on_fileList_itemActivated(self, itm, column): - """ - Private slot to handle the double click on a file item. - - It emits the signal sourceFile or designerFile depending on the - file extension. - - @param itm the double clicked listview item (QTreeWidgetItem) - @param column column that was double clicked (integer) (ignored) - """ - self.__openFile(itm) - - @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) - def on_fileList_currentItemChanged(self, current, previous): - """ - Private slot handling a change of the current item. - - @param current current item (QTreeWidgetItem) - @param previous prevoius current item (QTreeWidgetItem) - """ - self.buttonBox.button(QDialogButtonBox.StandardButton.Open).setEnabled( - current is not None) - - def show(self): - """ - Public method to enable/disable the project checkbox. - """ - if self.project and self.project.isOpen(): - self.projectCheckBox.setEnabled(True) - self.projectCheckBox.setChecked(True) - else: - self.projectCheckBox.setEnabled(False) - self.projectCheckBox.setChecked(False) - - self.fileNameEdit.selectAll() - self.fileNameEdit.setFocus() - - super().show()
--- a/eric7/UI/FindFileNameDialog.ui Fri Sep 24 17:37:38 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>FindFileNameDialog</class> - <widget class="QWidget" name="FindFileNameDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>599</width> - <height>478</height> - </rect> - </property> - <property name="windowTitle"> - <string>Find File</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QLabel" name="textLabel1"> - <property name="text"> - <string>Enter filename (? matches any single character, * matches everything)</string> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout"> - <item> - <widget class="QLineEdit" name="fileNameEdit"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>9</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string>Enter file name to search for </string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="extsepLabel"> - <property name="text"> - <string>.</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="fileExtEdit"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>1</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="toolTip"> - <string>Enter file extension to search for</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QCheckBox" name="searchDirCheckBox"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="toolTip"> - <string>Enabled to include the entered directory into the search</string> - </property> - <property name="text"> - <string>Search Path:</string> - </property> - </widget> - </item> - <item> - <widget class="EricPathPicker" name="searchDirPicker" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="focusPolicy"> - <enum>Qt::StrongFocus</enum> - </property> - <property name="toolTip"> - <string>Enter the directory, the file should be searched in</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <layout class="QHBoxLayout"> - <item> - <widget class="QCheckBox" name="projectCheckBox"> - <property name="toolTip"> - <string>Select to search in the project path</string> - </property> - <property name="text"> - <string>Search in &project</string> - </property> - <property name="shortcut"> - <string>Alt+P</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="syspathCheckBox"> - <property name="toolTip"> - <string>Select to search in sys.path</string> - </property> - <property name="text"> - <string>Search in &sys.path</string> - </property> - <property name="shortcut"> - <string>Alt+S</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QTreeWidget" name="fileList"> - <property name="rootIsDecorated"> - <bool>false</bool> - </property> - <property name="sortingEnabled"> - <bool>true</bool> - </property> - <column> - <property name="text"> - <string>Filename</string> - </property> - </column> - <column> - <property name="text"> - <string>Path</string> - </property> - </column> - </widget> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Close|QDialogButtonBox::Open</set> - </property> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>EricPathPicker</class> - <extends>QWidget</extends> - <header>EricWidgets/EricPathPicker.h</header> - <container>1</container> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>fileNameEdit</tabstop> - <tabstop>fileExtEdit</tabstop> - <tabstop>searchDirPicker</tabstop> - <tabstop>searchDirCheckBox</tabstop> - <tabstop>projectCheckBox</tabstop> - <tabstop>syspathCheckBox</tabstop> - <tabstop>fileList</tabstop> - </tabstops> - <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>rejected()</signal> - <receiver>FindFileNameDialog</receiver> - <slot>close()</slot> - <hints> - <hint type="sourcelabel"> - <x>40</x> - <y>458</y> - </hint> - <hint type="destinationlabel"> - <x>41</x> - <y>477</y> - </hint> - </hints> - </connection> - </connections> -</ui>
--- a/eric7/UI/FindFileWidget.py Fri Sep 24 17:37:38 2021 +0200 +++ b/eric7/UI/FindFileWidget.py Fri Sep 24 20:09:58 2021 +0200 @@ -43,6 +43,7 @@ at a specificline @signal designerFile(str) emitted to open a Qt-Designer file """ + # TODO: add more signals sourceFile = pyqtSignal(str, int, str, int, int) designerFile = pyqtSignal(str) @@ -63,7 +64,6 @@ """ super().__init__(parent) self.setupUi(self) - self.setWindowFlags(Qt.WindowType.Window) self.layout().setContentsMargins(0, 3, 0, 0) @@ -373,7 +373,7 @@ @rtype str """ return txt.replace("\r", "").replace("\n", "") - + @pyqtSlot() def __stopSearch(self): """
--- a/eric7/UI/FindFileWidget.ui Fri Sep 24 17:37:38 2021 +0200 +++ b/eric7/UI/FindFileWidget.ui Fri Sep 24 20:09:58 2021 +0200 @@ -322,6 +322,19 @@ <item> <layout class="QHBoxLayout" name="horizontalLayout_3"> <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> <widget class="QPushButton" name="findButton"> <property name="toolTip"> <string>Press to start the search process</string>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/UI/FindLocationWidget.py Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,245 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2004 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to search for files. +""" + +import os +import sys + +from PyQt6.QtCore import pyqtSignal, pyqtSlot +from PyQt6.QtWidgets import ( + QWidget, QHeaderView, QApplication, QTreeWidgetItem +) + +from EricWidgets.EricPathPicker import EricPathPickerModes + +from .Ui_FindLocationWidget import Ui_FindLocationWidget + +import UI.PixmapCache +from Utilities import direntries +import Utilities + + +class FindLocationWidget(QWidget, Ui_FindLocationWidget): + """ + Class implementing a widget to search for files. + + The occurrences found are displayed in a QTreeWidget showing the + filename and the pathname. The file will be opened upon a double click + onto the respective entry of the list or by pressing the open button. + + @signal sourceFile(str) emitted to open a file in the editor + @signal designerFile(str) emitted to open a Qt-Designer file + """ + sourceFile = pyqtSignal(str) + designerFile = pyqtSignal(str) + + def __init__(self, project, parent=None): + """ + Constructor + + @param project reference to the project object + @type Project + @param parent parent widget of this dialog + @type QWidget + """ + super().__init__(parent) + self.setupUi(self) + + self.layout().setContentsMargins(0, 3, 0, 0) + + self.searchDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) + + self.fileList.headerItem().setText(self.fileList.columnCount(), "") + + self.stopButton.setEnabled(False) + self.stopButton.clicked.connect(self.__stopSearch) + self.stopButton.setIcon(UI.PixmapCache.getIcon("stopLoading")) + + self.findButton.setEnabled(False) + self.findButton.clicked.connect(self.__searchFile) + self.findButton.setIcon(UI.PixmapCache.getIcon("find")) + + self.openButton.setIcon(UI.PixmapCache.getIcon("open")) + self.openButton.clicked.connect(self.__openFile) + + self.project = project + self.extsepLabel.setText(os.extsep) + + self.__shouldStop = False + + self.fileNameEdit.returnPressed.connect(self.__searchFile) + self.fileExtEdit.returnPressed.connect(self.__searchFile) + + @pyqtSlot() + def __stopSearch(self): + """ + Private slot to handle the stop button being pressed. + """ + self.__shouldStop = True + + @pyqtSlot() + def __openFile(self, itm=None): + """ + Private slot to open a file. + + It emits the signal sourceFile or designerFile depending on the + file extension. + + @param itm item to be opened + @type QTreeWidgetItem + """ + if itm is None: + itm = self.fileList.currentItem() + if itm is not None: + fileName = itm.text(0) + filePath = itm.text(1) + + # TODO: add more extensions and use mimetype + # - *.ts, *.qm->*.ts + # Utilities.MimeTypes.isTextFile(filename) + if fileName.endswith('.ui'): + self.designerFile.emit(os.path.join(filePath, fileName)) + else: + self.sourceFile.emit(os.path.join(filePath, fileName)) + + @pyqtSlot() + def __searchFile(self): + """ + Private slot to handle the search. + """ + fileName = self.fileNameEdit.text() + if not fileName: + self.fileList.clear() + return + + fileExt = self.fileExtEdit.text() + if not fileExt and Utilities.isWindowsPlatform(): + self.fileList.clear() + return + + self.findStatusLabel.clear() + + patternFormat = fileExt and "{0}{1}{2}" or "{0}*{1}{2}" + fileNamePattern = patternFormat.format( + fileName, os.extsep, fileExt and fileExt or '*') + + searchPaths = [] + if ( + self.searchDirCheckBox.isChecked() and + self.searchDirPicker.text() != "" + ): + searchPaths.append(self.searchDirPicker.text()) + if self.projectCheckBox.isChecked(): + searchPaths.append(self.project.ppath) + if self.syspathCheckBox.isChecked(): + searchPaths.extend(sys.path) + + self.fileList.clear() + locations = {} + self.__shouldStop = False + self.stopButton.setEnabled(True) + QApplication.processEvents() + + for path in searchPaths: + if os.path.isdir(path): + files = direntries(path, True, fileNamePattern, + False, self.checkStop) + if files: + for file in files: + fp, fn = os.path.split(file) + if fn in locations: + if fp in locations[fn]: + continue + else: + locations[fn].append(fp) + else: + locations[fn] = [fp] + QTreeWidgetItem(self.fileList, [fn, fp]) + QApplication.processEvents() + + del locations + self.stopButton.setEnabled(False) + self.fileList.header().resizeSections( + QHeaderView.ResizeMode.ResizeToContents) + self.fileList.header().setStretchLastSection(True) + + self.findStatusLabel.setText(self.tr( + "%n file(s) found", "", self.fileList.topLevelItemCount())) + + def checkStop(self): + """ + Public method to check, if the search should be stopped. + + @return flag indicating the search should be stopped + @rtype bool + """ + QApplication.processEvents() + return self.__shouldStop + + @pyqtSlot(str) + def on_fileNameEdit_textChanged(self, text): + """ + Private slot to handle the textChanged signal of the file name edit. + + @param text (ignored) + @type str + """ + self.findButton.setEnabled(bool(text)) + + @pyqtSlot(str) + def on_searchDirPicker_textChanged(self, text): + """ + Private slot to handle the textChanged signal of the search directory + edit. + + @param text text of the search dir edit + @type str + """ + self.searchDirCheckBox.setEnabled(text != "") + + @pyqtSlot(QTreeWidgetItem, int) + def on_fileList_itemActivated(self, itm, column): + """ + Private slot to handle the double click on a file item. + + It emits the signal sourceFile or designerFile depending on the + file extension. + + @param itm the double clicked listview item + @type QTreeWidgetItem + @param column column that was double clicked (ignored) + @type int + """ + self.__openFile(itm) + + @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem) + def on_fileList_currentItemChanged(self, current, previous): + """ + Private slot handling a change of the current item. + + @param current current item + @type QTreeWidgetItem + @param previous prevoius current item + @type QTreeWidgetItem + """ + self.openButton.setEnabled(current is not None) + + @pyqtSlot() + def activate(self): + """ + Public slot to enable/disable the project checkbox. + """ + if self.project and self.project.isOpen(): + self.projectCheckBox.setEnabled(True) + self.projectCheckBox.setChecked(True) + else: + self.projectCheckBox.setEnabled(False) + self.projectCheckBox.setChecked(False) + + self.fileNameEdit.selectAll() + self.fileNameEdit.setFocus()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/UI/FindLocationWidget.ui Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,253 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>FindLocationWidget</class> + <widget class="QWidget" name="FindLocationWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>600</width> + <height>800</height> + </rect> + </property> + <property name="windowTitle"> + <string>Find File</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="textLabel1"> + <property name="text"> + <string>Enter filename (? matches any single character, * matches everything)</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout"> + <item> + <widget class="QLineEdit" name="fileNameEdit"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>9</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="toolTip"> + <string>Enter file name to search for </string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="extsepLabel"> + <property name="text"> + <string>.</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="fileExtEdit"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>1</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="toolTip"> + <string>Enter file extension to search for</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QCheckBox" name="searchDirCheckBox"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="toolTip"> + <string>Enabled to include the entered directory into the search</string> + </property> + <property name="text"> + <string>Search Path:</string> + </property> + </widget> + </item> + <item> + <widget class="EricPathPicker" name="searchDirPicker" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="focusPolicy"> + <enum>Qt::StrongFocus</enum> + </property> + <property name="toolTip"> + <string>Enter the directory, the file should be searched in</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout"> + <item> + <widget class="QCheckBox" name="projectCheckBox"> + <property name="toolTip"> + <string>Select to search in the project path</string> + </property> + <property name="text"> + <string>Search in &project</string> + </property> + <property name="shortcut"> + <string>Alt+P</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="syspathCheckBox"> + <property name="toolTip"> + <string>Select to search in sys.path</string> + </property> + <property name="text"> + <string>Search in &sys.path</string> + </property> + <property name="shortcut"> + <string>Alt+S</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="findButton"> + <property name="toolTip"> + <string>Press to start the search process</string> + </property> + <property name="text"> + <string>Find</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="stopButton"> + <property name="toolTip"> + <string>Press to stop the current search process</string> + </property> + <property name="text"> + <string>Stop</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <widget class="Line" name="line_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="EricSqueezeLabelPath" name="findStatusLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="fileList"> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <column> + <property name="text"> + <string>Filename</string> + </property> + </column> + <column> + <property name="text"> + <string>Path</string> + </property> + </column> + </widget> + </item> + <item> + <widget class="QPushButton" name="openButton"> + <property name="toolTip"> + <string>Press to open the selected file</string> + </property> + <property name="text"> + <string>Open</string> + </property> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>EricPathPicker</class> + <extends>QWidget</extends> + <header>EricWidgets/EricPathPicker.h</header> + <container>1</container> + </customwidget> + <customwidget> + <class>EricSqueezeLabelPath</class> + <extends>QLabel</extends> + <header>EricWidgets/EricSqueezeLabels.h</header> + </customwidget> + </customwidgets> + <tabstops> + <tabstop>fileNameEdit</tabstop> + <tabstop>fileExtEdit</tabstop> + <tabstop>searchDirCheckBox</tabstop> + <tabstop>searchDirPicker</tabstop> + <tabstop>projectCheckBox</tabstop> + <tabstop>syspathCheckBox</tabstop> + <tabstop>findButton</tabstop> + <tabstop>stopButton</tabstop> + <tabstop>fileList</tabstop> + <tabstop>openButton</tabstop> + </tabstops> + <resources/> + <connections/> +</ui>
--- a/eric7/UI/UserInterface.py Fri Sep 24 17:37:38 2021 +0200 +++ b/eric7/UI/UserInterface.py Fri Sep 24 20:09:58 2021 +0200 @@ -953,6 +953,13 @@ self.viewmanager.openSourceFile) self.__findFileWidget.designerFile.connect(self.__designer) + # Create the find location (file) widget + from .FindLocationWidget import FindLocationWidget + self.__findLocationWidget = FindLocationWidget(self.project, self) + self.__findLocationWidget.sourceFile.connect( + self.viewmanager.openSourceFile) + self.__findLocationWidget.designerFile.connect(self.__designer) + # Create the VCS Status widget from VCS.StatusWidget import StatusWidget self.__vcsStatusWidget = StatusWidget( @@ -1085,6 +1092,10 @@ UI.PixmapCache.getIcon("find"), self.tr("Find/Replace In Files")) + self.rToolbox.addItem(self.__findLocationWidget, + UI.PixmapCache.getIcon("findLocation"), + self.tr("Find File")) + self.rToolbox.addItem(self.pluginRepositoryViewer, UI.PixmapCache.getIcon("pluginRepository"), self.tr("Plugin Repository")) @@ -1238,6 +1249,11 @@ self.tr("Find/Replace In Files")) self.rightSidebar.addTab( + self.__findLocationWidget, + UI.PixmapCache.getIcon("sbFindLocation96"), + self.tr("Find File")) + + self.rightSidebar.addTab( self.pluginRepositoryViewer, UI.PixmapCache.getIcon("sbPluginRepository96"), self.tr("Plugin Repository")) @@ -2260,6 +2276,24 @@ self.actions.append(self.findFileActivateAct) self.addAction(self.findFileActivateAct) + self.findLocationActivateAct = EricAction( + self.tr("Find File"), + self.tr("Find File"), + QKeySequence(self.tr("Ctrl+Alt+Shift+L")), + 0, self, + 'find_location_activate') + self.findLocationActivateAct.setStatusTip(self.tr( + "Switch the input focus to the Find File window.")) + self.findLocationActivateAct.setWhatsThis(self.tr( + """<b>Find File</b>""" + """<p>This switches the input focus to the Find File window.""" + """</p>""" + )) + self.findLocationActivateAct.triggered.connect( + self.__activateFindLocationWidget) + self.actions.append(self.findLocationActivateAct) + self.addAction(self.findLocationActivateAct) + self.vcsStatusListActivateAct = EricAction( self.tr("VCS Status List"), self.tr("VCS Status List"), @@ -3380,6 +3414,7 @@ self.codeDocumentationViewerActivateAct) self.__menus["subwindow"].addAction(self.debugViewerActivateAct) self.__menus["subwindow"].addAction(self.findFileActivateAct) + self.__menus["subwindow"].addAction(self.findLocationActivateAct) self.__menus["subwindow"].addAction( self.pluginRepositoryViewerActivateAct) self.__menus["subwindow"].addAction(self.virtualenvManagerActivateAct) @@ -6914,6 +6949,27 @@ self.__findFileWidget.activate() + def showFindLocationWidget(self): + """ + Public method to show the Find File widget. + """ + self.__activateFindLocationWidget() + + def __activateFindLocationWidget(self): + """ + Private method to activate the Find File widget. + """ + if self.__layoutType == "Toolboxes": + self.rToolboxDock.show() + self.rToolbox.setCurrentWidget(self.__findLocationWidget) + elif self.__layoutType == "Sidebars": + self.rightSidebar.show() + self.rightSidebar.setCurrentWidget(self.__findLocationWidget) + self.__findLocationWidget.setFocus( + Qt.FocusReason.ActiveWindowFocusReason) + + self.__findLocationWidget.activate() + def __activateVcsStatusList(self): """ Private slot to activate the VCS Status List.
--- a/eric7/ViewManager/ViewManager.py Fri Sep 24 17:37:38 2021 +0200 +++ b/eric7/ViewManager/ViewManager.py Fri Sep 24 20:09:58 2021 +0200 @@ -764,21 +764,22 @@ self.printPreviewAct.setEnabled(False) self.fileActions.append(self.printPreviewAct) - self.findFileNameAct = EricAction( - QCoreApplication.translate('ViewManager', 'Search File'), - QCoreApplication.translate('ViewManager', 'Search &File...'), + self.findLocationAct = EricAction( + QCoreApplication.translate('ViewManager', 'Find File'), + UI.PixmapCache.getIcon("findLocation"), + QCoreApplication.translate('ViewManager', 'Find &File...'), QKeySequence(QCoreApplication.translate( - 'ViewManager', "Alt+Ctrl+F", "File|Search File")), + 'ViewManager', "Alt+Ctrl+F", "File|Find File")), 0, self, 'vm_file_search_file') - self.findFileNameAct.setStatusTip(QCoreApplication.translate( - 'ViewManager', 'Search for a file')) - self.findFileNameAct.setWhatsThis(QCoreApplication.translate( + self.findLocationAct.setStatusTip(QCoreApplication.translate( + 'ViewManager', 'Search for a file by entering a search pattern')) + self.findLocationAct.setWhatsThis(QCoreApplication.translate( 'ViewManager', - """<b>Search File</b>""" - """<p>Search for a file.</p>""" + """<b>Find File</b>""" + """<p>This searches for a file by entering a search pattern.</p>""" )) - self.findFileNameAct.triggered.connect(self.__findFileName) - self.fileActions.append(self.findFileNameAct) + self.findLocationAct.triggered.connect(self.__findLocation) + self.fileActions.append(self.findLocationAct) def initFileMenu(self): """ @@ -806,7 +807,7 @@ menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() - menu.addAction(self.findFileNameAct) + menu.addAction(self.findLocationAct) menu.addSeparator() menu.addAction(self.saveAct) menu.addAction(self.saveAsAct) @@ -5320,11 +5321,11 @@ """ return self.editorsCheckFocusIn - def __findFileName(self): - """ - Private method to handle the search for file action. - """ - self.ui.showFindFileByNameDialog() + def __findLocation(self): + """ + Private method to handle the Find File action. + """ + self.ui.showFindLocationWidget() def appFocusChanged(self, old, now): """
--- a/eric7/eric7.py Fri Sep 24 17:37:38 2021 +0200 +++ b/eric7/eric7.py Fri Sep 24 20:09:58 2021 +0200 @@ -417,3 +417,4 @@ # Generic TODOs: # # TODO: add an embedded help viewer based on QWebEngineView (right side) +# TODO: add an embedded "Search File" (right side)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/icons/breeze-dark/findLocation.svg Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + viewBox="0 0 22 22" + id="svg9" + sodipodi:docname="findLocation.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <metadata + id="metadata13"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1594" + inkscape:window-height="1014" + id="namedview11" + showgrid="false" + inkscape:zoom="32.5" + inkscape:cx="11" + inkscape:cy="11" + inkscape:window-x="74" + inkscape:window-y="18" + inkscape:window-maximized="0" + inkscape:current-layer="svg9" /> + <defs + id="defs3"> + <style + id="current-color-scheme" + type="text/css"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.25" + class="ColorScheme-Text" + d="M 4.75,1 C 3.41125,1 2.1723,1.7156125 1.502925,2.875 1.1682375,3.4546875 1,4.10235 1,4.75 v 12.5 c 0,0.647625 0.16825,1.29525 0.502925,1.875 C 2.1723,20.284375 3.41125,21 4.75,21 h 12.5 V 19.75 H 4.75 c -0.8941625,0 -1.71845,-0.475625 -2.165525,-1.25 -0.4470875,-0.774375 -0.4470875,-1.725625 0,-2.5 C 3.03155,15.225625 3.8558375,14.75 4.75,14.75 H 6 V 6 h 12.5 v 10 h 1.25 V 4.75 H 6 V 1 Z m 0,1.25 V 4.75 6 13.5 c -0.9378125,0 -1.821625,0.357875 -2.5,0.96675 V 4.75 C 2.25,4.3185875 2.360925,3.8871875 2.584475,3.5 3.03155,2.725625 3.8558375,2.25 4.75,2.25 Z" + id="path5" /> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.25" + class="ColorScheme-Text" + d="m 12.25,7.25 c -2.761425,0 -5,2.238575 -5,5 0,2.761375 2.238575,5 5,5 1.10925,-0.0023 2.18625,-0.37325 3.0615,-1.054625 L 20.11625,21 21,20.11625 16.19775,15.314 C 16.878875,14.43775 17.249,13.35975 17.25,12.25 c 0,-2.761425 -2.238625,-5 -5,-5 z m 0,1.25 C 14.321125,8.5 16,10.178875 16,12.25 16,14.321125 14.321125,16 12.25,16 10.178875,16 8.5,14.321125 8.5,12.25 8.5,10.178875 10.178875,8.5 12.25,8.5 Z" + id="path7" /> +</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/icons/breeze-dark/sbFindLocation96.svg Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + viewBox="0 0 96 96" + id="svg9" + sodipodi:docname="sbFindLocation96.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" + width="96" + height="96"> + <metadata + id="metadata13"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1594" + inkscape:window-height="1014" + id="namedview11" + showgrid="false" + inkscape:zoom="8.125" + inkscape:cx="49.661108" + inkscape:cy="46.016632" + inkscape:window-x="74" + inkscape:window-y="18" + inkscape:window-maximized="0" + inkscape:current-layer="svg9" /> + <defs + id="defs3"> + <style + id="current-color-scheme" + type="text/css"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:5.25" + class="ColorScheme-Text" + d="M 21.75,6 C 16.12725,6 10.92366,9.0055725 8.112285,13.875 6.7065975,16.309688 6,19.02987 6,21.75 v 52.5 c 0,2.720025 0.70665,5.44005 2.112285,7.875 C 10.92366,86.994375 16.12725,90 21.75,90 h 52.5 v -5.25 h -52.5 c -3.755483,0 -7.21749,-1.997625 -9.095205,-5.25 -1.877768,-3.252375 -1.877768,-7.247625 0,-10.5 C 14.53251,65.747625 17.994517,63.75 21.75,63.75 H 27 V 27 h 52.5 v 42 h 5.25 V 21.75 H 27 V 6 Z m 0,5.25 V 21.75 27 58.5 c -3.938812,0 -7.650825,1.503075 -10.5,4.06035 V 21.75 c 0,-1.811933 0.465885,-3.623813 1.404795,-5.25 1.877715,-3.252375 5.339722,-5.25 9.095205,-5.25 z" + id="path5" /> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:5.25" + class="ColorScheme-Text" + d="m 53.25,32.25 c -11.597985,0 -21,9.402015 -21,21 0,11.597775 9.402015,21 21,21 4.65885,-0.0097 9.18225,-1.56765 12.8583,-4.429425 L 86.28825,90 90,86.28825 69.83055,66.1188 C 72.691275,62.43855 74.2458,57.91095 74.25,53.25 c 0,-11.597985 -9.402225,-21 -21,-21 z m 0,5.25 C 61.948725,37.5 69,44.551275 69,53.25 69,61.948725 61.948725,69 53.25,69 44.551275,69 37.5,61.948725 37.5,53.25 37.5,44.551275 44.551275,37.5 53.25,37.5 Z" + id="path7" /> +</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/icons/breeze-light/findLocation.svg Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + viewBox="0 0 22 22" + id="svg9" + sodipodi:docname="findLocation.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <metadata + id="metadata13"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1614" + inkscape:window-height="980" + id="namedview11" + showgrid="false" + inkscape:zoom="32.5" + inkscape:cx="11" + inkscape:cy="11" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg9" /> + <defs + id="defs3"> + <style + id="current-color-scheme" + type="text/css"> + .ColorScheme-Text { + color:#232629; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.25" + class="ColorScheme-Text" + d="M 4.75,1 C 3.41125,1 2.1723,1.7156125 1.502925,2.875 1.1682375,3.4546875 1,4.10235 1,4.75 v 12.5 c 0,0.647625 0.16825,1.29525 0.502925,1.875 C 2.1723,20.284375 3.41125,21 4.75,21 h 12.5 V 19.75 H 4.75 c -0.8941625,0 -1.71845,-0.475625 -2.165525,-1.25 -0.4470875,-0.774375 -0.4470875,-1.725625 0,-2.5 C 3.03155,15.225625 3.8558375,14.75 4.75,14.75 H 6 V 6 h 12.5 v 10 h 1.25 V 4.75 H 6 V 1 Z m 0,1.25 V 4.75 6 13.5 c -0.9378125,0 -1.821625,0.357875 -2.5,0.96675 V 4.75 C 2.25,4.3185875 2.360925,3.8871875 2.584475,3.5 3.03155,2.725625 3.8558375,2.25 4.75,2.25 Z" + id="path5" /> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.25" + class="ColorScheme-Text" + d="m 12.25,7.25 c -2.761425,0 -5,2.238575 -5,5 0,2.761375 2.238575,5 5,5 1.10925,-0.0023 2.18625,-0.37325 3.0615,-1.054625 L 20.11625,21 21,20.11625 16.19775,15.314 C 16.878875,14.43775 17.249,13.35975 17.25,12.25 c 0,-2.761425 -2.238625,-5 -5,-5 z m 0,1.25 C 14.321125,8.5 16,10.178875 16,12.25 16,14.321125 14.321125,16 12.25,16 10.178875,16 8.5,14.321125 8.5,12.25 8.5,10.178875 10.178875,8.5 12.25,8.5 Z" + id="path7" /> +</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/icons/breeze-light/sbFindLocation96.svg Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + viewBox="0 0 96 96" + id="svg9" + sodipodi:docname="sbFindLocation96.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" + width="96" + height="96"> + <metadata + id="metadata13"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1594" + inkscape:window-height="1014" + id="namedview11" + showgrid="false" + inkscape:zoom="8.125" + inkscape:cx="49.661108" + inkscape:cy="46.016632" + inkscape:window-x="74" + inkscape:window-y="18" + inkscape:window-maximized="0" + inkscape:current-layer="svg9" /> + <defs + id="defs3"> + <style + id="current-color-scheme" + type="text/css"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:5.25" + class="ColorScheme-Text" + d="M 21.75,6 C 16.12725,6 10.92366,9.0055725 8.112285,13.875 6.7065975,16.309688 6,19.02987 6,21.75 v 52.5 c 0,2.720025 0.70665,5.44005 2.112285,7.875 C 10.92366,86.994375 16.12725,90 21.75,90 h 52.5 v -5.25 h -52.5 c -3.755483,0 -7.21749,-1.997625 -9.095205,-5.25 -1.877768,-3.252375 -1.877768,-7.247625 0,-10.5 C 14.53251,65.747625 17.994517,63.75 21.75,63.75 H 27 V 27 h 52.5 v 42 h 5.25 V 21.75 H 27 V 6 Z m 0,5.25 V 21.75 27 58.5 c -3.938812,0 -7.650825,1.503075 -10.5,4.06035 V 21.75 c 0,-1.811933 0.465885,-3.623813 1.404795,-5.25 1.877715,-3.252375 5.339722,-5.25 9.095205,-5.25 z" + id="path5" /> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:5.25" + class="ColorScheme-Text" + d="m 53.25,32.25 c -11.597985,0 -21,9.402015 -21,21 0,11.597775 9.402015,21 21,21 4.65885,-0.0097 9.18225,-1.56765 12.8583,-4.429425 L 86.28825,90 90,86.28825 69.83055,66.1188 C 72.691275,62.43855 74.2458,57.91095 74.25,53.25 c 0,-11.597985 -9.402225,-21 -21,-21 z m 0,5.25 C 61.948725,37.5 69,44.551275 69,53.25 69,61.948725 61.948725,69 53.25,69 44.551275,69 37.5,61.948725 37.5,53.25 37.5,44.551275 44.551275,37.5 53.25,37.5 Z" + id="path7" /> +</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/icons/oxygen/sbFindLocation96.svg Fri Sep 24 20:09:58 2021 +0200 @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + viewBox="0 0 96 96" + id="svg9" + sodipodi:docname="sbFindLocation96.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" + width="96" + height="96"> + <metadata + id="metadata13"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1594" + inkscape:window-height="1014" + id="namedview11" + showgrid="false" + inkscape:zoom="8.125" + inkscape:cx="49.661108" + inkscape:cy="46.016632" + inkscape:window-x="74" + inkscape:window-y="18" + inkscape:window-maximized="0" + inkscape:current-layer="svg9" /> + <defs + id="defs3"> + <style + id="current-color-scheme" + type="text/css"> + .ColorScheme-Text { + color:#eff0f1; + } + </style> + </defs> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:5.25" + class="ColorScheme-Text" + d="M 21.75,6 C 16.12725,6 10.92366,9.0055725 8.112285,13.875 6.7065975,16.309688 6,19.02987 6,21.75 v 52.5 c 0,2.720025 0.70665,5.44005 2.112285,7.875 C 10.92366,86.994375 16.12725,90 21.75,90 h 52.5 v -5.25 h -52.5 c -3.755483,0 -7.21749,-1.997625 -9.095205,-5.25 -1.877768,-3.252375 -1.877768,-7.247625 0,-10.5 C 14.53251,65.747625 17.994517,63.75 21.75,63.75 H 27 V 27 h 52.5 v 42 h 5.25 V 21.75 H 27 V 6 Z m 0,5.25 V 21.75 27 58.5 c -3.938812,0 -7.650825,1.503075 -10.5,4.06035 V 21.75 c 0,-1.811933 0.465885,-3.623813 1.404795,-5.25 1.877715,-3.252375 5.339722,-5.25 9.095205,-5.25 z" + id="path5" /> + <path + style="fill:currentColor;fill-opacity:1;stroke:none;stroke-width:5.25" + class="ColorScheme-Text" + d="m 53.25,32.25 c -11.597985,0 -21,9.402015 -21,21 0,11.597775 9.402015,21 21,21 4.65885,-0.0097 9.18225,-1.56765 12.8583,-4.429425 L 86.28825,90 90,86.28825 69.83055,66.1188 C 72.691275,62.43855 74.2458,57.91095 74.25,53.25 c 0,-11.597985 -9.402225,-21 -21,-21 z m 0,5.25 C 61.948725,37.5 69,44.551275 69,53.25 69,61.948725 61.948725,69 53.25,69 44.551275,69 37.5,61.948725 37.5,53.25 37.5,44.551275 44.551275,37.5 53.25,37.5 Z" + id="path7" /> +</svg>