summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2013-01-24 15:10:49 +0100
committerTobias Hunger <tobias.hunger@digia.com>2013-01-24 15:11:22 +0100
commitc7b8938a35bcfa8bb135e40ee605fc02a563d3df (patch)
tree2294380768816b6320e664338429e6fabb9f5835
parentf264a4062f3d22f9ec7772c7d4f17630ae5449cf (diff)
downloadqt-creator-c7b8938a35bcfa8bb135e40ee605fc02a563d3df.tar.gz
Qbs: Support building of single files
Change-Id: I6c20fcf0bf7b15361a51917774b8847c6fcd7d98
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp10
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.h4
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp3
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.h1
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.cpp1
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerconstants.h1
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.cpp49
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanagerplugin.h2
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;