QbsProjectManager: Aspectify QbsBuildConfiguration

Change-Id: Ifff6b770b9c6e2313809b35eef041c674df362e4
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-04-26 18:25:28 +02:00
parent 02280bf14e
commit 8e1e312273
8 changed files with 41 additions and 219 deletions

View File

@@ -43,6 +43,7 @@
#include <coreplugin/idocument.h>
#include <utils/algorithm.h>
#include <utils/detailswidget.h>
#include <utils/macroexpander.h>
#include <utils/mimetypes/mimedatabase.h>
#include <utils/mimetypes/mimetype.h>
@@ -123,8 +124,23 @@ void BuildConfiguration::setBuildDirectory(const Utils::FileName &dir)
NamedWidget *BuildConfiguration::createConfigWidget()
{
auto widget = new NamedWidget;
widget->setDisplayName(m_configWidgetDisplayName);
NamedWidget *named = new NamedWidget;
named->setDisplayName(m_configWidgetDisplayName);
QWidget *widget = nullptr;
if (m_configWidgetHasFrame) {
auto container = new Utils::DetailsWidget(named);
widget = new QWidget(container);
container->setState(Utils::DetailsWidget::NoSummary);
container->setWidget(widget);
auto vbox = new QVBoxLayout(named);
vbox->setMargin(0);
vbox->addWidget(container);
} else {
widget = named;
}
auto formLayout = new QFormLayout(widget);
formLayout->setMargin(0);
@@ -135,7 +151,7 @@ NamedWidget *BuildConfiguration::createConfigWidget()
aspect->addToConfigurationLayout(formLayout);
}
return widget;
return named;
}
void BuildConfiguration::initialize(const BuildInfo &info)
@@ -242,6 +258,11 @@ void BuildConfiguration::setBuildDirectoryHistoryCompleter(const QString &histor
m_buildDirectoryAspect->setHistoryCompleter(history);
}
void BuildConfiguration::setConfigWidgetHasFrame(bool configWidgetHasFrame)
{
m_configWidgetHasFrame = configWidgetHasFrame;
}
Target *BuildConfiguration::target() const
{
return static_cast<Target *>(parent());

View File

@@ -102,6 +102,7 @@ public:
ProjectExplorer::BaseStringAspect *buildDirectoryAspect() const;
void setConfigWidgetDisplayName(const QString &display);
void setBuildDirectoryHistoryCompleter(const QString &history);
void setConfigWidgetHasFrame(bool configWidgetHasFrame);
signals:
void environmentChanged();
@@ -122,6 +123,7 @@ private:
Utils::FileName m_lastEmmitedBuildDirectory;
mutable Utils::Environment m_cachedEnvironment;
QString m_configWidgetDisplayName;
bool m_configWidgetHasFrame = false;
};
class PROJECTEXPLORER_EXPORT BuildConfigurationFactory : public QObject

View File

