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:
hjk
2018-01-26 11:56:59 +01:00
parent c7e4eee345
commit 53d14fbb48
6 changed files with 31 additions and 60 deletions

View File

@@ -160,7 +160,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
SaveFile::initializeUmask(); SaveFile::initializeUmask();
Find::initialize(); Find::initialize();
m_locator->initialize(this, arguments, errorMessage); m_locator->initialize();
MacroExpander *expander = Utils::globalMacroExpander(); MacroExpander *expander = Utils::globalMacroExpander();
expander->registerVariable("CurrentDate:ISO", tr("The current date (ISO)."), expander->registerVariable("CurrentDate:ISO", tr("The current date (ISO)."),

View File

@@ -25,6 +25,8 @@
#include "locator.h" #include "locator.h"
#include "directoryfilter.h"
#include "executefilter.h"
#include "externaltoolsfilter.h" #include "externaltoolsfilter.h"
#include "filesystemfilter.h" #include "filesystemfilter.h"
#include "javascriptfilter.h" #include "javascriptfilter.h"
@@ -58,7 +60,7 @@
#include <QSettings> #include <QSettings>
#include <QtPlugin> #include <QtPlugin>
#ifdef Q_OS_OSX #ifdef Q_OS_MACOS
#include "spotlightlocatorfilter.h" #include "spotlightlocatorfilter.h"
#endif #endif
@@ -67,6 +69,22 @@ namespace Internal {
static Locator *m_instance = nullptr; 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() Locator::Locator()
{ {
m_instance = this; m_instance = this;
@@ -76,18 +94,8 @@ Locator::Locator()
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_settingsPage;
delete m_externalToolsFilter; delete m_locatorData;
qDeleteAll(m_customFilters); qDeleteAll(m_customFilters);
} }
@@ -96,12 +104,10 @@ Locator *Locator::instance()
return m_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_settingsPage = new LocatorSettingsPage(this);
m_corePlugin->addObject(m_settingsPage);
QAction *action = new QAction(Utils::Icons::ZOOM.icon(), tr("Locate..."), this); QAction *action = new QAction(Utils::Icons::ZOOM.icon(), tr("Locate..."), this);
Command *cmd = ActionManager::registerAction(action, Constants::LOCATE); Command *cmd = ActionManager::registerAction(action, Constants::LOCATE);
@@ -117,28 +123,6 @@ void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *)
StatusBarManager::addStatusBarWidget(locatorWidget, StatusBarManager::First, StatusBarManager::addStatusBarWidget(locatorWidget, StatusBarManager::First,
Context("LocatorWidget")); 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); connect(ICore::instance(), &ICore::saveSettingsRequested, this, &Locator::saveSettings);
} }
@@ -257,7 +241,7 @@ void Locator::updateEditorManagerPlaceholderText()
"</body></html>") "</body></html>")
.arg(openCommand->keySequence().toString(QKeySequence::NativeText)) .arg(openCommand->keySequence().toString(QKeySequence::NativeText))
.arg(locateCommand->keySequence().toString(QKeySequence::NativeText)) .arg(locateCommand->keySequence().toString(QKeySequence::NativeText))
.arg(m_fileSystemFilter->shortcutString()); .arg(m_locatorData->m_fileSystemFilter.shortcutString());
QString classes; QString classes;
// not nice, but anyhow // not nice, but anyhow

View File

@@ -26,25 +26,18 @@
#pragma once #pragma once
#include "ilocatorfilter.h" #include "ilocatorfilter.h"
#include "directoryfilter.h"
#include "executefilter.h"
#include "locatorconstants.h" #include "locatorconstants.h"
#include <coreplugin/actionmanager/command.h> #include <coreplugin/actionmanager/command.h>
#include <QFutureWatcher>
#include <QObject> #include <QObject>
#include <QTimer> #include <QTimer>
namespace Core { namespace Core {
namespace Internal { namespace Internal {
class CorePlugin; class LocatorData;
class OpenDocumentsFilter;
class FileSystemFilter;
class JavaScriptFilter;
class LocatorSettingsPage; class LocatorSettingsPage;
class ExternalToolsFilter;
class Locator : public QObject class Locator : public QObject
{ {
@@ -56,7 +49,7 @@ public:
static Locator *instance(); static Locator *instance();
void initialize(CorePlugin *corePlugin, const QStringList &arguments, QString *errorMessage); void initialize();
void extensionsInitialized(); void extensionsInitialized();
bool delayedInitialize(); bool delayedInitialize();
@@ -80,18 +73,13 @@ private:
void updateEditorManagerPlaceholderText(); void updateEditorManagerPlaceholderText();
LocatorSettingsPage *m_settingsPage = nullptr; LocatorSettingsPage *m_settingsPage = nullptr;
LocatorData *m_locatorData = nullptr;
bool m_settingsInitialized = false; bool m_settingsInitialized = false;
QList<ILocatorFilter *> m_filters; QList<ILocatorFilter *> m_filters;
QList<ILocatorFilter *> m_customFilters; QList<ILocatorFilter *> m_customFilters;
QMap<Id, QAction *> m_filterActionMap; QMap<Id, QAction *> m_filterActionMap;
QTimer m_refreshTimer; 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 } // namespace Internal

View File

@@ -38,8 +38,7 @@ using namespace Core::Internal;
namespace Core { namespace Core {
LocatorManager::LocatorManager(QObject *parent) LocatorManager::LocatorManager()
: QObject(parent)
{ {
} }

View File

@@ -33,14 +33,12 @@ namespace Core {
class ILocatorFilter; class ILocatorFilter;
namespace Internal { class LocatorWidget; }
class CORE_EXPORT LocatorManager : public QObject class CORE_EXPORT LocatorManager : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
LocatorManager(QObject *parent = nullptr); LocatorManager();
static void showFilter(ILocatorFilter *filter); static void showFilter(ILocatorFilter *filter);
static void show(const QString &text, int selectionStart = -1, int selectionLength = 0); static void show(const QString &text, int selectionStart = -1, int selectionLength = 0);

View File

@@ -29,10 +29,12 @@
#include <utils/optional.h> #include <utils/optional.h>
#include <QFutureWatcher>
#include <QPointer> #include <QPointer>
#include <QWidget> #include <QWidget>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QAbstractItemModel;
class QAction; class QAction;
class QMenu; class QMenu;
QT_END_NAMESPACE QT_END_NAMESPACE