diff options
author | Radovan Zivkovic <pivonroll@gmail.com> | 2012-11-25 23:07:01 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-03-11 19:54:51 +0100 |
commit | 169921274f17c46b32b6ef5a32c7778ee4c37c08 (patch) | |
tree | 2dfb604f3af8db463b28da41dcf0b126ef907ab2 | |
parent | afb07299882ef935d47dc4d6be82dc566f6a5818 (diff) |
Added vc project build configuration.
Change-Id: I0302f38228b914a8dd0ef3348cbce975bd6f4b96
Reviewed-by: Bojan Petrovic <bojan85@gmail.com>
-rw-r--r-- | src/plugins/vcprojectmanager/vcmakestep.cpp | 208 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcmakestep.h | 68 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcproject.cpp | 73 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcproject.h | 16 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp | 162 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h | 53 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcprojectmanager.pro | 10 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcprojectmanagerconstants.h | 1 | ||||
-rw-r--r-- | src/plugins/vcprojectmanager/vcprojectmanagerplugin.cpp | 4 |
9 files changed, 590 insertions, 5 deletions
diff --git a/src/plugins/vcprojectmanager/vcmakestep.cpp b/src/plugins/vcprojectmanager/vcmakestep.cpp new file mode 100644 index 0000000000..424bae0c60 --- /dev/null +++ b/src/plugins/vcprojectmanager/vcmakestep.cpp @@ -0,0 +1,208 @@ +#include "vcmakestep.h" + +#include "vcprojectbuildconfiguration.h" +#include "vcprojectfile.h" +#include "vcprojectmanagerconstants.h" + +#include <projectexplorer/buildsteplist.h> +#include <projectexplorer/project.h> +#include <projectexplorer/projectconfiguration.h> +#include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/target.h> +#include <projectexplorer/task.h> + +#include <QFormLayout> +#include <QLabel> + +namespace VcProjectManager { +namespace Internal { + +namespace { +const char MS_ID[] = "VcProjectManager.MakeStep"; +const char CLEAN_KEY[] = "VcProjectManager.MakeStep.Clean"; +const char BUILD_TARGETS_KEY[] = "VcProjectManager.MakeStep.BuildTargets"; +const char ADDITIONAL_ARGUMENTS_KEY[] = "VcProjectManager.MakeStep.AdditionalArguments"; +} + +VcMakeStep::VcMakeStep(ProjectExplorer::BuildStepList *bsl) + : AbstractProcessStep(bsl, Core::Id(MS_ID)) +{ +} + +bool VcMakeStep::init() +{ + VcProjectBuildConfiguration *bc = vcProjectBuildConfiguration(); + + if (!bc) { + m_tasks.append(ProjectExplorer::Task(ProjectExplorer::Task::Error, + tr("Qt Creator didn't detected any proper build tool for .vcproj files."), + Utils::FileName(), -1, + Core::Id(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM))); + return true; + } + + ProjectExplorer::ProcessParameters *pp = processParameters(); + pp->setMacroExpander(bc->macroExpander()); + pp->setEnvironment(bc->environment()); + pp->setWorkingDirectory(bc->buildDirectory()); + pp->setCommand(QString("C:/Windows/Microsoft.NET/Framework/v3.5/MSBuild.exe")); + ProjectExplorer::Project *project = bc->target()->project(); + VcProjectFile* document = static_cast<VcProjectFile *>(project->document()); + + pp->setArguments(document->filePath()); + return AbstractProcessStep::init(); +} + +void VcMakeStep::run(QFutureInterface<bool> &fi) +{ + bool canContinue = true; + + foreach (const ProjectExplorer::Task &t, m_tasks) { + addTask(t); + canContinue = false; + } + + if (!canContinue) { + emit addOutput(tr("Configuration is faulty. Check the Issues view for details."), BuildStep::MessageOutput); + fi.reportResult(false); + return; + } + + m_futureInterface = &fi; + m_futureInterface->setProgressRange(0, 100); + AbstractProcessStep::run(fi); + m_futureInterface->setProgressValue(100); + m_futureInterface->reportFinished(); + m_futureInterface = 0; +} + +ProjectExplorer::BuildStepConfigWidget *VcMakeStep::createConfigWidget() +{ + return new VcMakeStepConfigWidget(this); +} + +bool VcMakeStep::immutable() const +{ + return false; +} + +VcProjectBuildConfiguration *VcMakeStep::vcProjectBuildConfiguration() const +{ + return static_cast<VcProjectBuildConfiguration *>(buildConfiguration()); +} + +QVariantMap VcMakeStep::toMap() const +{ + return BuildStep::toMap(); +} + +bool VcMakeStep::fromMap(const QVariantMap &map) +{ + return BuildStep::fromMap(map); +} + +VcMakeStep::VcMakeStep(ProjectExplorer::BuildStepList *parent, VcMakeStep *vcMakeStep) : + AbstractProcessStep(parent, vcMakeStep) +{ +} + +///////////////////////// +// VcMakeStepConfigWidget +///////////////////////// +VcMakeStepConfigWidget::VcMakeStepConfigWidget(VcMakeStep *makeStep) : + m_makeStep(makeStep) +{ + QFormLayout *mainLayout = new QFormLayout(this); + mainLayout->setMargin(0); + mainLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); + QLabel *label = new QLabel("C:/Windows/Microsoft.NET/Framework/v3.5/MSBuild.exe"); + mainLayout->addRow(tr("Command:"), label); + setLayout(mainLayout); +} + +QString VcMakeStepConfigWidget::displayName() const +{ + return tr("Vc Make Step Config Widget"); +} + +QString VcMakeStepConfigWidget::summaryText() const +{ + return tr("This is Vc Project's build step configuration widget."); +} + +//////////////////// +// VcMakeStepFactory +//////////////////// +VcMakeStepFactory::VcMakeStepFactory(QObject *parent) + : IBuildStepFactory(parent) +{ +} + +VcMakeStepFactory::~VcMakeStepFactory() +{ +} + +bool VcMakeStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, const Core::Id id) const +{ + qDebug() << "VcMakeStepFactory::canCreate()"; + if (parent->target()->project()->id() == Constants::VC_PROJECT_ID) + return id == MS_ID; + return false; +} + +ProjectExplorer::BuildStep* VcMakeStepFactory::create(ProjectExplorer::BuildStepList *parent, const Core::Id id) +{ + if (!canCreate(parent, id)) + return 0; + VcMakeStep *step = new VcMakeStep(parent); + return step; +} + +bool VcMakeStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const +{ + return canCreate(parent, product->id()); +} + +ProjectExplorer::BuildStep *VcMakeStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) +{ + if (!canClone(parent, product)) + return 0; + return new VcMakeStep(parent, static_cast<VcMakeStep *>(product)); +} + +bool VcMakeStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const +{ + return canCreate(parent, ProjectExplorer::idFromMap(map)); +} + +ProjectExplorer::BuildStep *VcMakeStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) +{ + if (!canRestore(parent, map)) + return 0; + VcMakeStep *bs = new VcMakeStep(parent); + if (bs->fromMap(map)) + return bs; + delete bs; + return 0; +} + +QList<Core::Id> VcMakeStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const +{ + if (parent->target() && parent->target()->project()) { + if (parent->target()->project()->id() == Constants::VC_PROJECT_ID) { + return QList<Core::Id>() << Core::Id(MS_ID); + } + } + return QList<Core::Id>(); +} + +QString VcMakeStepFactory::displayNameForId(const Core::Id id) const +{ + if (id == MS_ID) + return tr("Make", "Vc Project Make Step Factory id."); + return QString(); +} + + +} // namespace Internal +} // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcmakestep.h b/src/plugins/vcprojectmanager/vcmakestep.h new file mode 100644 index 0000000000..606301563e --- /dev/null +++ b/src/plugins/vcprojectmanager/vcmakestep.h @@ -0,0 +1,68 @@ +#ifndef VCPROJECTMANAGER_INTERNAL_VCMAKESTEP_H +#define VCPROJECTMANAGER_INTERNAL_VCMAKESTEP_H + +#include <projectexplorer/abstractprocessstep.h> + +namespace VcProjectManager { +namespace Internal { + +class VcProjectBuildConfiguration; + +class VcMakeStep : public ProjectExplorer::AbstractProcessStep +{ + Q_OBJECT + friend class VcMakeStepFactory; + +public: + explicit VcMakeStep(ProjectExplorer::BuildStepList *bsl); + + bool init(); + void run(QFutureInterface<bool> &fi); + ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); + bool immutable() const; + + VcProjectBuildConfiguration *vcProjectBuildConfiguration() const; + + QVariantMap toMap() const; + bool fromMap(const QVariantMap &map); +private: + explicit VcMakeStep(ProjectExplorer::BuildStepList *parent, VcMakeStep *vcMakeStep); + + QList<ProjectExplorer::Task> m_tasks; + QFutureInterface<bool> *m_futureInterface; +}; + +class VcMakeStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget +{ + Q_OBJECT +public: + VcMakeStepConfigWidget(VcMakeStep *makeStep); + virtual QString displayName() const; + virtual QString summaryText() const; +private: + VcMakeStep *m_makeStep; +}; + +class VcMakeStepFactory : public ProjectExplorer::IBuildStepFactory +{ + Q_OBJECT + +public: + explicit VcMakeStepFactory(QObject *parent = 0); + virtual ~VcMakeStepFactory(); + + bool canCreate(ProjectExplorer::BuildStepList *parent, const Core::Id id) const; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, const Core::Id id); + bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const; + ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product); + bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const; + ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map); + + QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *parent) const; + QString displayNameForId(const Core::Id id) const; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_VCMAKESTEP_H diff --git a/src/plugins/vcprojectmanager/vcproject.cpp b/src/plugins/vcprojectmanager/vcproject.cpp index 0f972a0b41..c93a00c9da 100644 --- a/src/plugins/vcprojectmanager/vcproject.cpp +++ b/src/plugins/vcprojectmanager/vcproject.cpp @@ -2,17 +2,27 @@ #include "vcprojectfile.h" #include "vcprojectnodes.h" +#include "vcmakestep.h" #include "vcprojectmanager.h" #include "vcprojectmanagerconstants.h" #include "vcprojectreader.h" +#include "vcprojectbuildconfiguration.h" #include <coreplugin/icontext.h> #include <coreplugin/icore.h> +#include <projectexplorer/buildsteplist.h> +#include <projectexplorer/buildenvironmentwidget.h> #include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/kit.h> +#include <projectexplorer/kitmanager.h> +#include <projectexplorer/target.h> +#include <extensionsystem/pluginmanager.h> #include <utils/filesystemwatcher.h> #include <QFileInfo> #include <QFileSystemWatcher> +#include <QFormLayout> +#include <QLabel> using namespace ProjectExplorer; @@ -66,10 +76,20 @@ QStringList VcProject::files(Project::FilesMode fileMode) const return m_rootNode->files(); } -void VcProject::reparse() +QList<BuildConfigWidget *> VcProject::subConfigWidgets() { - qDebug() << "reparse"; + QList<ProjectExplorer::BuildConfigWidget*> list; + list << new BuildEnvironmentWidget; + return list; +} +QString VcProject::defaultBuildDirectory() const +{ + return projectDirectory() + QLatin1String("-build"); +} + +void VcProject::reparse() +{ QString projectFilePath = m_projectFile->filePath(); VcProjectInfo::Project *projInfo = reader.parse(projectFilePath); @@ -92,5 +112,54 @@ void VcProject::reparse() emit fileListChanged(); } +bool VcProject::fromMap(const QVariantMap &map) +{ + Kit *defaultKit = KitManager::instance()->defaultKit(); + if (defaultKit) { + qDebug() << "VcProject::fromMap() defaultKit:" << defaultKit->displayName(); + Target *target = new Target(this, defaultKit); + VcProjectBuildConfiguration *bc = new VcProjectBuildConfiguration(target); + ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); + VcMakeStep *makeStep = new VcMakeStep(buildSteps); + buildSteps->insertStep(0, makeStep); + target->addBuildConfiguration(bc); + addTarget(target); + } + + return Project::fromMap(map); +} + +bool VcProject::setupTarget(ProjectExplorer::Target *t) +{ + VcProjectBuildConfigurationFactory *factory + = ExtensionSystem::PluginManager::instance()->getObject<VcProjectBuildConfigurationFactory>(); + VcProjectBuildConfiguration *bc = factory->create(t, Constants::VC_PROJECT_BC_ID, QLatin1String("vcproj")); + if (!bc) + return false; + + t->addBuildConfiguration(bc); + return true; +} + +VcProjectBuildSettingsWidget::VcProjectBuildSettingsWidget() +{ + QFormLayout *f1 = new QFormLayout(this); + f1->setContentsMargins(0, 0, 0, 0); + f1->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); + + QLabel *l = new QLabel(tr("Vcproj Build Configuration widget.")); + f1->addRow(tr("Vc Project"), l); +} + +QString VcProjectBuildSettingsWidget::displayName() const +{ + return tr("Vc Project Settings Widget"); +} + +void VcProjectBuildSettingsWidget::init(BuildConfiguration *bc) +{ + Q_UNUSED(bc); +} + } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcproject.h b/src/plugins/vcprojectmanager/vcproject.h index 3540465bbc..8aed3a291a 100644 --- a/src/plugins/vcprojectmanager/vcproject.h +++ b/src/plugins/vcprojectmanager/vcproject.h @@ -3,6 +3,7 @@ #include "vcprojectreader.h" +#include <projectexplorer/buildstep.h> #include <projectexplorer/project.h> class QFileSystemWatcher; @@ -27,11 +28,12 @@ public: ProjectExplorer::IProjectManager *projectManager() const; ProjectExplorer::ProjectNode *rootProjectNode() const; QStringList files(FilesMode fileMode) const; + QList<ProjectExplorer::BuildConfigWidget*> subConfigWidgets(); + QString defaultBuildDirectory() const; public slots: void reparse(); -// virtual QList<BuildConfigWidget*> subConfigWidgets(); // virtual QString generatedUiHeader(const QString &formFile) const; // static QString makeUnique(const QString &preferedName, const QStringList &usedNames); // virtual QVariantMap toMap() const; @@ -40,6 +42,10 @@ public slots: // virtual bool needsConfiguration() const; // virtual void configureAsExampleProject(const QStringList &platforms); +protected: + bool fromMap(const QVariantMap &map); + bool setupTarget(ProjectExplorer::Target *t); + private: VcManager *m_projectManager; VcProjectFile *m_projectFile; @@ -49,6 +55,14 @@ private: QFileSystemWatcher *m_projectFileWatcher; }; +class VcProjectBuildSettingsWidget : public ProjectExplorer::BuildConfigWidget +{ +public: + VcProjectBuildSettingsWidget(); + QString displayName() const; + void init(ProjectExplorer::BuildConfiguration *bc); +}; + } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp new file mode 100644 index 0000000000..ef8afa29a6 --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp @@ -0,0 +1,162 @@ +#include "vcprojectbuildconfiguration.h" +#include "vcprojectmanagerconstants.h" +#include "vcmakestep.h" + +#include <projectexplorer/buildsteplist.h> +#include <projectexplorer/gnumakeparser.h> +#include <projectexplorer/kitinformation.h> +#include <projectexplorer/project.h> +#include <projectexplorer/projectexplorerconstants.h> +#include <qtsupport/qtkitinformation.h> +#include <utils/qtcassert.h> +#include <projectexplorer/target.h> + +#include <QFormLayout> +#include <QLabel> +#include <QInputDialog> + +//////////////////////////////////// +// VcProjectBuildConfiguration class +//////////////////////////////////// +namespace VcProjectManager { +namespace Internal { + +VcProjectBuildConfiguration::VcProjectBuildConfiguration(ProjectExplorer::Target *parent) : + BuildConfiguration(parent, Core::Id(Constants::VC_PROJECT_BC_ID)) +{ + m_buildDirectory = static_cast<VcProject *>(parent->project())->defaultBuildDirectory(); +} + +ProjectExplorer::BuildConfigWidget *VcProjectBuildConfiguration::createConfigWidget() +{ + return new VcProjectBuildSettingsWidget; +} + +QString VcProjectBuildConfiguration::buildDirectory() const +{ + return QString(); +} + +ProjectExplorer::IOutputParser *VcProjectBuildConfiguration::createOutputParser() const +{ + ProjectExplorer::IOutputParser *parserchain = new ProjectExplorer::GnuMakeParser; + + ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit()); + if (tc) + parserchain->appendOutputParser(tc->outputParser()); + return parserchain; +} + +ProjectExplorer::BuildConfiguration::BuildType VcProjectBuildConfiguration::buildType() const +{ + return Debug; +} + +VcProjectBuildConfiguration::VcProjectBuildConfiguration(ProjectExplorer::Target *parent, VcProjectBuildConfiguration *source) + : BuildConfiguration(parent, source) +{ + cloneSteps(source); +} + +/////////////////////////////////////////// +// VcProjectBuildConfigurationFactory class +/////////////////////////////////////////// +VcProjectBuildConfigurationFactory::VcProjectBuildConfigurationFactory(QObject *parent) + : IBuildConfigurationFactory(parent) +{ +} + +QList<Core::Id> VcProjectBuildConfigurationFactory::availableCreationIds(const ProjectExplorer::Target *parent) const +{ + if (!canHandle(parent)) + return QList<Core::Id>(); + + return QList<Core::Id>() << Core::Id(Constants::VC_PROJECT_BC_ID); +} + +QString VcProjectBuildConfigurationFactory::displayNameForId(const Core::Id id) const +{ + if (id == Constants::VC_PROJECT_BC_ID) + return tr("Vc Project"); + + return QString(); +} + +bool VcProjectBuildConfigurationFactory::canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const +{ + if (!canHandle(parent)) + return false; + if (id == Constants::VC_PROJECT_BC_ID) + return true; + return false; +} + +VcProjectBuildConfiguration *VcProjectBuildConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name) +{ + if (!canCreate(parent, id)) + return 0; +// VcProject *project = static_cast<VcProject *>(parent->project()); + + bool ok = true; + QString buildConfigName = name; + if (buildConfigName.isEmpty()) + buildConfigName = QInputDialog::getText(0, + tr("New Vc Project Configuration"), + tr("New Configuration name:"), + QLineEdit::Normal, + QString(), &ok); + buildConfigName = buildConfigName.trimmed(); + if (!ok || buildConfigName.isEmpty()) + return 0; + + VcProjectBuildConfiguration *bc = new VcProjectBuildConfiguration(parent); + bc->setDisplayName(buildConfigName); + + ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); + + VcMakeStep *makeStep = new VcMakeStep(buildSteps); + buildSteps->insertStep(0, makeStep); + + return bc; +} + +bool VcProjectBuildConfigurationFactory::canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const +{ + return canCreate(parent, ProjectExplorer::idFromMap(map)); +} + +VcProjectBuildConfiguration *VcProjectBuildConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map) +{ + if (!canRestore(parent, map)) + return 0; + + VcProjectBuildConfiguration *bc = new VcProjectBuildConfiguration(parent); + if (bc->fromMap(map)) + return bc; + delete bc; + return 0; +} + +bool VcProjectBuildConfigurationFactory::canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const +{ + return canCreate(parent, source->id()); +} + +VcProjectBuildConfiguration *VcProjectBuildConfigurationFactory::clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) +{ + if (!canClone(parent, source)) + return 0; + + VcProjectBuildConfiguration *old = static_cast<VcProjectBuildConfiguration *>(source); + return new VcProjectBuildConfiguration(parent, old); +} + +bool VcProjectBuildConfigurationFactory::canHandle(const ProjectExplorer::Target *t) const +{ + if (!t->project()->supportsKit(t->kit())) + return false; + return qobject_cast<VcProject *>(t->project()); +} + +} // namespace Internal +} // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h new file mode 100644 index 0000000000..cb0ba11a57 --- /dev/null +++ b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h @@ -0,0 +1,53 @@ +#ifndef VCPROJECTMANAGER_BUILDCONFIGURATION_H +#define VCPROJECTMANAGER_BUILDCONFIGURATION_H + +#include "vcproject.h" + +#include <projectexplorer/buildconfiguration.h> + +namespace VcProjectManager { +namespace Internal { + +class VcProjectBuildConfiguration : public ProjectExplorer::BuildConfiguration +{ + Q_OBJECT + friend class VcProjectBuildConfigurationFactory; + +public: + explicit VcProjectBuildConfiguration(ProjectExplorer::Target *parent); + + ProjectExplorer::BuildConfigWidget *createConfigWidget(); + QString buildDirectory() const; + ProjectExplorer::IOutputParser *createOutputParser() const; + BuildType buildType() const; + +protected: + VcProjectBuildConfiguration(ProjectExplorer::Target *parent, VcProjectBuildConfiguration *source); + +private: + QString m_buildDirectory; +}; + +class VcProjectBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory +{ + Q_OBJECT + +public: + explicit VcProjectBuildConfigurationFactory(QObject *parent = 0); + + QList<Core::Id> availableCreationIds(const ProjectExplorer::Target *parent) const; + QString displayNameForId(const Core::Id id) const; + bool canCreate(const ProjectExplorer::Target *parent, const Core::Id id) const; + VcProjectBuildConfiguration* create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name); + bool canRestore(const ProjectExplorer::Target *parent, const QVariantMap &map) const; + VcProjectBuildConfiguration* restore(ProjectExplorer::Target *parent, const QVariantMap &map); + bool canClone(const ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const; + VcProjectBuildConfiguration* clone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source); + +private: + bool canHandle(const ProjectExplorer::Target *t) const; +}; + +} // namespace Internal +} // namespace VcProjectManager +#endif // VCPROJECTBUILDCONFIGURATION_H diff --git a/src/plugins/vcprojectmanager/vcprojectmanager.pro b/src/plugins/vcprojectmanager/vcprojectmanager.pro index a83fa5abf2..311d08d0e1 100644 --- a/src/plugins/vcprojectmanager/vcprojectmanager.pro +++ b/src/plugins/vcprojectmanager/vcprojectmanager.pro @@ -7,13 +7,19 @@ HEADERS = vcprojectmanagerplugin.h \ vcprojectmanager_global.h \ vcprojectmanager.h \ vcprojectfile.h \ - vcproject.h + vcproject.h \ + vcprojectbuildconfiguration.h \ + vcmakestep.h \ + vcprojectbuildoptionspage.h SOURCES = vcprojectmanagerplugin.cpp \ vcprojectreader.cpp \ vcprojectnodes.cpp \ vcprojectmanager.cpp \ vcprojectfile.cpp \ - vcproject.cpp + vcproject.cpp \ + vcprojectbuildconfiguration.cpp \ + vcmakestep.cpp \ + vcprojectbuildoptionspage.cpp OTHER_FILES += \ VcProject.mimetypes.xml diff --git a/src/plugins/vcprojectmanager/vcprojectmanagerconstants.h b/src/plugins/vcprojectmanager/vcprojectmanagerconstants.h index 1b28f9f83e..6de5e2b67b 100644 --- a/src/plugins/vcprojectmanager/vcprojectmanagerconstants.h +++ b/src/plugins/vcprojectmanager/vcprojectmanagerconstants.h @@ -8,6 +8,7 @@ const char VCPROJ_MIMETYPE[] = "text/x-vc-project"; // TODO: is this good enough const char VC_PROJECT_ID[] = "VcProject.VcProject"; const char VC_PROJECT_CONTEXT[] = "VcProject.ProjectContext"; const char VC_PROJECT_TARGET_ID[] = "VcProject.DefaultVcProjectTarget"; +const char VC_PROJECT_BC_ID[] = "VcProject.VcProjectBuildConfiguration"; const char REPARSE_ACTION_ID[] = "VcProject.ReparseMenuAction"; const char REPARSE_CONTEXT_MENU_ACTION_ID[] = "VcProject.ReparseContextMenuAction"; diff --git a/src/plugins/vcprojectmanager/vcprojectmanagerplugin.cpp b/src/plugins/vcprojectmanager/vcprojectmanagerplugin.cpp index 51ae6cb0b3..39b38b6231 100644 --- a/src/plugins/vcprojectmanager/vcprojectmanagerplugin.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmanagerplugin.cpp @@ -2,6 +2,8 @@ #include "vcprojectmanager.h" #include "vcprojectmanagerconstants.h" +#include "vcprojectbuildconfiguration.h" +#include "vcmakestep.h" // TODO: clean up #include <coreplugin/actionmanager/actionmanager.h> @@ -48,6 +50,8 @@ bool VcProjectManagerPlugin::initialize(const QStringList &arguments, QString *e return false; addAutoReleasedObject(new VcManager); + addAutoReleasedObject(new VcProjectBuildConfigurationFactory); + addAutoReleasedObject(new VcMakeStepFactory); return true; } |