aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-11-26 17:11:01 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-11-28 12:30:52 +0000
commit221d356210848765f21db596a8a873ba274fdb19 (patch)
tree0ba6323ec640ef25968b1a3a86d8065aa86b01b6 /src
parentb31f6aa50201e45f7f2eae804f95d97bf772ab23 (diff)
Qmake: Make proper use of BuildDirectoryAspect
Change-Id: I439496c85f7e0f402ab038de6a8171dd2f7d2ffd Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/debugger/debuggerrunconfigurationaspect.cpp3
-rw-r--r--src/plugins/projectexplorer/buildaspects.cpp6
-rw-r--r--src/plugins/projectexplorer/projectconfigurationaspects.cpp34
-rw-r--r--src/plugins/projectexplorer/projectconfigurationaspects.h7
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.cpp21
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.cpp4
-rw-r--r--src/plugins/qmakeprojectmanager/CMakeLists.txt1
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp119
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp342
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h82
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs1
-rw-r--r--src/plugins/remotelinux/genericdirectuploadstep.cpp5
-rw-r--r--src/plugins/remotelinux/makeinstallstep.cpp3
-rw-r--r--src/plugins/remotelinux/remotelinuxx11forwardingaspect.cpp3
-rw-r--r--src/plugins/remotelinux/rsyncdeploystep.cpp3
-rw-r--r--src/plugins/remotelinux/tarpackagecreationstep.cpp6
-rw-r--r--src/plugins/winrt/winrtrunconfiguration.cpp10
19 files changed, 186 insertions, 468 deletions
diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
index f9b222eff34..1c12b163f35 100644
--- a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
+++ b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp
@@ -203,7 +203,8 @@ DebuggerRunConfigurationAspect::DebuggerRunConfigurationAspect(Target *target)
m_multiProcessAspect = new BaseBoolAspect;
m_multiProcessAspect->setSettingsKey("RunConfiguration.UseMultiProcess");
- m_multiProcessAspect->setLabel(tr("Enable Debugging of Subprocesses"));
+ m_multiProcessAspect->setLabel(tr("Enable Debugging of Subprocesses"),
+ BaseBoolAspect::LabelPlacement::AtCheckBox);
m_overrideStartupAspect = new BaseStringAspect;
m_overrideStartupAspect->setSettingsKey("RunConfiguration.OverrideDebuggerStartup");
diff --git a/src/plugins/projectexplorer/buildaspects.cpp b/src/plugins/projectexplorer/buildaspects.cpp
index f7bbeaa4930..335849bdd1b 100644
--- a/src/plugins/projectexplorer/buildaspects.cpp
+++ b/src/plugins/projectexplorer/buildaspects.cpp
@@ -51,7 +51,6 @@ BuildDirectoryAspect::BuildDirectoryAspect() : d(new Private)
setLabelText(tr("Build directory:"));
setDisplayStyle(PathChooserDisplay);
setExpectedKind(Utils::PathChooser::Directory);
- setUncheckedSemantics(UncheckedSemantics::ReadOnly);
}
BuildDirectoryAspect::~BuildDirectoryAspect()
@@ -62,7 +61,7 @@ BuildDirectoryAspect::~BuildDirectoryAspect()
void BuildDirectoryAspect::allowInSourceBuilds(const FilePath &sourceDir)
{
d->sourceDir = sourceDir;
- makeCheckable(tr("Shadow Build"), QString());
+ makeCheckable(CheckBoxPlacement::Top, tr("Shadow build:"), QString());
}
bool BuildDirectoryAspect::isShadowBuild() const
@@ -108,7 +107,8 @@ void BuildDirectoryAspect::addToLayout(LayoutBuilder &builder)
if (!d->sourceDir.isEmpty()) {
connect(this, &BaseStringAspect::checkedChanged, builder.layout(), [this] {
if (isChecked()) {
- setFilePath(d->savedShadowBuildDir);
+ setFilePath(d->savedShadowBuildDir.isEmpty()
+ ? d->sourceDir : d->savedShadowBuildDir);
} else {
d->savedShadowBuildDir = filePath();
setFilePath(d->sourceDir);
diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp
index 4eb31b1d9fb..b4f2cf4e961 100644
--- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp
@@ -57,6 +57,7 @@ namespace Internal {
class BaseBoolAspectPrivate
{
public:
+ BaseBoolAspect::LabelPlacement m_labelPlacement = BaseBoolAspect::LabelPlacement::AtCheckBox;
bool m_value = false;
bool m_defaultValue = false;
QString m_label;
@@ -85,8 +86,10 @@ class BaseStringAspectPrivate
{
public:
BaseStringAspect::DisplayStyle m_displayStyle = BaseStringAspect::LabelDisplay;
+ BaseStringAspect::CheckBoxPlacement m_checkBoxPlacement
+ = BaseStringAspect::CheckBoxPlacement::Right;
BaseStringAspect::UncheckedSemantics m_uncheckedSemantics
- = BaseStringAspect::UncheckedSemantics::ReadOnly;
+ = BaseStringAspect::UncheckedSemantics::Disabled;
QString m_labelText;
std::function<QString(const QString &)> m_displayFilter;
std::unique_ptr<BaseBoolAspect> m_checker;
@@ -292,6 +295,12 @@ void BaseStringAspect::setUncheckedSemantics(BaseStringAspect::UncheckedSemantic
void BaseStringAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!d->m_label);
+
+ if (d->m_checker && d->m_checkBoxPlacement == CheckBoxPlacement::Top) {
+ d->m_checker->addToLayout(builder);
+ builder.startNewRow();
+ }
+
d->m_label = new QLabel;
d->m_label->setTextInteractionFlags(Qt::TextSelectableByMouse);
d->m_label->setText(d->m_labelText);
@@ -353,7 +362,7 @@ void BaseStringAspect::addToLayout(LayoutBuilder &builder)
break;
}
- if (d->m_checker)
+ if (d->m_checker && d->m_checkBoxPlacement == CheckBoxPlacement::Right)
d->m_checker->addToLayout(builder);
update();
@@ -391,11 +400,15 @@ void BaseStringAspect::update()
}
}
-void BaseStringAspect::makeCheckable(const QString &checkerLabel, const QString &checkerKey)
+void BaseStringAspect::makeCheckable(CheckBoxPlacement checkBoxPlacement,
+ const QString &checkerLabel, const QString &checkerKey)
{
QTC_ASSERT(!d->m_checker, return);
+ d->m_checkBoxPlacement = checkBoxPlacement;
d->m_checker.reset(new BaseBoolAspect);
- d->m_checker->setLabel(checkerLabel);
+ d->m_checker->setLabel(checkerLabel, checkBoxPlacement == CheckBoxPlacement::Top
+ ? BaseBoolAspect::LabelPlacement::InExtraLabel
+ : BaseBoolAspect::LabelPlacement::AtCheckBox);
d->m_checker->setSettingsKey(checkerKey);
connect(d->m_checker.get(), &BaseBoolAspect::changed, this, &BaseStringAspect::update);
@@ -420,10 +433,16 @@ BaseBoolAspect::~BaseBoolAspect() = default;
void BaseBoolAspect::addToLayout(LayoutBuilder &builder)
{
QTC_CHECK(!d->m_checkBox);
- d->m_checkBox = new QCheckBox(d->m_label);
+ d->m_checkBox = new QCheckBox();
+ if (d->m_labelPlacement == LabelPlacement::AtCheckBox) {
+ d->m_checkBox->setText(d->m_label);
+ builder.addItem(QString());
+ } else {
+ builder.addItem(d->m_label);
+ }
d->m_checkBox->setChecked(d->m_value);
d->m_checkBox->setToolTip(d->m_tooltip);
- builder.addItems(QString(), d->m_checkBox.data());
+ builder.addItem(d->m_checkBox.data());
connect(d->m_checkBox.data(), &QAbstractButton::clicked, this, [this] {
d->m_value = d->m_checkBox->isChecked();
emit changed();
@@ -463,9 +482,10 @@ void BaseBoolAspect::setValue(bool value)
d->m_checkBox->setChecked(d->m_value);
}
-void BaseBoolAspect::setLabel(const QString &label)
+void BaseBoolAspect::setLabel(const QString &label, LabelPlacement labelPlacement)
{
d->m_label = label;
+ d->m_labelPlacement = labelPlacement;
}
void BaseBoolAspect::setToolTip(const QString &tooltip)
diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.h b/src/plugins/projectexplorer/projectconfigurationaspects.h
index d88bd6be1e5..67d5a40e5c8 100644
--- a/src/plugins/projectexplorer/projectconfigurationaspects.h
+++ b/src/plugins/projectexplorer/projectconfigurationaspects.h
@@ -63,7 +63,8 @@ public:
bool defaultValue() const;
void setDefaultValue(bool defaultValue);
- void setLabel(const QString &label);
+ enum class LabelPlacement { AtCheckBox, InExtraLabel };
+ void setLabel(const QString &label, LabelPlacement labelPlacement);
void setToolTip(const QString &tooltip);
void fromMap(const QVariantMap &map) override;
@@ -132,10 +133,12 @@ public:
void setMacroExpanderProvider(const Utils::MacroExpanderProvider &expanderProvider);
enum class UncheckedSemantics { Disabled, ReadOnly };
+ enum class CheckBoxPlacement { Top, Right };
void setUncheckedSemantics(UncheckedSemantics semantics);
bool isChecked() const;
void setChecked(bool checked);
- void makeCheckable(const QString &optionalLabel, const QString &optionalBaseKey);
+ void makeCheckable(CheckBoxPlacement checkBoxPlacement, const QString &optionalLabel,
+ const QString &optionalBaseKey);
enum DisplayStyle {
LabelDisplay,
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp
index 237970e5bdf..e092bf8b0c2 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp
@@ -436,7 +436,8 @@ void ExecutableAspect::makeOverridable(const QString &overridingKey, const QStri
m_alternativeExecutable->setDisplayStyle(BaseStringAspect::LineEditDisplay);
m_alternativeExecutable->setLabelText(tr("Alternate executable on device:"));
m_alternativeExecutable->setSettingsKey(overridingKey);
- m_alternativeExecutable->makeCheckable(tr("Use this command instead"), useOverridableKey);
+ m_alternativeExecutable->makeCheckable(BaseStringAspect::CheckBoxPlacement::Right,
+ tr("Use this command instead"), useOverridableKey);
connect(m_alternativeExecutable, &BaseStringAspect::changed,
this, &ExecutableAspect::changed);
}
@@ -501,12 +502,15 @@ UseLibraryPathsAspect::UseLibraryPathsAspect()
{
setId("UseLibraryPath");
setSettingsKey("RunConfiguration.UseLibrarySearchPath");
- if (HostOsInfo::isMacHost())
- setLabel(tr("Add build library search path to DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH"));
- else if (HostOsInfo::isWindowsHost())
- setLabel(tr("Add build library search path to PATH"));
- else
- setLabel(tr("Add build library search path to LD_LIBRARY_PATH"));
+ if (HostOsInfo::isMacHost()) {
+ setLabel(tr("Add build library search path to DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH:"),
+ LabelPlacement::InExtraLabel);
+ } else if (HostOsInfo::isWindowsHost()) {
+ setLabel(tr("Add build library search path to PATH"), LabelPlacement::InExtraLabel);
+ } else {
+ setLabel(tr("Add build library search path to LD_LIBRARY_PATH:"),
+ LabelPlacement::InExtraLabel);
+ }
setValue(ProjectExplorerPlugin::projectExplorerSettings().addLibraryPathsToRunEnv);
}
@@ -518,7 +522,8 @@ UseDyldSuffixAspect::UseDyldSuffixAspect()
{
setId("UseDyldSuffix");
setSettingsKey("RunConfiguration.UseDyldImageSuffix");
- setLabel(tr("Use debug version of frameworks (DYLD_IMAGE_SUFFIX=_debug)"));
+ setLabel(tr("Use debug version of frameworks (DYLD_IMAGE_SUFFIX=_debug):"),
+ LabelPlacement::InExtraLabel);
}
} // namespace ProjectExplorer
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
index d369ea93002..25c09f289a7 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
@@ -56,11 +56,11 @@ QbsCleanStep::QbsCleanStep(ProjectExplorer::BuildStepList *bsl) :
m_dryRunAspect = addAspect<BaseBoolAspect>();
m_dryRunAspect->setSettingsKey("Qbs.DryRun");
- m_dryRunAspect->setLabel(tr("Dry run"));
+ m_dryRunAspect->setLabel(tr("Dry run:"), BaseBoolAspect::LabelPlacement::InExtraLabel);
m_keepGoingAspect = addAspect<BaseBoolAspect>();
m_keepGoingAspect->setSettingsKey("Qbs.DryKeepGoing");
- m_keepGoingAspect->setLabel(tr("Keep going"));
+ m_keepGoingAspect->setLabel(tr("Keep going:"), BaseBoolAspect::LabelPlacement::InExtraLabel);
auto effectiveCommandAspect = addAspect<BaseStringAspect>();
effectiveCommandAspect->setDisplayStyle(BaseStringAspect::TextEditDisplay);
diff --git a/src/plugins/qmakeprojectmanager/CMakeLists.txt b/src/plugins/qmakeprojectmanager/CMakeLists.txt
index 9f1beea6e3b..9e3e58c653d 100644
--- a/src/plugins/qmakeprojectmanager/CMakeLists.txt
+++ b/src/plugins/qmakeprojectmanager/CMakeLists.txt
@@ -31,7 +31,6 @@ add_qtc_plugin(QmakeProjectManager
qmakeparser.cpp qmakeparser.h
qmakeparsernodes.cpp qmakeparsernodes.h
qmakeproject.cpp qmakeproject.h
- qmakeprojectconfigwidget.cpp qmakeprojectconfigwidget.h
qmakeprojectimporter.cpp qmakeprojectimporter.h
qmakeprojectmanager.cpp qmakeprojectmanager.h
qmakeprojectmanager.qrc
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index 8219791e872..fdff9ed9c6b 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -28,7 +28,6 @@
#include "qmakebuildinfo.h"
#include "qmakekitinformation.h"
#include "qmakeproject.h"
-#include "qmakeprojectconfigwidget.h"
#include "qmakeprojectmanagerconstants.h"
#include "qmakenodes.h"
#include "qmakesettings.h"
@@ -42,6 +41,7 @@
#include <coreplugin/documentmanager.h>
#include <coreplugin/icore.h>
+#include <projectexplorer/buildaspects.h>
#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/buildsteplist.h>
@@ -106,6 +106,8 @@ enum { debug = 0 };
QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
: BuildConfiguration(target, id)
{
+ setConfigWidgetDisplayName(tr("General"));
+ setConfigWidgetHasFrame(true);
m_buildSystem = new QmakeBuildSystem(this);
connect(target, &Target::kitChanged,
@@ -117,6 +119,17 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Core::Id id)
return file;
return QLatin1String("Makefile");
});
+
+ buildDirectoryAspect()->allowInSourceBuilds(target->project()->projectDirectory());
+ connect(this, &BuildConfiguration::buildDirectoryChanged,
+ this, &QmakeBuildConfiguration::updateProblemLabel);
+ connect(this, &QmakeBuildConfiguration::qmakeBuildConfigurationChanged,
+ this, &QmakeBuildConfiguration::updateProblemLabel);
+ connect(&QmakeSettings::instance(), &QmakeSettings::settingsChanged,
+ this, &QmakeBuildConfiguration::updateProblemLabel);
+ connect(target, &Target::parsingFinished, this, &QmakeBuildConfiguration::updateProblemLabel);
+ connect(target, &Target::kitChanged, this, &QmakeBuildConfiguration::updateProblemLabel);
+
}
void QmakeBuildConfiguration::initialize()
@@ -202,14 +215,110 @@ void QmakeBuildConfiguration::kitChanged()
}
}
-BuildSystem *QmakeBuildConfiguration::buildSystem() const
+void QmakeBuildConfiguration::updateProblemLabel()
{
- return m_buildSystem;
+ ProjectExplorer::Kit * const k = target()->kit();
+ const QString proFileName = target()->project()->projectFilePath().toString();
+
+ // Check for Qt version:
+ QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(k);
+ if (!version) {
+ buildDirectoryAspect()->setProblem(tr("This kit cannot build this project since it "
+ "does not define a Qt version."));
+ return;
+ }
+
+ const auto bs = qmakeBuildSystem();
+ if (bs->rootProFile()->parseInProgress() || !bs->rootProFile()->validParse()) {
+ buildDirectoryAspect()->setProblem({});
+ return;
+ }
+
+ bool targetMismatch = false;
+ bool incompatibleBuild = false;
+ bool allGood = false;
+ // we only show if we actually have a qmake and makestep
+ QString errorString;
+ if (qmakeStep() && makeStep()) {
+ QString makefile = buildDirectory().toString() + QLatin1Char('/');
+ if (this->makefile().isEmpty())
+ makefile.append(QLatin1String("Makefile"));
+ else
+ makefile.append(this->makefile());
+
+ switch (compareToImportFrom(makefile, &errorString)) {
+ case QmakeBuildConfiguration::MakefileMatches:
+ allGood = true;
+ break;
+ case QmakeBuildConfiguration::MakefileMissing:
+ allGood = true;
+ break;
+ case QmakeBuildConfiguration::MakefileIncompatible:
+ incompatibleBuild = true;
+ break;
+ case QmakeBuildConfiguration::MakefileForWrongProject:
+ targetMismatch = true;
+ break;
+ }
+ }
+
+ const bool unalignedBuildDir = QmakeSettings::warnAgainstUnalignedBuildDir()
+ && !isBuildDirAtSafeLocation();
+ if (unalignedBuildDir)
+ allGood = false;
+
+ if (allGood) {
+ Tasks issues;
+ issues = version->reportIssues(proFileName, buildDirectory().toString());
+ Utils::sort(issues);
+
+ if (!issues.isEmpty()) {
+ QString text = QLatin1String("<nobr>");
+ foreach (const ProjectExplorer::Task &task, issues) {
+ QString type;
+ switch (task.type) {
+ case ProjectExplorer::Task::Error:
+ type = tr("Error:");
+ type += QLatin1Char(' ');
+ break;
+ case ProjectExplorer::Task::Warning:
+ type = tr("Warning:");
+ type += QLatin1Char(' ');
+ break;
+ case ProjectExplorer::Task::Unknown:
+ default:
+ break;
+ }
+ if (!text.endsWith(QLatin1String("br>")))
+ text.append(QLatin1String("<br>"));
+ text.append(type + task.description);
+ }
+ buildDirectoryAspect()->setProblem(text);
+ return;
+ }
+ } else if (targetMismatch) {
+ buildDirectoryAspect()->setProblem(tr("A build for a different project exists in %1, "
+ "which will be overwritten.",
+ "%1 build directory")
+ .arg(buildDirectory().toUserOutput()));
+ return;
+ } else if (incompatibleBuild) {
+ buildDirectoryAspect()->setProblem(tr("%1 The build in %2 will be overwritten.",
+ "%1 error message, %2 build directory")
+ .arg(errorString)
+ .arg(buildDirectory().toUserOutput()));
+ return;
+ } else if (unalignedBuildDir) {
+ buildDirectoryAspect()->setProblem(unalignedBuildDirWarning());
+ return;
+ }
+
+ buildDirectoryAspect()->setProblem({});
}
-NamedWidget *QmakeBuildConfiguration::createConfigWidget()
+BuildSystem *QmakeBuildConfiguration::buildSystem() const
{
- return new QmakeProjectConfigWidget(this);
+ return m_buildSystem;
}
/// If only a sub tree should be build this function returns which sub node
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
index 9c3cb2446ba..86d0d9b27aa 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
@@ -50,7 +50,6 @@ public:
ProjectExplorer::BuildSystem *buildSystem() const final;
void initialize() override;
- ProjectExplorer::NamedWidget *createConfigWidget() override;
void setSubNodeBuild(QmakeProFileNode *node);
QmakeProFileNode *subNodeBuild() const;
@@ -109,6 +108,7 @@ private:
void kitChanged();
void toolChainUpdated(ProjectExplorer::ToolChain *tc);
void qtVersionsChanged(const QList<int> &, const QList<int> &, const QList<int> &changed);
+ void updateProblemLabel();
class LastKitState
{
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
deleted file mode 100644
index 04286333e36..00000000000
--- a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.cpp
+++ /dev/null
@@ -1,342 +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 "qmakeprojectconfigwidget.h"
-
-#include "qmakeproject.h"
-#include "qmakebuildconfiguration.h"
-#include "qmakenodes.h"
-#include "qmakesettings.h"
-
-#include <QBoxLayout>
-#include <coreplugin/coreicons.h>
-#include <coreplugin/variablechooser.h>
-#include <projectexplorer/target.h>
-#include <qtsupport/qtkitinformation.h>
-
-#include <utils/algorithm.h>
-#include <utils/detailswidget.h>
-#include <utils/utilsicons.h>
-
-using namespace QmakeProjectManager;
-using namespace QmakeProjectManager::Internal;
-using namespace ProjectExplorer;
-
-/// returns whether this is a shadow build configuration or not
-/// note, even if shadowBuild() returns true, it might be using the
-/// source directory as the shadow build directory, thus it
-/// still is a in-source build
-static bool isShadowBuild(BuildConfiguration *bc)
-{
- return bc->buildDirectory() != bc->target()->project()->projectDirectory();
-}
-
-QmakeProjectConfigWidget::QmakeProjectConfigWidget(QmakeBuildConfiguration *bc)
- : NamedWidget(tr("General")),
- m_buildConfiguration(bc)
-{
- Project *project = bc->target()->project();
-
- m_defaultShadowBuildDir
- = QmakeBuildConfiguration::shadowBuildDirectory(project->projectFilePath(),
- bc->target()->kit(),
- Utils::FileUtils::qmakeFriendlyName(bc->displayName()),
- bc->buildType());
-
- m_detailsContainer = new Utils::DetailsWidget(this);
- m_detailsContainer->setState(Utils::DetailsWidget::NoSummary);
-
- auto vbox = new QVBoxLayout(this);
- vbox->setContentsMargins(0, 0, 0, 0);
- vbox->addWidget(m_detailsContainer);
-
- auto details = new QWidget(m_detailsContainer);
- m_detailsContainer->setWidget(details);
-
- shadowBuildLabel = new QLabel(details);
- shadowBuildLabel->setText(tr("Shadow build:"));
-
- shadowBuildCheckBox = new QCheckBox(details);
- shadowBuildCheckBox->setChecked(isShadowBuild(m_buildConfiguration));
-
- buildDirLabel = new QLabel(details);
- buildDirLabel->setText(tr("Build directory:"));
-
- shadowBuildDirEdit = new Utils::PathChooser(details);
-
- inSourceBuildDirEdit = new Utils::PathChooser(details);
-
- warningLabel = new QLabel(details);
- warningLabel->setPixmap(Utils::Icons::WARNING.pixmap());
-
- problemLabel = new QLabel(details);
- QSizePolicy sizePolicy2(QSizePolicy::Preferred, QSizePolicy::Preferred);
- sizePolicy2.setHorizontalStretch(10);
- sizePolicy2.setVerticalStretch(0);
- problemLabel->setSizePolicy(sizePolicy2);
- problemLabel->setWordWrap(true);
-
- auto horizontalLayout_2 = new QHBoxLayout();
- horizontalLayout_2->addWidget(warningLabel);
- horizontalLayout_2->addWidget(problemLabel);
-
- auto horizontalLayout = new QHBoxLayout();
- horizontalLayout->addWidget(shadowBuildDirEdit);
- horizontalLayout->addWidget(inSourceBuildDirEdit);
-
- auto layout = new QGridLayout(details);
- layout->setContentsMargins(0, 0, 0, 0);
- layout->addWidget(shadowBuildLabel, 0, 0, 1, 1);
- layout->addWidget(shadowBuildCheckBox, 0, 1, 1, 1);
- layout->addWidget(buildDirLabel, 1, 0, 1, 1);
- layout->addLayout(horizontalLayout, 1, 1, 1, 1);
- layout->addLayout(horizontalLayout_2, 2, 1, 1, 1);
-
- problemLabel->setText(tr("problemLabel"));
-
- m_browseButton = shadowBuildDirEdit->buttonAtIndex(0);
-
- shadowBuildDirEdit->setPromptDialogTitle(tr("Shadow Build Directory"));
- shadowBuildDirEdit->setExpectedKind(Utils::PathChooser::ExistingDirectory);
- shadowBuildDirEdit->setHistoryCompleter(QLatin1String("Qmake.BuildDir.History"));
- shadowBuildDirEdit->setEnvironment(bc->environment());
- shadowBuildDirEdit->setBaseFileName(project->projectDirectory());
- if (isShadowBuild(m_buildConfiguration)) {
- shadowBuildDirEdit->setPath(bc->rawBuildDirectory().toString());
- inSourceBuildDirEdit->setVisible(false);
- } else {
- shadowBuildDirEdit->setPath(m_defaultShadowBuildDir);
- shadowBuildDirEdit->setVisible(false);
- }
- inSourceBuildDirEdit->setFileName(project->projectDirectory());
- inSourceBuildDirEdit->setReadOnly(true);
- inSourceBuildDirEdit->setEnabled(false);
-
- auto chooser = new Core::VariableChooser(this);
- chooser->addSupportedWidget(shadowBuildDirEdit->lineEdit());
-
- connect(shadowBuildCheckBox, &QAbstractButton::clicked,
- this, &QmakeProjectConfigWidget::shadowBuildClicked);
-
- connect(shadowBuildDirEdit, &Utils::PathChooser::beforeBrowsing,
- this, &QmakeProjectConfigWidget::onBeforeBeforeShadowBuildDirBrowsed);
-
- connect(shadowBuildDirEdit, &Utils::PathChooser::rawPathChanged,
- this, &QmakeProjectConfigWidget::shadowBuildEdited);
-
- connect(bc, &BuildConfiguration::enabledChanged,
- this, &QmakeProjectConfigWidget::environmentChanged);
-
- connect(bc->target(), &Target::parsingFinished,
- this, &QmakeProjectConfigWidget::updateProblemLabel);
- connect(&QmakeSettings::instance(), &QmakeSettings::settingsChanged,
- this, &QmakeProjectConfigWidget::updateProblemLabel);
-
- connect(bc->target(), &Target::kitChanged, this, &QmakeProjectConfigWidget::updateProblemLabel);
-
- connect(m_buildConfiguration, &BuildConfiguration::buildDirectoryChanged,
- this, &QmakeProjectConfigWidget::buildDirectoryChanged);
- connect(m_buildConfiguration, &QmakeBuildConfiguration::qmakeBuildConfigurationChanged,
- this, &QmakeProjectConfigWidget::updateProblemLabel);
-
- updateDetails();
- updateProblemLabel();
-}
-
-void QmakeProjectConfigWidget::updateDetails()
-{
- m_detailsContainer->setSummaryText(
- tr("building in <b>%1</b>")
- .arg(m_buildConfiguration->buildDirectory().toUserOutput()));
-}
-
-void QmakeProjectConfigWidget::setProblemLabel(const QString &text)
-{
- warningLabel->setVisible(!text.isEmpty());
- problemLabel->setVisible(!text.isEmpty());
- problemLabel->setText(text);
-}
-
-void QmakeProjectConfigWidget::environmentChanged()
-{
- shadowBuildDirEdit->setEnvironment(m_buildConfiguration->environment());
-}
-
-void QmakeProjectConfigWidget::buildDirectoryChanged()
-{
- if (m_ignoreChange)
- return;
-
- bool shadowBuild = shadowBuildCheckBox->isChecked();
- inSourceBuildDirEdit->setVisible(!shadowBuild);
-
- shadowBuildDirEdit->setVisible(shadowBuild);
- shadowBuildDirEdit->setEnabled(shadowBuild);
- m_browseButton->setEnabled(shadowBuild);
-
- shadowBuildDirEdit->setPath(m_buildConfiguration->rawBuildDirectory().toString());
-
- updateDetails();
- updateProblemLabel();
-}
-
-void QmakeProjectConfigWidget::onBeforeBeforeShadowBuildDirBrowsed()
-{
- Utils::FilePath initialDirectory = m_buildConfiguration->target()->project()->projectDirectory();
- if (!initialDirectory.isEmpty())
- shadowBuildDirEdit->setInitialBrowsePathBackup(initialDirectory.toString());
-}
-
-void QmakeProjectConfigWidget::shadowBuildClicked(bool checked)
-{
- shadowBuildDirEdit->setEnabled(checked);
- m_browseButton->setEnabled(checked);
-
- shadowBuildDirEdit->setVisible(checked);
- inSourceBuildDirEdit->setVisible(!checked);
-
- m_ignoreChange = true;
- if (checked)
- m_buildConfiguration->setBuildDirectory(Utils::FilePath::fromString(shadowBuildDirEdit->rawPath()));
- else
- m_buildConfiguration->setBuildDirectory(Utils::FilePath::fromString(inSourceBuildDirEdit->rawPath()));
- m_ignoreChange = false;
-
- updateDetails();
- updateProblemLabel();
-}
-
-void QmakeProjectConfigWidget::shadowBuildEdited()
-{
- if (m_buildConfiguration->rawBuildDirectory().toString() == shadowBuildDirEdit->rawPath())
- return;
-
- m_ignoreChange = true;
- m_buildConfiguration->setBuildDirectory(Utils::FilePath::fromString(shadowBuildDirEdit->rawPath()));
- m_ignoreChange = false;
-}
-
-void QmakeProjectConfigWidget::updateProblemLabel()
-{
- shadowBuildDirEdit->triggerChanged();
- ProjectExplorer::Kit *k = m_buildConfiguration->target()->kit();
- const QString proFileName = m_buildConfiguration->target()->project()->projectFilePath().toString();
-
- // Check for Qt version:
- QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(k);
- if (!version) {
- setProblemLabel(tr("This kit cannot build this project since it does not define a Qt version."));
- return;
- }
-
- auto bs = m_buildConfiguration->qmakeBuildSystem();
- if (bs->rootProFile()->parseInProgress() || !bs->rootProFile()->validParse()) {
- setProblemLabel(QString());
- return;
- }
-
- bool targetMismatch = false;
- bool incompatibleBuild = false;
- bool allGood = false;
- // we only show if we actually have a qmake and makestep
- QString errorString;
- if (m_buildConfiguration->qmakeStep() && m_buildConfiguration->makeStep()) {
- QString makefile = m_buildConfiguration->buildDirectory().toString() + QLatin1Char('/');
- if (m_buildConfiguration->makefile().isEmpty())
- makefile.append(QLatin1String("Makefile"));
- else
- makefile.append(m_buildConfiguration->makefile());
-
- switch (m_buildConfiguration->compareToImportFrom(makefile, &errorString)) {
- case QmakeBuildConfiguration::MakefileMatches:
- allGood = true;
- break;
- case QmakeBuildConfiguration::MakefileMissing:
- allGood = true;
- break;
- case QmakeBuildConfiguration::MakefileIncompatible:
- incompatibleBuild = true;
- break;
- case QmakeBuildConfiguration::MakefileForWrongProject:
- targetMismatch = true;
- break;
- }
- }
-
- const bool unalignedBuildDir = QmakeSettings::warnAgainstUnalignedBuildDir()
- && !m_buildConfiguration->isBuildDirAtSafeLocation();
- if (unalignedBuildDir)
- allGood = false;
-
- if (allGood) {
- QString buildDirectory = m_buildConfiguration->target()->project()->projectDirectory().toString();
- if (isShadowBuild(m_buildConfiguration))
- buildDirectory = m_buildConfiguration->buildDirectory().toString();
- Tasks issues;
- issues = version->reportIssues(proFileName, buildDirectory);
- Utils::sort(issues);
-
- if (!issues.isEmpty()) {
- QString text = QLatin1String("<nobr>");
- foreach (const ProjectExplorer::Task &task, issues) {
- QString type;
- switch (task.type) {
- case ProjectExplorer::Task::Error:
- type = tr("Error:");
- type += QLatin1Char(' ');
- break;
- case ProjectExplorer::Task::Warning:
- type = tr("Warning:");
- type += QLatin1Char(' ');
- break;
- case ProjectExplorer::Task::Unknown:
- default:
- break;
- }
- if (!text.endsWith(QLatin1String("br>")))
- text.append(QLatin1String("<br>"));
- text.append(type + task.description);
- }
- setProblemLabel(text);
- return;
- }
- } else if (targetMismatch) {
- setProblemLabel(tr("A build for a different project exists in %1, which will be overwritten.",
- "%1 build directory")
- .arg(m_buildConfiguration->buildDirectory().toUserOutput()));
- return;
- } else if (incompatibleBuild) {
- setProblemLabel(tr("%1 The build in %2 will be overwritten.",
- "%1 error message, %2 build directory")
- .arg(errorString)
- .arg(m_buildConfiguration->buildDirectory().toUserOutput()));
- return;
- } else if (unalignedBuildDir) {
- setProblemLabel(m_buildConfiguration->unalignedBuildDirWarning());
- return;
- }
-
- setProblemLabel(QString());
-}
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h b/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h
deleted file mode 100644
index c0dc7653b62..00000000000
--- a/src/plugins/qmakeprojectmanager/qmakeprojectconfigwidget.h
+++ /dev/null
@@ -1,82 +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>
-
-#include <utils/pathchooser.h>
-
-#include <QCheckBox>
-#include <QLabel>
-
-QT_BEGIN_NAMESPACE
-class QAbstractButton;
-QT_END_NAMESPACE
-
-namespace Utils { class DetailsWidget; }
-
-namespace QmakeProjectManager {
-class QmakeBuildConfiguration;
-
-namespace Internal {
-
-class QmakeProjectConfigWidget : public ProjectExplorer::NamedWidget
-{
- Q_OBJECT
-public:
- QmakeProjectConfigWidget(QmakeBuildConfiguration *bc);
-
-private:
- // User changes in our widgets
- void shadowBuildClicked(bool checked);
- void onBeforeBeforeShadowBuildDirBrowsed();
- void shadowBuildEdited();
-
- // Changes triggered from creator
- void buildDirectoryChanged();
- void updateProblemLabel();
- void environmentChanged();
-
- void updateDetails();
- void setProblemLabel(const QString &text);
-
- QAbstractButton *m_browseButton;
- QmakeBuildConfiguration *m_buildConfiguration;
- Utils::DetailsWidget *m_detailsContainer;
- QString m_defaultShadowBuildDir;
- bool m_ignoreChange = false;
-
- QLabel *shadowBuildLabel;
- QCheckBox *shadowBuildCheckBox;
- QLabel *buildDirLabel;
- Utils::PathChooser *shadowBuildDirEdit;
- Utils::PathChooser *inSourceBuildDirEdit;
- QLabel *warningLabel;
- QLabel *problemLabel;
-};
-
-} // namespace Internal
-} // namespace QmakeProjectManager
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro
index db59da85f77..35539aa82ba 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.pro
@@ -26,7 +26,6 @@ HEADERS += \
wizards/simpleprojectwizard.h \
qmakeprojectmanagerconstants.h \
qmakestep.h \
- qmakeprojectconfigwidget.h \
externaleditors.h \
qmakebuildconfiguration.h \
qmakeparser.h \
@@ -57,7 +56,6 @@ SOURCES += \
wizards/subdirsprojectwizarddialog.cpp \
wizards/simpleprojectwizard.cpp \
qmakestep.cpp \
- qmakeprojectconfigwidget.cpp \
externaleditors.cpp \
qmakebuildconfiguration.cpp \
qmakeparser.cpp \
diff --git a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs
index 39faf44485f..67d51cf60a3 100644
--- a/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs
+++ b/src/plugins/qmakeprojectmanager/qmakeprojectmanager.qbs
@@ -46,7 +46,6 @@ Project {
"qmakenodes.cpp", "qmakenodes.h",
"qmakenodetreebuilder.cpp", "qmakenodetreebuilder.h",
"qmakeproject.cpp", "qmakeproject.h",
- "qmakeprojectconfigwidget.cpp", "qmakeprojectconfigwidget.h",
"qmakeprojectmanager.cpp", "qmakeprojectmanager.h",
"qmakeprojectmanager.qrc",
"qmakeprojectmanager_global.h",
diff --git a/src/plugins/remotelinux/genericdirectuploadstep.cpp b/src/plugins/remotelinux/genericdirectuploadstep.cpp
index 2a07c5d94a3..7b4c55c2ad9 100644
--- a/src/plugins/remotelinux/genericdirectuploadstep.cpp
+++ b/src/plugins/remotelinux/genericdirectuploadstep.cpp
@@ -42,13 +42,14 @@ GenericDirectUploadStep::GenericDirectUploadStep(BuildStepList *bsl)
auto incremental = addAspect<BaseBoolAspect>();
incremental->setSettingsKey("RemoteLinux.GenericDirectUploadStep.Incremental");
- incremental->setLabel(tr("Incremental deployment"));
+ incremental->setLabel(tr("Incremental deployment"), BaseBoolAspect::LabelPlacement::AtCheckBox);
incremental->setValue(true);
incremental->setDefaultValue(true);
auto ignoreMissingFiles = addAspect<BaseBoolAspect>();
ignoreMissingFiles->setSettingsKey("RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles");
- ignoreMissingFiles->setLabel(tr("Ignore missing files"));
+ ignoreMissingFiles->setLabel(tr("Ignore missing files"),
+ BaseBoolAspect::LabelPlacement::AtCheckBox);
ignoreMissingFiles->setValue(false);
setInternalInitializer([incremental, ignoreMissingFiles, service] {
diff --git a/src/plugins/remotelinux/makeinstallstep.cpp b/src/plugins/remotelinux/makeinstallstep.cpp
index c902bd2f420..078b7b4b8ce 100644
--- a/src/plugins/remotelinux/makeinstallstep.cpp
+++ b/src/plugins/remotelinux/makeinstallstep.cpp
@@ -76,7 +76,8 @@ MakeInstallStep::MakeInstallStep(BuildStepList *parent) : MakeStep(parent, stepI
const auto cleanInstallRootAspect = addAspect<BaseBoolAspect>();
cleanInstallRootAspect->setId(CleanInstallRootAspectId);
cleanInstallRootAspect->setSettingsKey(CleanInstallRootAspectId);
- cleanInstallRootAspect->setLabel(tr("Clean install root first"));
+ cleanInstallRootAspect->setLabel(tr("Clean install root first"),
+ BaseBoolAspect::LabelPlacement::AtCheckBox);
cleanInstallRootAspect->setValue(false);
const auto commandLineAspect = addAspect<BaseStringAspect>();
diff --git a/src/plugins/remotelinux/remotelinuxx11forwardingaspect.cpp b/src/plugins/remotelinux/remotelinuxx11forwardingaspect.cpp
index 609e29608a8..7db97f5dbb9 100644
--- a/src/plugins/remotelinux/remotelinuxx11forwardingaspect.cpp
+++ b/src/plugins/remotelinux/remotelinuxx11forwardingaspect.cpp
@@ -40,7 +40,8 @@ X11ForwardingAspect::X11ForwardingAspect()
setDisplayStyle(LineEditDisplay);
setId("X11ForwardingAspect");
setSettingsKey("RunConfiguration.X11Forwarding");
- makeCheckable(tr("Forward to local display"), "RunConfiguration.UseX11Forwarding");
+ makeCheckable(CheckBoxPlacement::Right, tr("Forward to local display"),
+ "RunConfiguration.UseX11Forwarding");
setValue(defaultDisplay());
}
diff --git a/src/plugins/remotelinux/rsyncdeploystep.cpp b/src/plugins/remotelinux/rsyncdeploystep.cpp
index edef505f1ac..53d2265de47 100644
--- a/src/plugins/remotelinux/rsyncdeploystep.cpp
+++ b/src/plugins/remotelinux/rsyncdeploystep.cpp
@@ -190,7 +190,8 @@ RsyncDeployStep::RsyncDeployStep(BuildStepList *bsl)
auto ignoreMissingFiles = addAspect<BaseBoolAspect>();
ignoreMissingFiles->setSettingsKey("RemoteLinux.RsyncDeployStep.IgnoreMissingFiles");
- ignoreMissingFiles->setLabel(tr("Ignore missing files"));
+ ignoreMissingFiles->setLabel(tr("Ignore missing files:"),
+ BaseBoolAspect::LabelPlacement::InExtraLabel);
ignoreMissingFiles->setValue(false);
setDefaultDisplayName(displayName());
diff --git a/src/plugins/remotelinux/tarpackagecreationstep.cpp b/src/plugins/remotelinux/tarpackagecreationstep.cpp
index e8165bee7cd..c5299878785 100644
--- a/src/plugins/remotelinux/tarpackagecreationstep.cpp
+++ b/src/plugins/remotelinux/tarpackagecreationstep.cpp
@@ -76,11 +76,13 @@ TarPackageCreationStep::TarPackageCreationStep(BuildStepList *bsl)
setDefaultDisplayName(displayName());
m_ignoreMissingFilesAspect = addAspect<BaseBoolAspect>();
- m_ignoreMissingFilesAspect->setLabel(tr("Ignore missing files"));
+ m_ignoreMissingFilesAspect->setLabel(tr("Ignore missing files"),
+ BaseBoolAspect::LabelPlacement::AtCheckBox);
m_ignoreMissingFilesAspect->setSettingsKey(IgnoreMissingFilesKey);
m_incrementalDeploymentAspect = addAspect<BaseBoolAspect>();
- m_incrementalDeploymentAspect->setLabel(tr("Package modified files only"));
+ m_incrementalDeploymentAspect->setLabel(tr("Package modified files only"),
+ BaseBoolAspect::LabelPlacement::AtCheckBox);
m_incrementalDeploymentAspect->setSettingsKey(IncrementalDeploymentKey);
setSummaryUpdater([this] {
diff --git a/src/plugins/winrt/winrtrunconfiguration.cpp b/src/plugins/winrt/winrtrunconfiguration.cpp
index 663ffdea915..163fc2f5d96 100644
--- a/src/plugins/winrt/winrtrunconfiguration.cpp
+++ b/src/plugins/winrt/winrtrunconfiguration.cpp
@@ -40,7 +40,8 @@ namespace Internal {
UninstallAfterStopAspect::UninstallAfterStopAspect()
: BaseBoolAspect("WinRtRunConfigurationUninstallAfterStopId")
{
- setLabel(WinRtRunConfiguration::tr("Uninstall package after application stops"));
+ setLabel(WinRtRunConfiguration::tr("Uninstall package after application stops"),
+ LabelPlacement::AtCheckBox);
}
// LoopbackExemptClientAspect
@@ -48,8 +49,8 @@ UninstallAfterStopAspect::UninstallAfterStopAspect()
LoopbackExemptClientAspect::LoopbackExemptClientAspect()
: BaseBoolAspect("WinRtRunConfigurationLoopbackExemptClient")
{
- setLabel(WinRtRunConfiguration::tr("Enable localhost communication for "
- "clients"));
+ setLabel(WinRtRunConfiguration::tr("Enable localhost communication for clients"),
+ LabelPlacement::AtCheckBox);
}
// LoopbackExemptServerAspect
@@ -58,7 +59,8 @@ LoopbackExemptServerAspect::LoopbackExemptServerAspect()
: BaseBoolAspect("WinRtRunConfigurationLoopbackExemptServer")
{
setLabel(WinRtRunConfiguration::tr("Enable localhost communication for "
- "servers (requires elevated rights)"));
+ "servers (requires elevated rights)"),
+ LabelPlacement::AtCheckBox);
}
// WinRtRunConfiguration