CMake: Report special utility targets in BuildDirManager::buildTargets

Report special utility targets like "all", "clean" and "install" from
the BuildDirManager and update UI accordingly.

Change-Id: I01d0dcfa23d5bddc124c8f9ee1040475184c9c1e
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-04-26 15:29:54 +02:00
parent e7b4e91fec
commit d8d2dc6adb
3 changed files with 34 additions and 18 deletions

View File

@@ -26,6 +26,7 @@
#include "builddirmanager.h" #include "builddirmanager.h"
#include "cmakebuildconfiguration.h" #include "cmakebuildconfiguration.h"
#include "cmakebuildstep.h"
#include "cmakekitinformation.h" #include "cmakekitinformation.h"
#include "cmakeprojectnodes.h" #include "cmakeprojectnodes.h"
#include "cmaketool.h" #include "cmaketool.h"
@@ -311,14 +312,30 @@ void BuildDirManager::clearCache()
forceReparse(); forceReparse();
} }
static CMakeBuildTarget utilityTarget(const QString &title, const BuildDirManager *bdm)
{
CMakeBuildTarget target;
target.title = title;
target.targetType = UtilityType;
target.workingDirectory = bdm->buildConfiguration()->buildDirectory();
target.sourceDirectory = bdm->buildConfiguration()->target()->project()->projectDirectory();
return target;
}
QList<CMakeBuildTarget> BuildDirManager::buildTargets() const QList<CMakeBuildTarget> BuildDirManager::buildTargets() const
{ {
QTC_ASSERT(!m_isHandlingError, return {}); QTC_ASSERT(!m_isHandlingError, return {});
if (!m_reader) if (!m_reader)
return QList<CMakeBuildTarget>(); return QList<CMakeBuildTarget>();
if (m_buildTargets.isEmpty()) if (m_buildTargets.isEmpty()) {
m_buildTargets = m_reader->buildTargets(); m_buildTargets.append(utilityTarget(CMakeBuildStep::allTarget(), this));
m_buildTargets.append(utilityTarget(CMakeBuildStep::cleanTarget(), this));
m_buildTargets.append(utilityTarget(CMakeBuildStep::installTarget(), this));
m_buildTargets.append(m_reader->buildTargets());
}
return m_buildTargets; return m_buildTargets;
} }

View File

@@ -79,6 +79,8 @@ public:
static CMakeConfig parseConfiguration(const Utils::FileName &cacheFile, static CMakeConfig parseConfiguration(const Utils::FileName &cacheFile,
QString *errorMessage); QString *errorMessage);
CMakeBuildConfiguration *buildConfiguration() const { return m_buildConfiguration; }
signals: signals:
void configurationStarted() const; void configurationStarted() const;
void dataAvailable() const; void dataAvailable() const;

View File

@@ -461,29 +461,21 @@ QString CMakeBuildStepConfigWidget::displayName() const
return tr("Build", "CMakeProjectManager::CMakeBuildStepConfigWidget display name."); return tr("Build", "CMakeProjectManager::CMakeBuildStepConfigWidget display name.");
} }
static void createSpecialItem(const QString &text, const QString &data, QListWidget *parent)
{
auto item = new QListWidgetItem(text, parent);
item->setData(Qt::UserRole, data);
QFont f;
f.setItalic(true);
item->setFont(f);
}
void CMakeBuildStepConfigWidget::buildTargetsChanged() void CMakeBuildStepConfigWidget::buildTargetsChanged()
{ {
const bool wasBlocked = m_buildTargetsList->blockSignals(true); const bool wasBlocked = m_buildTargetsList->blockSignals(true);
m_buildTargetsList->clear(); m_buildTargetsList->clear();
createSpecialItem(tr(ADD_RUNCONFIGURATION_TEXT), ADD_RUNCONFIGURATION_TEXT, m_buildTargetsList);
createSpecialItem(tr("all"), "all", m_buildTargetsList);
createSpecialItem(tr("clean"), "clean", m_buildTargetsList);
auto pro = static_cast<CMakeProject *>(m_buildStep->project()); auto pro = static_cast<CMakeProject *>(m_buildStep->project());
QStringList targetList = pro->buildTargetTitles(); QStringList targetList = pro->buildTargetTitles();
targetList.sort(); targetList.sort();
QFont italics;
italics.setItalic(true);
auto exeItem = new QListWidgetItem(tr(ADD_RUNCONFIGURATION_TEXT), m_buildTargetsList);
exeItem->setData(Qt::UserRole, ADD_RUNCONFIGURATION_TEXT);
foreach (const QString &buildTarget, targetList) { foreach (const QString &buildTarget, targetList) {
auto item = new QListWidgetItem(buildTarget, m_buildTargetsList); auto item = new QListWidgetItem(buildTarget, m_buildTargetsList);
item->setData(Qt::UserRole, buildTarget); item->setData(Qt::UserRole, buildTarget);
@@ -491,9 +483,14 @@ void CMakeBuildStepConfigWidget::buildTargetsChanged()
for (int i = 0; i < m_buildTargetsList->count(); ++i) { for (int i = 0; i < m_buildTargetsList->count(); ++i) {
QListWidgetItem *item = m_buildTargetsList->item(i); QListWidgetItem *item = m_buildTargetsList->item(i);
const QString title = item->data(Qt::UserRole).toString();
item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(m_buildStep->buildsBuildTarget(item->data(Qt::UserRole).toString()) item->setCheckState(m_buildStep->buildsBuildTarget(title) ? Qt::Checked : Qt::Unchecked);
? Qt::Checked : Qt::Unchecked);
// Print utility targets in italics:
if (CMakeBuildStep::specialTargets().contains(title) || title == ADD_RUNCONFIGURATION_TEXT)
item->setFont(italics);
} }
m_buildTargetsList->blockSignals(wasBlocked); m_buildTargetsList->blockSignals(wasBlocked);
updateSummary(); updateSummary();