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::Internal;
MacroLocatorFilter::MacroLocatorFilter(QObject *parent)
: Core::ILocatorFilter(parent), m_icon(QPixmap(":/macros/images/macro.png"))
MacroLocatorFilter::MacroLocatorFilter()
: m_icon(QPixmap(":/macros/images/macro.png"))
{
setId("Macros");
setDisplayName(tr("Text Editing Macros"));

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -40,17 +40,25 @@
#include <coreplugin/id.h>
#include <coreplugin/icontext.h>
#include <QtPlugin>
#include <QSettings>
#include <QAction>
#include <QKeySequence>
#include <QMenu>
using namespace Macros::Internal;
namespace Macros {
namespace Internal {
class MacrosPluginPrivate
{
public:
MacroManager macroManager;
MacroOptionsPage optionsPage;
MacroLocatorFilter locatorFilter;
};
MacrosPlugin::~MacrosPlugin()
{
delete m_macroManager;
delete d;
}
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(errorMessage);
new MacroOptionsPage(this);
new MacroLocatorFilter(this);
d = new MacrosPluginPrivate;
Core::Context textContext(TextEditor::Constants::C_TEXTEDITOR);
m_macroManager = new MacroManager(this);
// Menus
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);
command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Ctrl+[") : tr("Alt+[")));
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);
endMacro->setEnabled(false);
command = Core::ActionManager::registerAction(endMacro, Constants::END_MACRO);
command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Ctrl+]") : tr("Alt+]")));
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);
command = Core::ActionManager::registerAction(executeLastMacro, Constants::EXECUTE_LAST_MACRO, textContext);
command->setDefaultKeySequence(QKeySequence(Core::useMacShortcuts ? tr("Meta+R") : tr("Alt+R")));
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);
saveLastMacro->setEnabled(false);
command = Core::ActionManager::registerAction(saveLastMacro, Constants::SAVE_LAST_MACRO, textContext);
mmacrotools->addAction(command);
connect(saveLastMacro, &QAction::triggered, m_macroManager, &MacroManager::saveLastMacro);
connect(saveLastMacro, &QAction::triggered, &d->macroManager, &MacroManager::saveLastMacro);
return true;
}
void MacrosPlugin::extensionsInitialized()
{
}
} // Internal
} // Macros

View File

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