CompilationDB: Use standard setup mechanism for plugin

Change-Id: I06cb07d70e63af0883cc5c9a8f0db2b4b134f602
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-10-23 10:22:16 +02:00
parent 7de84ecf8e
commit e1baae2e20
2 changed files with 50 additions and 46 deletions

View File

@@ -33,75 +33,87 @@
#include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h> #include <coreplugin/actionmanager/command.h>
#include <coreplugin/fileiconprovider.h> #include <coreplugin/fileiconprovider.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectmanager.h> #include <projectexplorer/projectmanager.h>
#include <projectexplorer/projecttree.h> #include <projectexplorer/projecttree.h>
#include <projectexplorer/session.h> #include <projectexplorer/session.h>
#include <utils/parameteraction.h>
#include <utils/utilsicons.h> #include <utils/utilsicons.h>
using namespace Core;
using namespace ProjectExplorer;
namespace CompilationDatabaseProjectManager { namespace CompilationDatabaseProjectManager {
namespace Internal { namespace Internal {
const char CHANGEROOTDIR[] = "CompilationDatabaseProjectManager.ChangeRootDirectory"; const char CHANGEROOTDIR[] = "CompilationDatabaseProjectManager.ChangeRootDirectory";
const char COMPILE_COMMANDS_JSON[] = "compile_commands.json"; const char COMPILE_COMMANDS_JSON[] = "compile_commands.json";
class CompilationDatabaseProjectManagerPluginPrivate
{
public:
CompilationDatabaseEditorFactory editorFactory;
CompilationDatabaseBuildConfigurationFactory buildConfigFactory;
QAction changeRootAction{CompilationDatabaseProjectManagerPlugin::tr("Change Root Directory")};
};
CompilationDatabaseProjectManagerPlugin::~CompilationDatabaseProjectManagerPlugin()
{
delete d;
}
bool CompilationDatabaseProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage) bool CompilationDatabaseProjectManagerPlugin::initialize(const QStringList &arguments, QString *errorMessage)
{ {
Q_UNUSED(arguments) Q_UNUSED(arguments)
Q_UNUSED(errorMessage) Q_UNUSED(errorMessage)
Core::FileIconProvider::registerIconOverlayForFilename(
d = new CompilationDatabaseProjectManagerPluginPrivate;
FileIconProvider::registerIconOverlayForFilename(
Utils::Icons::PROJECT.imageFileName(), Utils::Icons::PROJECT.imageFileName(),
COMPILE_COMMANDS_JSON); COMPILE_COMMANDS_JSON);
Core::FileIconProvider::registerIconOverlayForFilename( FileIconProvider::registerIconOverlayForFilename(
Utils::Icons::PROJECT.imageFileName(), Utils::Icons::PROJECT.imageFileName(),
QString(COMPILE_COMMANDS_JSON) + Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX); QString(COMPILE_COMMANDS_JSON) + Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX);
ProjectExplorer::ProjectManager::registerProjectType<CompilationDatabaseProject>( ProjectManager::registerProjectType<CompilationDatabaseProject>(
Constants::COMPILATIONDATABASEMIMETYPE); Constants::COMPILATIONDATABASEMIMETYPE);
m_changeProjectRootDirectoryAction = new QAction(tr("Change Root Directory"), this);
Core::Command *cmd = Core::ActionManager::registerAction(m_changeProjectRootDirectoryAction, Command *cmd = ActionManager::registerAction(&d->changeRootAction, CHANGEROOTDIR);
CHANGEROOTDIR);
Core::ActionContainer *mprojectContextMenu = Core::ActionManager::actionContainer( ActionContainer *mprojectContextMenu = ActionManager::actionContainer(
ProjectExplorer::Constants::M_PROJECTCONTEXT); ProjectExplorer::Constants::M_PROJECTCONTEXT);
mprojectContextMenu->addSeparator(ProjectExplorer::Constants::G_PROJECT_TREE); mprojectContextMenu->addSeparator(ProjectExplorer::Constants::G_PROJECT_TREE);
mprojectContextMenu->addAction(cmd, ProjectExplorer::Constants::G_PROJECT_TREE); mprojectContextMenu->addAction(cmd, ProjectExplorer::Constants::G_PROJECT_TREE);
connect(m_changeProjectRootDirectoryAction, connect(&d->changeRootAction, &QAction::triggered,
&QAction::triggered, ProjectTree::instance(), &ProjectTree::changeProjectRootDirectory);
ProjectExplorer::ProjectTree::instance(),
&ProjectExplorer::ProjectTree::changeProjectRootDirectory);
connect(ProjectExplorer::SessionManager::instance(), const auto onProjectChanged = [this] {
&ProjectExplorer::SessionManager::startupProjectChanged, const auto currentProject = qobject_cast<CompilationDatabaseProject *>(
this, ProjectTree::currentProject());
&CompilationDatabaseProjectManagerPlugin::projectChanged);
connect(ProjectExplorer::ProjectTree::instance(), d->changeRootAction.setEnabled(currentProject);
&ProjectExplorer::ProjectTree::currentProjectChanged, };
this,
&CompilationDatabaseProjectManagerPlugin::projectChanged); connect(SessionManager::instance(), &SessionManager::startupProjectChanged,
this, onProjectChanged);
connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged,
this, onProjectChanged);
return true; return true;
} }
void CompilationDatabaseProjectManagerPlugin::projectChanged()
{
const auto *currentProject = qobject_cast<CompilationDatabaseProject *>(
ProjectExplorer::ProjectTree::currentProject());
m_changeProjectRootDirectoryAction->setEnabled(currentProject);
}
void CompilationDatabaseProjectManagerPlugin::extensionsInitialized()
{
}
QVector<QObject *> CompilationDatabaseProjectManagerPlugin::createTestObjects() const QVector<QObject *> CompilationDatabaseProjectManagerPlugin::createTestObjects() const
{ {
QVector<QObject *> tests; return {
#ifdef WITH_TESTS #ifdef WITH_TESTS
tests << new CompilationDatabaseTests; new CompilationDatabaseTests
#endif #endif
return tests; };
} }
} // namespace Internal } // namespace Internal

View File

@@ -25,11 +25,7 @@
#pragma once #pragma once
#include "compilationdatabaseproject.h"
#include <coreplugin/id.h>
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
#include <utils/parameteraction.h>
namespace CompilationDatabaseProjectManager { namespace CompilationDatabaseProjectManager {
namespace Internal { namespace Internal {
@@ -39,17 +35,13 @@ class CompilationDatabaseProjectManagerPlugin final : public ExtensionSystem::IP
Q_OBJECT Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "CompilationDatabaseProjectManager.json") Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "CompilationDatabaseProjectManager.json")
public: ~CompilationDatabaseProjectManagerPlugin();
bool initialize(const QStringList &arguments, QString *errorMessage) final;
void extensionsInitialized() final;
private:
void projectChanged();
bool initialize(const QStringList &arguments, QString *errorMessage) final;
void extensionsInitialized() final {}
QVector<QObject *> createTestObjects() const final; QVector<QObject *> createTestObjects() const final;
CompilationDatabaseEditorFactory factory; class CompilationDatabaseProjectManagerPluginPrivate *d = nullptr;
CompilationDatabaseBuildConfigurationFactory buildConfigFactory;
QAction *m_changeProjectRootDirectoryAction;
}; };
} // namespace Internal } // namespace Internal