Squish: Pimpl plugin

Change-Id: I69edca0307d190f62a92012170df93dbb84434f9
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Stenger
2022-07-08 10:03:20 +02:00
parent 4da20913bb
commit d1dbff3e6f
3 changed files with 44 additions and 53 deletions

View File

@@ -39,39 +39,62 @@
#include <extensionsystem/pluginmanager.h>
#include <utils/mimetypes/mimedatabase.h>
#include <utils/qtcassert.h>
#include <QMenu>
#include <QtPlugin>
using namespace Squish::Internal;
using namespace Core;
static SquishPlugin *m_instance = nullptr;
namespace Squish {
namespace Internal {
SquishPlugin::SquishPlugin()
class SquishPluginPrivate : public QObject
{
m_instance = this;
public:
SquishPluginPrivate();
~SquishPluginPrivate();
void initializeMenuEntries();
SquishSettings m_squishSettings;
SquishSettingsPage m_settingsPage{&m_squishSettings};
SquishTestTreeModel m_treeModel;
SquishNavigationWidgetFactory m_navigationWidgetFactory;
ObjectsMapEditorFactory m_objectsMapEditorFactory;
SquishOutputPane *m_outputPane = nullptr;
SquishTools * m_squishTools = nullptr;
};
static SquishPluginPrivate *dd = nullptr;
SquishPluginPrivate::SquishPluginPrivate()
{
m_squishSettings.readSettings(ICore::settings());
m_outputPane = SquishOutputPane::instance();
m_squishTools = new SquishTools;
initializeMenuEntries();
}
SquishPlugin::~SquishPlugin()
SquishPluginPrivate::~SquishPluginPrivate()
{
delete m_objectsMapEditorFactory;
delete m_navigationWidgetFactory;
delete m_outputPane;
delete m_squishTools;
}
SquishPlugin *SquishPlugin::instance()
SquishPlugin::~SquishPlugin()
{
return m_instance;
delete dd;
dd = nullptr;
}
SquishSettings *SquishPlugin::squishSettings()
{
return &m_squishSettings;
QTC_ASSERT(dd, return nullptr);
return &dd->m_squishSettings;
}
void SquishPlugin::initializeMenuEntries()
void SquishPluginPrivate::initializeMenuEntries()
{
ActionContainer *menu = ActionManager::createMenu("Squish.Menu");
menu->menu()->setTitle(tr("&Squish"));
@@ -89,27 +112,16 @@ void SquishPlugin::initializeMenuEntries()
toolsMenu->addMenu(menu);
}
bool SquishPlugin::initialize(const QStringList &arguments, QString *errorString)
bool SquishPlugin::initialize(const QStringList &, QString *)
{
Q_UNUSED(arguments)
Q_UNUSED(errorString)
m_squishSettings.readSettings(ICore::settings());
m_squishTools = new SquishTools;
initializeMenuEntries();
m_treeModel = new SquishTestTreeModel(this);
m_navigationWidgetFactory = new SquishNavigationWidgetFactory;
m_outputPane = SquishOutputPane::instance();
m_objectsMapEditorFactory = new ObjectsMapEditorFactory;
dd = new SquishPluginPrivate;
return true;
}
void SquishPlugin::extensionsInitialized() {}
ExtensionSystem::IPlugin::ShutdownFlag SquishPlugin::aboutToShutdown()
{
return SynchronousShutdown;
}
} // namespace Internal
} // namespace Squish

View File

@@ -27,47 +27,25 @@
#include "squishplugin_global.h"
#include "squishsettings.h"
#include <extensionsystem/iplugin.h>
namespace Squish {
namespace Internal {
class ObjectsMapEditorFactory;
class SquishNavigationWidgetFactory;
class SquishOutputPane;
class SquishTestTreeModel;
class SquishTools;
class SquishSettings;
class SquishPlugin : public ExtensionSystem::IPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Squish.json")
public:
SquishPlugin();
SquishPlugin() = default;
~SquishPlugin() override;
static SquishPlugin *instance();
SquishSettings *squishSettings();
static SquishSettings *squishSettings();
bool initialize(const QStringList &arguments, QString *errorString) override;
void extensionsInitialized() override;
ShutdownFlag aboutToShutdown() override;
private:
void initializeMenuEntries();
SquishTools * m_squishTools = nullptr;
SquishTestTreeModel *m_treeModel = nullptr;
SquishSettings m_squishSettings;
SquishSettingsPage m_settingsPage{&m_squishSettings};
SquishNavigationWidgetFactory *m_navigationWidgetFactory = nullptr;
SquishOutputPane *m_outputPane = nullptr;
ObjectsMapEditorFactory *m_objectsMapEditorFactory = nullptr;
};
} // namespace Internal

View File

@@ -105,7 +105,8 @@ struct SquishToolsSettings
// populate members using current settings
void setup()
{
const SquishSettings *squishSettings = SquishPlugin::instance()->squishSettings();
const SquishSettings *squishSettings = SquishPlugin::squishSettings();
QTC_ASSERT(squishSettings, return);
squishPath = squishSettings->squishPath.filePath();
if (!squishPath.isEmpty()) {