forked from qt-creator/qt-creator
Locator: Do not use object pool for some filters and LocatorManager
Also bundle lifetime management into one object. Also minor interfact cleanup. Change-Id: I60eec84b0b28a20ce353fcdbfdff1c4848686ba0 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -160,7 +160,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
||||
SaveFile::initializeUmask();
|
||||
|
||||
Find::initialize();
|
||||
m_locator->initialize(this, arguments, errorMessage);
|
||||
m_locator->initialize();
|
||||
|
||||
MacroExpander *expander = Utils::globalMacroExpander();
|
||||
expander->registerVariable("CurrentDate:ISO", tr("The current date (ISO)."),
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
#include "locator.h"
|
||||
|
||||
#include "directoryfilter.h"
|
||||
#include "executefilter.h"
|
||||
#include "externaltoolsfilter.h"
|
||||
#include "filesystemfilter.h"
|
||||
#include "javascriptfilter.h"
|
||||
@@ -58,7 +60,7 @@
|
||||
#include <QSettings>
|
||||
#include <QtPlugin>
|
||||
|
||||
#ifdef Q_OS_OSX
|
||||
#ifdef Q_OS_MACOS
|
||||
#include "spotlightlocatorfilter.h"
|
||||
#endif
|
||||
|
||||
@@ -67,6 +69,22 @@ namespace Internal {
|
||||
|
||||
static Locator *m_instance = nullptr;
|
||||
|
||||
class LocatorData
|
||||
{
|
||||
public:
|
||||
LocatorManager m_locatorManager;
|
||||
|
||||
JavaScriptFilter m_javaScriptFilter;
|
||||
OpenDocumentsFilter m_openDocumentsFilter;
|
||||
FileSystemFilter m_fileSystemFilter;
|
||||
ExecuteFilter m_executeFilter;
|
||||
ExternalToolsFilter m_externalToolsFilter;
|
||||
LocatorFiltersFilter m_locatorsFiltersFilter;
|
||||
#ifdef Q_OS_MACOS
|
||||
SpotlightLocatorFilter m_spotlightLocatorFilter;
|
||||
#endif
|
||||
};
|
||||
|
||||
Locator::Locator()
|
||||
{
|
||||
m_instance = this;
|
||||
@@ -76,18 +94,8 @@ Locator::Locator()
|
||||
|
||||
Locator::~Locator()
|
||||
{
|
||||
m_corePlugin->removeObject(m_javaScriptFilter);
|
||||
m_corePlugin->removeObject(m_openDocumentsFilter);
|
||||
m_corePlugin->removeObject(m_fileSystemFilter);
|
||||
m_corePlugin->removeObject(m_executeFilter);
|
||||
m_corePlugin->removeObject(m_settingsPage);
|
||||
m_corePlugin->removeObject(m_externalToolsFilter);
|
||||
delete m_javaScriptFilter;
|
||||
delete m_openDocumentsFilter;
|
||||
delete m_fileSystemFilter;
|
||||
delete m_executeFilter;
|
||||
delete m_settingsPage;
|
||||
delete m_externalToolsFilter;
|
||||
delete m_locatorData;
|
||||
qDeleteAll(m_customFilters);
|
||||
}
|
||||
|
||||
@@ -96,12 +104,10 @@ Locator *Locator::instance()
|
||||
return m_instance;
|
||||
}
|
||||
|
||||
void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *)
|
||||
void Locator::initialize()
|
||||
{
|
||||
m_corePlugin = corePlugin;
|
||||
|
||||
m_locatorData = new LocatorData;
|
||||
m_settingsPage = new LocatorSettingsPage(this);
|
||||
m_corePlugin->addObject(m_settingsPage);
|
||||
|
||||
QAction *action = new QAction(Utils::Icons::ZOOM.icon(), tr("Locate..."), this);
|
||||
Command *cmd = ActionManager::registerAction(action, Constants::LOCATE);
|
||||
@@ -117,28 +123,6 @@ void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *)
|
||||
StatusBarManager::addStatusBarWidget(locatorWidget, StatusBarManager::First,
|
||||
Context("LocatorWidget"));
|
||||
|
||||
new LocatorManager(this);
|
||||
|
||||
m_javaScriptFilter = new JavaScriptFilter;
|
||||
m_corePlugin->addObject(m_javaScriptFilter);
|
||||
|
||||
m_openDocumentsFilter = new OpenDocumentsFilter;
|
||||
m_corePlugin->addObject(m_openDocumentsFilter);
|
||||
|
||||
m_fileSystemFilter = new FileSystemFilter();
|
||||
m_corePlugin->addObject(m_fileSystemFilter);
|
||||
|
||||
m_executeFilter = new ExecuteFilter();
|
||||
m_corePlugin->addObject(m_executeFilter);
|
||||
|
||||
m_externalToolsFilter = new ExternalToolsFilter;
|
||||
m_corePlugin->addObject(m_externalToolsFilter);
|
||||
|
||||
m_corePlugin->addAutoReleasedObject(new LocatorFiltersFilter);
|
||||
#ifdef Q_OS_OSX
|
||||
m_corePlugin->addAutoReleasedObject(new SpotlightLocatorFilter);
|
||||
#endif
|
||||
|
||||
connect(ICore::instance(), &ICore::saveSettingsRequested, this, &Locator::saveSettings);
|
||||
}
|
||||
|
||||
@@ -257,7 +241,7 @@ void Locator::updateEditorManagerPlaceholderText()
|
||||
"</body></html>")
|
||||
.arg(openCommand->keySequence().toString(QKeySequence::NativeText))
|
||||
.arg(locateCommand->keySequence().toString(QKeySequence::NativeText))
|
||||
.arg(m_fileSystemFilter->shortcutString());
|
||||
.arg(m_locatorData->m_fileSystemFilter.shortcutString());
|
||||
|
||||
QString classes;
|
||||
// not nice, but anyhow
|
||||
|
||||
@@ -26,25 +26,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "ilocatorfilter.h"
|
||||
#include "directoryfilter.h"
|
||||
#include "executefilter.h"
|
||||
#include "locatorconstants.h"
|
||||
|
||||
#include <coreplugin/actionmanager/command.h>
|
||||
|
||||
#include <QFutureWatcher>
|
||||
#include <QObject>
|
||||
#include <QTimer>
|
||||
|
||||
namespace Core {
|
||||
namespace Internal {
|
||||
|
||||
class CorePlugin;
|
||||
class OpenDocumentsFilter;
|
||||
class FileSystemFilter;
|
||||
class JavaScriptFilter;
|
||||
class LocatorData;
|
||||
class LocatorSettingsPage;
|
||||
class ExternalToolsFilter;
|
||||
|
||||
class Locator : public QObject
|
||||
{
|
||||
@@ -56,7 +49,7 @@ public:
|
||||
|
||||
static Locator *instance();
|
||||
|
||||
void initialize(CorePlugin *corePlugin, const QStringList &arguments, QString *errorMessage);
|
||||
void initialize();
|
||||
void extensionsInitialized();
|
||||
bool delayedInitialize();
|
||||
|
||||
@@ -80,18 +73,13 @@ private:
|
||||
void updateEditorManagerPlaceholderText();
|
||||
|
||||
LocatorSettingsPage *m_settingsPage = nullptr;
|
||||
LocatorData *m_locatorData = nullptr;
|
||||
|
||||
bool m_settingsInitialized = false;
|
||||
QList<ILocatorFilter *> m_filters;
|
||||
QList<ILocatorFilter *> m_customFilters;
|
||||
QMap<Id, QAction *> m_filterActionMap;
|
||||
QTimer m_refreshTimer;
|
||||
JavaScriptFilter *m_javaScriptFilter = nullptr;
|
||||
OpenDocumentsFilter *m_openDocumentsFilter = nullptr;
|
||||
FileSystemFilter *m_fileSystemFilter = nullptr;
|
||||
ExecuteFilter *m_executeFilter = nullptr;
|
||||
CorePlugin *m_corePlugin = nullptr;
|
||||
ExternalToolsFilter *m_externalToolsFilter = nullptr;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -38,8 +38,7 @@ using namespace Core::Internal;
|
||||
|
||||
namespace Core {
|
||||
|
||||
LocatorManager::LocatorManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
LocatorManager::LocatorManager()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -33,14 +33,12 @@ namespace Core {
|
||||
|
||||
class ILocatorFilter;
|
||||
|
||||
namespace Internal { class LocatorWidget; }
|
||||
|
||||
class CORE_EXPORT LocatorManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
LocatorManager(QObject *parent = nullptr);
|
||||
LocatorManager();
|
||||
|
||||
static void showFilter(ILocatorFilter *filter);
|
||||
static void show(const QString &text, int selectionStart = -1, int selectionLength = 0);
|
||||
|
||||
@@ -29,10 +29,12 @@
|
||||
|
||||
#include <utils/optional.h>
|
||||
|
||||
#include <QFutureWatcher>
|
||||
#include <QPointer>
|
||||
#include <QWidget>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAbstractItemModel;
|
||||
class QAction;
|
||||
class QMenu;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user