diff options
| author | Tobias Hunger <tobias.hunger@digia.com> | 2013-01-24 15:10:49 +0100 |
|---|---|---|
| committer | Tobias Hunger <tobias.hunger@digia.com> | 2013-01-24 15:11:22 +0100 |
| commit | c7b8938a35bcfa8bb135e40ee605fc02a563d3df (patch) | |
| tree | 2294380768816b6320e664338429e6fabb9f5835 | |
| parent | f264a4062f3d22f9ec7772c7d4f17630ae5449cf (diff) | |
| download | qt-creator-c7b8938a35bcfa8bb135e40ee605fc02a563d3df.tar.gz | |
Qbs: Support building of single files
Change-Id: I6c20fcf0bf7b15361a51917774b8847c6fcd7d98
8 files changed, 71 insertions, 0 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index ff7657ea71..d1420ccaf9 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -183,6 +183,16 @@ ProjectExplorer::BuildConfiguration::BuildType QbsBuildConfiguration::buildType( return Unknown; } +void QbsBuildConfiguration::setChangedFiles(const QStringList &files) +{ + m_changedFiles = files; +} + +QStringList QbsBuildConfiguration::changedFiles() const +{ + return m_changedFiles; +} + QbsBuildConfiguration *QbsBuildConfiguration::setup(ProjectExplorer::Target *t, const QString &defaultDisplayName, const QString &displayName, diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h index bc25e72be1..f70d4b9c4e 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h @@ -70,6 +70,9 @@ public: BuildType buildType() const; + void setChangedFiles(const QStringList &files); + QStringList changedFiles() const; + signals: void qbsConfigurationChanged(); @@ -92,6 +95,7 @@ private: bool m_isParsing; bool m_parsingError; Utils::FileName m_buildDirectory; + QStringList m_changedFiles; friend class QbsBuildConfigurationFactory; friend class QbsBuildConfigurationWidget; diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index ed452dcb55..67b3b3bf1f 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -97,6 +97,8 @@ bool QbsBuildStep::init() if (parser) m_parser->appendOutputParser(parser); + m_changedFiles = bc->changedFiles(); + connect(m_parser, SIGNAL(addOutput(QString,ProjectExplorer::BuildStep::OutputFormat)), this, SIGNAL(addOutput(QString,ProjectExplorer::BuildStep::OutputFormat))); connect(m_parser, SIGNAL(addTask(ProjectExplorer::Task)), @@ -111,6 +113,7 @@ void QbsBuildStep::run(QFutureInterface<bool> &fi) QbsProject *pro = static_cast<QbsProject *>(project()); qbs::BuildOptions options(m_qbsBuildOptions); + options.changedFiles = m_changedFiles; m_job = pro->build(options); diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h index f2eabb8944..43394e9dad 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.h +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h @@ -96,6 +96,7 @@ private: QVariantMap m_qbsConfiguration; qbs::BuildOptions m_qbsBuildOptions; + QStringList m_changedFiles; QFutureInterface<bool> *m_fi; qbs::BuildJob *m_job; diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp index 06e600fdbb..0818114fbd 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.cpp @@ -37,6 +37,7 @@ #include <projectexplorer/kitinformation.h> #include <projectexplorer/kitmanager.h> #include <projectexplorer/projectexplorer.h> +#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/toolchain.h> #include <qtsupport/baseqtversion.h> #include <qtsupport/qtkitinformation.h> diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h index 9799019da4..5d9f2b7c14 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h @@ -47,6 +47,7 @@ const char QBS_EVALUATE[] = "Qbs.QbsEvaluate"; // Actions: const char ACTION_REPARSE_QBS[] = "Qbs.Reparse"; const char ACTION_REPARSE_QBS_CONTEXT[] = "Qbs.ReparseCtx"; +const char ACTION_BUILD_FILE_QBS_CONTEXT[] = "Qbs.BuildFileCtx"; // Ids: const char QBS_BUILDSTEP_ID[] = "Qbs.BuildStep"; diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp index 197ad70ec8..2cd1e63d56 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp @@ -45,6 +45,7 @@ #include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/target.h> +#include <utils/qtcassert.h> #include <QAction> #include <QtPlugin> @@ -84,6 +85,13 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString * // PE Context menu for projects Core::ActionContainer *mproject = Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_PROJECTCONTEXT); + // <debug> + // Core::ActionContainer *msubproject = + // Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_SUBPROJECTCONTEXT); + // </debug> + Core::ActionContainer *mfile = + Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_FILECONTEXT); + //register actions Core::Command *command; @@ -100,12 +108,20 @@ bool QbsProjectManagerPlugin::initialize(const QStringList &arguments, QString * mproject->addAction(command, ProjectExplorer::Constants::G_PROJECT_BUILD); connect(m_reparseQbsCtx, SIGNAL(triggered()), this, SLOT(reparseCurrentProject())); + m_buildFileContextMenu = new QAction(tr("Build"), this); + command = Core::ActionManager::registerAction(m_buildFileContextMenu, Constants::ACTION_BUILD_FILE_QBS_CONTEXT, projectContext); + command->setAttribute(Core::Command::CA_Hide); + mfile->addAction(command, ProjectExplorer::Constants::G_FILE_OTHER); + connect(m_buildFileContextMenu, SIGNAL(triggered()), this, SLOT(buildFileContextMenu())); + + // Connect connect(m_projectExplorer, SIGNAL(currentNodeChanged(ProjectExplorer::Node*,ProjectExplorer::Project*)), this, SLOT(updateContextActions(ProjectExplorer::Node*,ProjectExplorer::Project*))); connect(m_projectExplorer->buildManager(), SIGNAL(buildStateChanged(ProjectExplorer::Project*)), this, SLOT(buildStateChanged(ProjectExplorer::Project*))); + // Run initial setup routines updateContextActions(0, 0); updateReparseQbsAction(); @@ -140,8 +156,11 @@ void QbsProjectManagerPlugin::updateContextActions(ProjectExplorer::Node *node, activeTargetChanged(); bool isBuilding = m_projectExplorer->buildManager()->isBuilding(project); + bool isFile = m_currentProject && node && (node->nodeType() == ProjectExplorer::FileNodeType); + bool isFileEnabled = isFile && node->isEnabled(); m_reparseQbsCtx->setEnabled(!isBuilding && m_currentProject && !m_currentProject->isParsing()); + m_buildFileContextMenu->setEnabled(isFileEnabled); } void QbsProjectManagerPlugin::updateReparseQbsAction() @@ -182,6 +201,36 @@ void QbsProjectManagerPlugin::parsingStateChanged() } } +void QbsProjectManagerPlugin::buildFileContextMenu() +{ + // <debug> + qDebug() << "Build file..."; + // </debug> + QTC_ASSERT(m_currentNode, return); + QTC_ASSERT(m_currentProject, return); + + ProjectExplorer::Target *t = m_currentProject->activeTarget(); + if (!t) + return; + QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(t->activeBuildConfiguration()); + if (!bc) + return; + + ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance(); + + if (!pe->saveModifiedFiles()) + return; + + bc->setChangedFiles(QStringList(m_currentNode->path())); + + const Core::Id buildStep = Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD); + + const QString name = ProjectExplorer::ProjectExplorerPlugin::displayNameForStepId(buildStep); + pe->buildManager()->buildList(bc->stepList(buildStep), name); + + bc->setChangedFiles(QStringList()); +} + void QbsProjectManagerPlugin::reparseCurrentProject() { if (m_currentProject) diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h index 446653acd2..155fd418d4 100644 --- a/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h +++ b/src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h @@ -70,6 +70,7 @@ private slots: void activeTargetChanged(); void buildStateChanged(ProjectExplorer::Project *project); void parsingStateChanged(); + void buildFileContextMenu(); void reparseCurrentProject(); @@ -79,6 +80,7 @@ private: QAction *m_reparseQbs; QAction *m_reparseQbsCtx; + QAction *m_buildFileContextMenu; Internal::QbsProject *m_currentProject; ProjectExplorer::Target *m_currentTarget; |
