TextEditor: Use new setup pattern for the finders

The FindInFiles definition cannot go yet to the .cpp yet as there
are some exported functions.

Change-Id: I2d2f02ae80b560e3147f461fcbee0fa62b8085a3
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2024-01-26 15:43:08 +01:00
parent 66b50438d8
commit 524167a936
7 changed files with 81 additions and 75 deletions

View File

@@ -3,6 +3,7 @@
#include "findincurrentfile.h" #include "findincurrentfile.h"
#include "basefilefind.h"
#include "textdocument.h" #include "textdocument.h"
#include "texteditortr.h" #include "texteditortr.h"
@@ -11,10 +12,33 @@
#include <utils/qtcsettings.h> #include <utils/qtcsettings.h>
#include <QPointer>
using namespace Utils; using namespace Utils;
namespace TextEditor::Internal { namespace TextEditor::Internal {
class FindInCurrentFile final : public BaseFileFind
{
public:
FindInCurrentFile();
private:
QString id() const final;
QString displayName() const final;
bool isEnabled() const final;
void writeSettings(Utils::QtcSettings *settings) final;
void readSettings(Utils::QtcSettings *settings) final;
QString label() const final;
QString toolTip() const final;
FileContainerProvider fileContainerProvider() const final;
void handleFileChange(Core::IEditor *editor);
QPointer<Core::IDocument> m_currentDocument;
};
FindInCurrentFile::FindInCurrentFile() FindInCurrentFile::FindInCurrentFile()
{ {
connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged, connect(Core::EditorManager::instance(), &Core::EditorManager::currentEditorChanged,
@@ -87,4 +111,9 @@ void FindInCurrentFile::readSettings(QtcSettings *settings)
settings->endGroup(); settings->endGroup();
} }
void setupFindInCurrentFile()
{
static FindInCurrentFile theFindInCurrentFile;
}
} // TextEditor::Internal } // TextEditor::Internal

View File

@@ -3,41 +3,8 @@
#pragma once #pragma once
#include "basefilefind.h" namespace TextEditor::Internal {
#include <QPointer> void setupFindInCurrentFile();
namespace Core { } // TextEditor::Internal
class IEditor;
class IDocument;
} // namespace Core
namespace TextEditor {
namespace Internal {
class FindInCurrentFile final : public BaseFileFind
{
Q_OBJECT
public:
FindInCurrentFile();
QString id() const override;
QString displayName() const override;
bool isEnabled() const override;
void writeSettings(Utils::QtcSettings *settings) override;
void readSettings(Utils::QtcSettings *settings) override;
protected:
QString label() const override;
QString toolTip() const override;
private:
FileContainerProvider fileContainerProvider() const override;
void handleFileChange(Core::IEditor *editor);
QPointer<Core::IDocument> m_currentDocument;
};
} // namespace Internal
} // namespace TextEditor

View File

@@ -23,12 +23,10 @@ using namespace Utils;
namespace TextEditor { namespace TextEditor {
static FindInFiles *m_instance = nullptr;
static const char HistoryKey[] = "FindInFiles.Directories.History"; static const char HistoryKey[] = "FindInFiles.Directories.History";
FindInFiles::FindInFiles() FindInFiles::FindInFiles()
{ {
m_instance = this;
connect(EditorManager::instance(), &EditorManager::findOnFileSystemRequest, connect(EditorManager::instance(), &EditorManager::findOnFileSystemRequest,
this, &FindInFiles::findOnFileSystem); this, &FindInFiles::findOnFileSystem);
} }
@@ -209,18 +207,30 @@ void FindInFiles::setBaseDirectory(const FilePath &directory)
m_directory->setBaseDirectory(directory); m_directory->setBaseDirectory(directory);
} }
static FindInFiles *s_instance;
FindInFiles &findInFiles()
{
return *s_instance;
}
void FindInFiles::findOnFileSystem(const QString &path) void FindInFiles::findOnFileSystem(const QString &path)
{ {
QTC_ASSERT(m_instance, return);
const QFileInfo fi(path); const QFileInfo fi(path);
const QString folder = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath(); const QString folder = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath();
m_instance->setSearchDir(FilePath::fromString(folder)); findInFiles().setSearchDir(FilePath::fromString(folder));
Find::openFindDialog(m_instance); Find::openFindDialog(&findInFiles());
} }
FindInFiles *FindInFiles::instance() FindInFiles *FindInFiles::instance()
{ {
return m_instance; return s_instance;
}
void Internal::setupFindInFiles(QObject *guard)
{
s_instance = new FindInFiles;
s_instance->setParent(guard);
} }
} // TextEditor } // TextEditor