@@ -25,7 +25,6 @@
#include "qbsbuildconfiguration.h"
#include "qbsbuildconfigurationwidget.h"
#include "qbsbuildstep.h"
#include "qbscleanstep.h"
#include "qbsinstallstep.h"
@@ -34,7 +33,6 @@
#include "qbsprojectmanagersettings.h"
#include <coreplugin/documentmanager.h>
#include <coreplugin/icore.h>
#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildsteplist.h>
@@ -54,7 +52,6 @@
#include <utils/qtcprocess.h>
#include <QCoreApplication>
#include <QInputDialog>
using namespace ProjectExplorer;
using namespace Utils;
@@ -62,8 +59,6 @@ using namespace Utils;
namespace QbsProjectManager {
namespace Internal {
static QString configNameKey() { return QStringLiteral("Qbs.configName"); }
static FileName defaultBuildDirectory(const QString &projectFilePath, const Kit *k,
const QString &bcName,
BuildConfiguration::BuildType buildType)
@@ -82,6 +77,15 @@ static FileName defaultBuildDirectory(const QString &projectFilePath, const Kit
QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
: BuildConfiguration(target, id)
{
setConfigWidgetHasFrame(true);
m_configurationName = addAspect<BaseStringAspect>();
m_configurationName->setLabelText(tr("Configuration name:"));
m_configurationName->setSettingsKey("Qbs.configName");
m_configurationName->setDisplayStyle(BaseStringAspect::LineEditDisplay);
connect(m_configurationName, &BaseStringAspect::changed,
this, &BuildConfiguration::buildDirectoryChanged);
connect(project(), &Project::parsingStarted, this, &BuildConfiguration::enabledChanged);
connect(project(), &Project::parsingFinished, this, &BuildConfiguration::enabledChanged);
}
@@ -109,7 +113,8 @@ void QbsBuildConfiguration::initialize(const BuildInfo &info)
configName = "qtc_" + target()->kit()->fileSystemFriendlyName() + '_'
+ Utils::FileUtils::fileSystemFriendlyName(info.displayName);
}
setConfigurationName(configName);
m_configurationName->setValue(configName);
BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
auto bs = new QbsBuildStep(buildSteps);
@@ -130,12 +135,11 @@ bool QbsBuildConfiguration::fromMap(const QVariantMap &map)
if (!BuildConfiguration::fromMap(map))
return false;
m_configurationName = map.value(configNameKey()).toString();
if (m_configurationName.isEmpty()) { // pre-4.4 backwards compatibility
if (m_configurationName->value().isEmpty()) { // pre-4.4 backwards compatibility
const QString profileName = QbsManager::profileForKit(target()->kit());
const QString buildVariant = qbsConfiguration()
.value(QLatin1String(Constants::QBS_CONFIG_VARIANT_KEY)).toString();
m_configurationName = profileName + QLatin1Char('-') + buildVariant;
m_configurationName->setValue(profileName + '-' + buildVariant);
}
BuildStepList *bsl = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
// Fix up the existing build steps:
@@ -148,18 +152,6 @@ bool QbsBuildConfiguration::fromMap(const QVariantMap &map)
return true;
}
QVariantMap QbsBuildConfiguration::toMap() const
{
QVariantMap map = BuildConfiguration::toMap();
map.insert(configNameKey(), m_configurationName);
return map;
}
NamedWidget *QbsBuildConfiguration::createConfigWidget()
{
return new QbsBuildConfigurationWidget(this);
}
QbsBuildStep *QbsBuildConfiguration::qbsStep() const
{
return stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)->firstOfType<QbsBuildStep>();
@@ -241,17 +233,9 @@ void QbsBuildConfiguration::emitBuildTypeChanged()
emit buildTypeChanged();
}
void QbsBuildConfiguration::setConfigurationName(const QString &configName)
{
if (m_configurationName == configName)
return;
m_configurationName = configName;
emit buildDirectoryChanged();
}
QString QbsBuildConfiguration::configurationName() const
{
return m_configurationName;
return m_configurationName->value();
}
class StepProxy

View File

@@ -37,7 +37,6 @@ namespace ProjectExplorer { class BuildStep; }
namespace QbsProjectManager {
namespace Internal {
class QbsBuildConfigurationWidget;
class QbsBuildStep;
class QbsProject;
@@ -50,7 +49,6 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration
public:
void initialize(const ProjectExplorer::BuildInfo &info) override;
ProjectExplorer::NamedWidget *createConfigWidget() override;
QbsBuildStep *qbsStep() const;
QVariantMap qbsConfiguration() const;
@@ -73,7 +71,6 @@ public:
void emitBuildTypeChanged();
void setConfigurationName(const QString &configName);
QString configurationName() const;
QString equivalentCommandLine(const ProjectExplorer::BuildStep *buildStep) const;
@@ -83,16 +80,13 @@ signals:
private:
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
bool m_isParsing = true;
bool m_parsingError = false;
QStringList m_changedFiles;
QStringList m_activeFileTags;
QStringList m_products;
QString m_configurationName;
friend class QbsBuildConfigurationWidget;
ProjectExplorer::BaseStringAspect *m_configurationName;
};
class QbsBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory

View File

@@ -1,109 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "qbsbuildconfigurationwidget.h"
#include "qbsbuildconfiguration.h"
#include <projectexplorer/target.h>
#include <projectexplorer/project.h>
#include <utils/detailswidget.h>
#include <utils/pathchooser.h>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QWidget>
namespace QbsProjectManager {
namespace Internal {
QbsBuildConfigurationWidget::QbsBuildConfigurationWidget(QbsProjectManager::Internal::QbsBuildConfiguration *bc) :
m_buildConfiguration(bc),
m_ignoreChange(false)
{
connect(bc, &ProjectExplorer::BuildConfiguration::buildDirectoryChanged,
this, &QbsBuildConfigurationWidget::buildDirectoryChanged);
connect(bc, &ProjectExplorer::BuildConfiguration::environmentChanged,
this, &QbsBuildConfigurationWidget::environmentHasChanged);
auto vbox = new QVBoxLayout(this);
vbox->setMargin(0);
auto container = new Utils::DetailsWidget(this);
container->setState(Utils::DetailsWidget::NoSummary);
vbox->addWidget(container);
QWidget *details = new QWidget(container);
container->setWidget(details);
auto layout = new QGridLayout(details);
layout->setMargin(0);
layout->addWidget(new QLabel(tr("Build directory:")), 0, 0);
m_buildDirChooser = new Utils::PathChooser;
m_buildDirChooser->setExpectedKind(Utils::PathChooser::Directory);
m_buildDirChooser->setBaseFileName(bc->target()->project()->projectDirectory());
m_buildDirChooser->setEnvironment(bc->environment());
layout->addWidget(m_buildDirChooser, 0, 1);
layout->addWidget(new QLabel(tr("Configuration name:")), 1, 0);
m_configNameEdit = new QLineEdit;
m_configNameEdit->setText(m_buildConfiguration->configurationName());
layout->addWidget(m_configNameEdit, 1, 1);
connect(m_buildDirChooser, &Utils::PathChooser::rawPathChanged,
this, &QbsBuildConfigurationWidget::buildDirEdited);
connect(m_configNameEdit, &QLineEdit::textEdited,
this, &QbsBuildConfigurationWidget::configNameEdited);
buildDirectoryChanged();
}
void QbsBuildConfigurationWidget::buildDirEdited()
{
m_ignoreChange = true;
m_buildConfiguration->setBuildDirectory(m_buildDirChooser->fileName());
}
void QbsBuildConfigurationWidget::configNameEdited()
{
m_ignoreChange = true;
m_buildConfiguration->setConfigurationName(m_configNameEdit->text());
}
void QbsBuildConfigurationWidget::buildDirectoryChanged()
{
if (m_ignoreChange)
return;
m_buildDirChooser->setPath(m_buildConfiguration->rawBuildDirectory().toString());
}
void QbsBuildConfigurationWidget::environmentHasChanged()
{
m_buildDirChooser->setEnvironment(m_buildConfiguration->environment());
}
} // namespace Internal
} // namespace QbsProjectManager

View File

@@ -1,66 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <projectexplorer/namedwidget.h>
namespace Utils {
class DetailsWidget;
class PathChooser;
} // namespace Utils
QT_BEGIN_NAMESPACE
class QLineEdit;
QT_END_NAMESPACE
namespace QbsProjectManager {
namespace Internal {
class QbsBuildConfiguration;
class QbsBuildConfigurationWidget : public ProjectExplorer::NamedWidget
{
Q_OBJECT
public:
QbsBuildConfigurationWidget(Internal::QbsBuildConfiguration *bc);
private:
void buildDirEdited();
void configNameEdited();
// Changes triggered from creator
void buildDirectoryChanged();
void environmentHasChanged();
private:
Internal::QbsBuildConfiguration *m_buildConfiguration;
Utils::PathChooser *m_buildDirChooser;
QLineEdit *m_configNameEdit;
bool m_ignoreChange;
};
} // namespace Internal
} // namespace QbsProjectManager

View File

@@ -20,7 +20,6 @@ HEADERS = \
defaultpropertyprovider.h \
propertyprovider.h \
qbsbuildconfiguration.h \
qbsbuildconfigurationwidget.h \
qbsbuildstep.h \
qbscleanstep.h \
qbskitinformation.h \
@@ -45,7 +44,6 @@ SOURCES = \
customqbspropertiesdialog.cpp \
defaultpropertyprovider.cpp \
qbsbuildconfiguration.cpp \
qbsbuildconfigurationwidget.cpp \
qbsbuildstep.cpp \
qbscleanstep.cpp \
qbsinstallstep.cpp \

View File

@@ -66,8 +66,6 @@ QtcPlugin {
"propertyprovider.h",
"qbsbuildconfiguration.cpp",
"qbsbuildconfiguration.h",
"qbsbuildconfigurationwidget.cpp",
"qbsbuildconfigurationwidget.h",
"qbsbuildstep.cpp",
"qbsbuildstep.h",
"qbsbuildstepconfigwidget.ui",