diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp index 952b3e289a1..4dc5c1e7fb1 100644 --- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp +++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp @@ -46,8 +46,6 @@ #include #include -#include -#include using namespace Core; using namespace ProjectExplorer; @@ -55,43 +53,56 @@ using namespace ProjectExplorer; namespace GenericProjectManager { namespace Internal { -bool GenericProjectPlugin::initialize(const QStringList &, QString *errorMessage) +class GenericProjectPluginPrivate : public QObject { - Q_UNUSED(errorMessage) +public: + GenericProjectPluginPrivate(); + ProjectFilesFactory projectFilesFactory; + GenericMakeAllStepFactory makeAllStepFactory; + GenericMakeCleanStepFactory makeCleanStepFactory; + GenericBuildConfigurationFactory buildConfigFactory; + + QAction editFilesAction{GenericProjectPluginPrivate::tr("Edit Files..."), nullptr}; +}; + +static GenericProjectPluginPrivate *dd = nullptr; + +GenericProjectPlugin::~GenericProjectPlugin() +{ + delete dd; +} + +bool GenericProjectPlugin::initialize(const QStringList &, QString *) +{ + dd = new GenericProjectPluginPrivate; + return true; +} + +GenericProjectPluginPrivate::GenericProjectPluginPrivate() +{ ProjectManager::registerProjectType(Constants::GENERICMIMETYPE); - addAutoReleasedObject(new ProjectFilesFactory); - addAutoReleasedObject(new GenericMakeAllStepFactory); - addAutoReleasedObject(new GenericMakeCleanStepFactory); - addAutoReleasedObject(new GenericBuildConfigurationFactory); - - IWizardFactory::registerFactoryCreator([]() { return QList() << new GenericProjectWizard; }); + IWizardFactory::registerFactoryCreator([] { return QList{new GenericProjectWizard}; }); ActionContainer *mproject = ActionManager::actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT); - auto editFilesAction = new QAction(tr("Edit Files..."), this); - Command *command = ActionManager::registerAction(editFilesAction, + Command *command = ActionManager::registerAction(&editFilesAction, "GenericProjectManager.EditFiles", Context(Constants::GENERICPROJECT_ID)); command->setAttribute(Command::CA_Hide); mproject->addAction(command, ProjectExplorer::Constants::G_PROJECT_FILES); - connect(editFilesAction, &QAction::triggered, this, &GenericProjectPlugin::editFiles); - - return true; -} - -void GenericProjectPlugin::editFiles() -{ - auto genericProject = qobject_cast(ProjectTree::currentProject()); - if (!genericProject) - return; - SelectableFilesDialogEditFiles sfd(genericProject->projectDirectory(), - genericProject->files(Project::AllFiles), - ICore::mainWindow()); - if (sfd.exec() == QDialog::Accepted) - genericProject->setFiles(Utils::transform(sfd.selectedFiles(), &Utils::FileName::toString)); + connect(&editFilesAction, &QAction::triggered, this, [this] { + auto genericProject = qobject_cast(ProjectTree::currentProject()); + if (!genericProject) + return; + SelectableFilesDialogEditFiles sfd(genericProject->projectDirectory(), + genericProject->files(Project::AllFiles), + ICore::mainWindow()); + if (sfd.exec() == QDialog::Accepted) + genericProject->setFiles(Utils::transform(sfd.selectedFiles(), &Utils::FileName::toString)); + }); } } // namespace Internal diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.h b/src/plugins/genericprojectmanager/genericprojectplugin.h index b04161c116c..fa59a3b5162 100644 --- a/src/plugins/genericprojectmanager/genericprojectplugin.h +++ b/src/plugins/genericprojectmanager/genericprojectplugin.h @@ -36,8 +36,7 @@ class GenericProjectPlugin : public ExtensionSystem::IPlugin Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "GenericProjectManager.json") public: - bool initialize(const QStringList &arguments, QString *errorString) override; - void extensionsInitialized() override { } + ~GenericProjectPlugin() override; #ifdef WITH_TESTS private slots: @@ -47,7 +46,8 @@ private slots: #endif // WITH_TESTS private: - void editFiles(); + bool initialize(const QStringList &arguments, QString *errorString) override; + void extensionsInitialized() override { } }; } // namespace Internal