Macros: Move a bit closer to standard plugin setup pattern

Change-Id: I68b04f93022a8638da558d1240c0c8b74d9a25e2
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2019-03-20 18:51:16 +01:00
parent 0de5156588
commit b34d5b0b8e
8 changed files with 51 additions and 50 deletions

View File

@@ -37,8 +37,8 @@
using namespace Macros; using namespace Macros;
using namespace Macros::Internal; using namespace Macros::Internal;
MacroLocatorFilter::MacroLocatorFilter(QObject *parent) MacroLocatorFilter::MacroLocatorFilter()
: Core::ILocatorFilter(parent), m_icon(QPixmap(":/macros/images/macro.png")) : m_icon(QPixmap(":/macros/images/macro.png"))
{ {
setId("Macros"); setId("Macros");
setDisplayName(tr("Text Editing Macros")); setDisplayName(tr("Text Editing Macros"));

View File

@@ -37,7 +37,7 @@ class MacroLocatorFilter : public Core::ILocatorFilter
Q_OBJECT Q_OBJECT
public: public:
explicit MacroLocatorFilter(QObject *parent); MacroLocatorFilter();
~MacroLocatorFilter() override; ~MacroLocatorFilter() override;
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future, QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,

View File

@@ -57,7 +57,8 @@
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
using namespace Macros::Internal; namespace Macros {
namespace Internal {
/*! /*!
\namespace Macros \namespace Macros
@@ -88,7 +89,7 @@ using namespace Macros::Internal;
the action id passed to the ActionManager. the action id passed to the ActionManager.
*/ */
class MacroManager::MacroManagerPrivate class MacroManagerPrivate
{ {
public: public:
MacroManagerPrivate(MacroManager *qq); MacroManagerPrivate(MacroManager *qq);
@@ -114,7 +115,7 @@ public:
void showSaveDialog(); void showSaveDialog();
}; };
MacroManager::MacroManagerPrivate::MacroManagerPrivate(MacroManager *qq): MacroManagerPrivate::MacroManagerPrivate(MacroManager *qq):
q(qq) q(qq)
{ {
// Load existing macros // Load existing macros
@@ -125,7 +126,7 @@ MacroManager::MacroManagerPrivate::MacroManagerPrivate(MacroManager *qq):
findHandler = new FindMacroHandler; findHandler = new FindMacroHandler;
} }
void MacroManager::MacroManagerPrivate::initialize() void MacroManagerPrivate::initialize()
{ {
macros.clear(); macros.clear();
QDir dir(q->macrosDirectory()); QDir dir(q->macrosDirectory());
@@ -148,7 +149,7 @@ static Core::Id makeId(const QString &name)
return Core::Id(Macros::Constants::PREFIX_MACRO).withSuffix(name); return Core::Id(Macros::Constants::PREFIX_MACRO).withSuffix(name);
} }
void MacroManager::MacroManagerPrivate::addMacro(Macro *macro) void MacroManagerPrivate::addMacro(Macro *macro)
{ {
// Add sortcut // Add sortcut
Core::Context context(TextEditor::Constants::C_TEXTEDITOR); Core::Context context(TextEditor::Constants::C_TEXTEDITOR);
@@ -156,7 +157,7 @@ void MacroManager::MacroManagerPrivate::addMacro(Macro *macro)
Core::Command *command = Core::ActionManager::registerAction( Core::Command *command = Core::ActionManager::registerAction(
action, makeId(macro->displayName()), context); action, makeId(macro->displayName()), context);
command->setAttribute(Core::Command::CA_UpdateText); command->setAttribute(Core::Command::CA_UpdateText);
connect(action, &QAction::triggered, q, [this, macro]() { QObject::connect(action, &QAction::triggered, q, [this, macro]() {
q->executeMacro(macro->displayName()); q->executeMacro(macro->displayName());
}); });
@@ -165,7 +166,7 @@ void MacroManager::MacroManagerPrivate::addMacro(Macro *macro)
actions[macro->displayName()] = action; actions[macro->displayName()] = action;
} }
void MacroManager::MacroManagerPrivate::removeMacro(const QString &name) void MacroManagerPrivate::removeMacro(const QString &name)
{ {
if (!macros.contains(name)) if (!macros.contains(name))
return; return;
@@ -181,7 +182,7 @@ void MacroManager::MacroManagerPrivate::removeMacro(const QString &name)
delete macro; delete macro;
} }
void MacroManager::MacroManagerPrivate::changeMacroDescription(Macro *macro, const QString &description) void MacroManagerPrivate::changeMacroDescription(Macro *macro, const QString &description)
{ {
if (!macro->load()) if (!macro->load())
return; return;
@@ -193,7 +194,7 @@ void MacroManager::MacroManagerPrivate::changeMacroDescription(Macro *macro, con
action->setText(description); action->setText(description);
} }
bool MacroManager::MacroManagerPrivate::executeMacro(Macro *macro) bool MacroManagerPrivate::executeMacro(Macro *macro)
{ {
bool error = !macro->load(); bool error = !macro->load();
foreach (const MacroEvent &macroEvent, macro->events()) { foreach (const MacroEvent &macroEvent, macro->events()) {
@@ -210,8 +211,8 @@ bool MacroManager::MacroManagerPrivate::executeMacro(Macro *macro)
if (error) { if (error) {
QMessageBox::warning(Core::ICore::mainWindow(), QMessageBox::warning(Core::ICore::mainWindow(),
tr("Playing Macro"), MacroManager::tr("Playing Macro"),
tr("An error occurred while replaying the macro, execution stopped.")); MacroManager::tr("An error occurred while replaying the macro, execution stopped."));
} }
// Set the focus back to the editor // Set the focus back to the editor
@@ -222,7 +223,7 @@ bool MacroManager::MacroManagerPrivate::executeMacro(Macro *macro)
return !error; return !error;
} }
void MacroManager::MacroManagerPrivate::showSaveDialog() void MacroManagerPrivate::showSaveDialog()
{ {
QWidget *mainWindow = Core::ICore::mainWindow(); QWidget *mainWindow = Core::ICore::mainWindow();
SaveDialog dialog(mainWindow); SaveDialog dialog(mainWindow);
@@ -241,10 +242,9 @@ void MacroManager::MacroManagerPrivate::showSaveDialog()
// ---------- MacroManager ------------ // ---------- MacroManager ------------
MacroManager *MacroManager::m_instance = nullptr; MacroManager *m_instance = nullptr;
MacroManager::MacroManager(QObject *parent) : MacroManager::MacroManager() :
QObject(parent),
d(new MacroManagerPrivate(this)) d(new MacroManagerPrivate(this))
{ {
m_instance = this; m_instance = this;
@@ -393,3 +393,6 @@ QString MacroManager::macrosDirectory()
return path; return path;
return QString(); return QString();
} }
} // Internal
} // Macros

View File

@@ -34,12 +34,15 @@ namespace Internal {
class IMacroHandler; class IMacroHandler;
class Macro; class Macro;
class MacroOptionsWidget; class MacroOptionsWidget;
class MacrosPlugin;
class MacroManager : public QObject class MacroManager : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
MacroManager();
~MacroManager() override;
static MacroManager *instance(); static MacroManager *instance();
static const QMap<QString, Macro *> &macros(); static const QMap<QString, Macro *> &macros();
@@ -61,15 +64,7 @@ protected:
void changeMacro(const QString &name, const QString &description); void changeMacro(const QString &name, const QString &description);
private: private:
explicit MacroManager(QObject *parent = nullptr); class MacroManagerPrivate *d;
~MacroManager() override;
static MacroManager *m_instance;
class MacroManagerPrivate;
MacroManagerPrivate* d;
friend class Internal::MacrosPlugin;
}; };
} // namespace Internal } // namespace Internal

View File

@@ -39,8 +39,7 @@ using namespace Macros;
using namespace Macros::Internal; using namespace Macros::Internal;
MacroOptionsPage::MacroOptionsPage(QObject *parent) MacroOptionsPage::MacroOptionsPage()
: Core::IOptionsPage(parent)
{ {
setId(Constants::M_OPTIONS_PAGE); setId(Constants::M_OPTIONS_PAGE);
setDisplayName(QCoreApplication::translate("Macros", Constants::M_OPTIONS_TR_PAGE)); setDisplayName(QCoreApplication::translate("Macros", Constants::M_OPTIONS_TR_PAGE));

View File

@@ -39,7 +39,7 @@ class MacroOptionsPage : public Core::IOptionsPage
Q_OBJECT Q_OBJECT
public: public:
MacroOptionsPage(QObject *parent = nullptr); MacroOptionsPage();
// IOptionsPage implementation // IOptionsPage implementation
QWidget *widget() override; QWidget *widget() override;

View File

@@ -40,17 +40,25 @@
#include <coreplugin/id.h> #include <coreplugin/id.h>
#include <coreplugin/icontext.h> #include <coreplugin/icontext.h>
#include <QtPlugin>
#include <QSettings> #include <QSettings>
#include <QAction> #include <QAction>
#include <QKeySequence> #include <QKeySequence>
#include <QMenu> #include <QMenu>
using namespace Macros::Internal; namespace Macros {
namespace Internal {
class MacrosPluginPrivate
{
public:
MacroManager macroManager;
MacroOptionsPage optionsPage;
MacroLocatorFilter locatorFilter;
};
MacrosPlugin::~MacrosPlugin() MacrosPlugin::~MacrosPlugin()
{ {
delete m_macroManager; delete d;
} }
bool MacrosPlugin::initialize(const QStringList &arguments, QString *errorMessage) bool MacrosPlugin::initialize(const QStringList &arguments, QString *errorMessage)
@@ -58,11 +66,9 @@ bool MacrosPlugin::initialize(const QStringList &arguments, QString *errorMessag
Q_UNUSED(arguments); Q_UNUSED(arguments);
Q_UNUSED(errorMessage); Q_UNUSED(errorMessage);
new MacroOptionsPage(this); d = new MacrosPluginPrivate;
new MacroLocatorFilter(this);
Core::Context textContext(TextEditor::Constants::C_TEXTEDITOR); Core::Context textContext(TextEditor::Constants::C_TEXTEDITOR);
m_macroManager = new MacroManager(this);
// Menus // Menus
Core::ActionContainer *mtools = Core::ActionManager::actionContainer(Core::Constants::M_TOOLS); Core::ActionContainer *mtools = Core::ActionManager::actionContainer(Core::Constants::M_TOOLS);
@@ -76,30 +82,30 @@ bool MacrosPlugin::initialize(const QStringList &arguments, QString *errorMessag
Core::Command *command = Core::ActionManager::registerAction(startMacro, Constants::START_MACRO, textContext); Core::Command *command = Core::ActionManager::registerAction(startMacro, Constants::START_MACRO, textContext);
command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Ctrl+[") : tr("Alt+["))); command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Ctrl+[") : tr("Alt+[")));
mmacrotools->addAction(command); mmacrotools->addAction(command);
connect(startMacro, &QAction::triggered, m_macroManager, &MacroManager::startMacro); connect(startMacro, &QAction::triggered, &d->macroManager, &MacroManager::startMacro);
QAction *endMacro = new QAction(tr("Stop Recording Macro"), this); QAction *endMacro = new QAction(tr("Stop Recording Macro"), this);
endMacro->setEnabled(false); endMacro->setEnabled(false);
command = Core::ActionManager::registerAction(endMacro, Constants::END_MACRO); command = Core::ActionManager::registerAction(endMacro, Constants::END_MACRO);
command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Ctrl+]") : tr("Alt+]"))); command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Ctrl+]") : tr("Alt+]")));
mmacrotools->addAction(command); mmacrotools->addAction(command);
connect(endMacro, &QAction::triggered, m_macroManager, &MacroManager::endMacro); connect(endMacro, &QAction::triggered, &d->macroManager, &MacroManager::endMacro);
QAction *executeLastMacro = new QAction(tr("Play Last Macro"), this); QAction *executeLastMacro = new QAction(tr("Play Last Macro"), this);
command = Core::ActionManager::registerAction(executeLastMacro, Constants::EXECUTE_LAST_MACRO, textContext); command = Core::ActionManager::registerAction(executeLastMacro, Constants::EXECUTE_LAST_MACRO, textContext);
command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Meta+R") : tr("Alt+R"))); command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Meta+R") : tr("Alt+R")));
mmacrotools->addAction(command); mmacrotools->addAction(command);
connect(executeLastMacro, &QAction::triggered, m_macroManager, &MacroManager::executeLastMacro); connect(executeLastMacro, &QAction::triggered, &d->macroManager, &MacroManager::executeLastMacro);
QAction *saveLastMacro = new QAction(tr("Save Last Macro"), this); QAction *saveLastMacro = new QAction(tr("Save Last Macro"), this);
saveLastMacro->setEnabled(false); saveLastMacro->setEnabled(false);
command = Core::ActionManager::registerAction(saveLastMacro, Constants::SAVE_LAST_MACRO, textContext); command = Core::ActionManager::registerAction(saveLastMacro, Constants::SAVE_LAST_MACRO, textContext);
mmacrotools->addAction(command); mmacrotools->addAction(command);
connect(saveLastMacro, &QAction::triggered, m_macroManager, &MacroManager::saveLastMacro); connect(saveLastMacro, &QAction::triggered, &d->macroManager, &MacroManager::saveLastMacro);
return true; return true;
} }
void MacrosPlugin::extensionsInitialized()
{ } // Internal
} } // Macros

View File

@@ -30,21 +30,19 @@
namespace Macros { namespace Macros {
namespace Internal { namespace Internal {
class MacroManager;
class MacrosPlugin : public ExtensionSystem::IPlugin class MacrosPlugin : public ExtensionSystem::IPlugin
{ {
Q_OBJECT Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Macros.json") Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Macros.json")
public: public:
~MacrosPlugin() override; ~MacrosPlugin() final;
bool initialize(const QStringList &arguments, QString *errorMessage) override; bool initialize(const QStringList &arguments, QString *errorMessage) final;
void extensionsInitialized() override; void extensionsInitialized() final {}
private: private:
MacroManager *m_macroManager = nullptr; class MacrosPluginPrivate *d = nullptr;
}; };
} // namespace Internal } // namespace Internal