View File

@@ -58,4 +58,6 @@ private:
bool m_isValid = false; bool m_isValid = false;
}; };
namespace Internal { void setupFindInFiles(QObject *guard); }
} // namespace TextEditor } // namespace TextEditor

View File

@@ -3,6 +3,7 @@
#include "findinopenfiles.h" #include "findinopenfiles.h"
#include "basefilefind.h"
#include "textdocument.h" #include "textdocument.h"
#include "texteditortr.h" #include "texteditortr.h"
@@ -15,6 +16,25 @@ using namespace Utils;
namespace TextEditor::Internal { namespace TextEditor::Internal {
class FindInOpenFiles : public BaseFileFind
{
public:
FindInOpenFiles();
private:
QString id() const final;
QString displayName() const final;
bool isEnabled() const final;
void writeSettings(Utils::QtcSettings *settings) final;
void readSettings(Utils::QtcSettings *settings) final;
QString label() const final;
QString toolTip() const final;
FileContainerProvider fileContainerProvider() const final;
void updateEnabledState() { emit enabledChanged(isEnabled()); }
};
FindInOpenFiles::FindInOpenFiles() FindInOpenFiles::FindInOpenFiles()
{ {
connect(Core::EditorManager::instance(), &Core::EditorManager::editorOpened, connect(Core::EditorManager::instance(), &Core::EditorManager::editorOpened,
@@ -84,9 +104,11 @@ void FindInOpenFiles::readSettings(QtcSettings *settings)
settings->endGroup(); settings->endGroup();
} }
void FindInOpenFiles::updateEnabledState()
void setupFindInOpenFiles()
{ {
emit enabledChanged(isEnabled()); static FindInOpenFiles theFindInOpenFiles;
} }
} // TextEditor::Internal } // TextEditor::Internal

View File

@@ -3,32 +3,8 @@
#pragma once #pragma once
#include "basefilefind.h" namespace TextEditor::Internal {
namespace TextEditor { void setupFindInOpenFiles();
namespace Internal {
class FindInOpenFiles : public BaseFileFind } // TextEditor::Internal
{
Q_OBJECT
public:
FindInOpenFiles();
QString id() const override;
QString displayName() const override;
bool isEnabled() const override;
void writeSettings(Utils::QtcSettings *settings) override;
void readSettings(Utils::QtcSettings *settings) override;
protected:
QString label() const override;
QString toolTip() const override;
private:
FileContainerProvider fileContainerProvider() const override;
void updateEnabledState();
};
} // namespace Internal
} // namespace TextEditor

View File

@@ -67,10 +67,6 @@ const char kCurrentDocumentWordUnderCursor[] = "CurrentDocument:WordUnderCursor"
class TextEditorPluginPrivate : public QObject class TextEditorPluginPrivate : public QObject
{ {
public: public:
FindInFiles findInFilesFilter;
FindInCurrentFile findInCurrentFileFilter;
FindInOpenFiles findInOpenFilesFilter;
MarkdownEditorFactory markdownEditorFactory; MarkdownEditorFactory markdownEditorFactory;
JsonEditorFactory jsonEditorFactory; JsonEditorFactory jsonEditorFactory;
}; };
@@ -122,6 +118,10 @@ void TextEditorPlugin::initialize()
setupBookmarkView(); setupBookmarkView();
setupBookmarkFilter(); setupBookmarkFilter();
setupFindInFiles(this);
setupFindInCurrentFile();
setupFindInOpenFiles();
d = new TextEditorPluginPrivate; d = new TextEditorPluginPrivate;
Context context(TextEditor::Constants::C_TEXTEDITOR); Context context(TextEditor::Constants::C_TEXTEDITOR);