diff options
author | Christian Kandeler <[email protected]> | 2019-11-22 14:50:15 +0100 |
---|---|---|
committer | Christian Kandeler <[email protected]> | 2019-11-25 09:46:41 +0000 |
commit | 72ca1796337fa0f7f0214632efba20682918a6e7 (patch) | |
tree | ffbf933d327bad6b0a623ec153116f8673b54458 /src/plugins | |
parent | 5795dc24c70ea10a622a2a98d4778aad405984af (diff) |
QtSupport: Add a QmlDebuggingAspect
... and make use of it in the qbs build configuration.
We cannot use it for qmake yet, because the build config there still has
a custom, non-aspectified widget.
Change-Id: Iacf902a2d9384d0074b10fdc98e082fa906fb6d6
Reviewed-by: hjk <[email protected]>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/debugger/debuggerrunconfigurationaspect.cpp | 3 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectconfigurationaspects.cpp | 5 | ||||
-rw-r--r-- | src/plugins/projectexplorer/projectconfigurationaspects.h | 7 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp | 15 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsbuildconfiguration.h | 7 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsbuildstep.cpp | 69 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsbuildstep.h | 11 | ||||
-rw-r--r-- | src/plugins/qtsupport/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/plugins/qtsupport/baseqtversion.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qtsupport/baseqtversion.h | 2 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtbuildaspects.cpp | 75 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtbuildaspects.h | 48 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtsupport.pro | 2 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtsupport.qbs | 2 |
14 files changed, 173 insertions, 76 deletions
diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp index c02e1922130..f9b222eff34 100644 --- a/src/plugins/debugger/debuggerrunconfigurationaspect.cpp +++ b/src/plugins/debugger/debuggerrunconfigurationaspect.cpp @@ -244,6 +244,9 @@ bool DebuggerRunConfigurationAspect::useQmlDebugger() const // (Using the Qt metatype system to avoid a hard qt4projectmanager dependency) // if (BuildConfiguration *bc = m_target->activeBuildConfiguration()) { + QVariant linkProperty = bc->property("linkQmlDebuggingLibrary"); + if (linkProperty.isValid() && linkProperty.canConvert(QVariant::Bool)) + return linkProperty.toBool(); if (BuildStepList *bsl = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD)) { foreach (BuildStep *step, bsl->steps()) { QVariant linkProperty = step->property("linkQmlDebuggingLibrary"); diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.cpp b/src/plugins/projectexplorer/projectconfigurationaspects.cpp index 794a61efe0c..6c4d4c1a348 100644 --- a/src/plugins/projectexplorer/projectconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/projectconfigurationaspects.cpp @@ -394,6 +394,11 @@ void BaseBoolAspect::toMap(QVariantMap &data) const data.insert(settingsKey(), d->m_value); } +QCheckBox *BaseBoolAspect::checkBox() const +{ + return d->m_checkBox; +} + bool BaseBoolAspect::defaultValue() const { return d->m_defaultValue; diff --git a/src/plugins/projectexplorer/projectconfigurationaspects.h b/src/plugins/projectexplorer/projectconfigurationaspects.h index 90bdcbc2bbb..540ae635e8b 100644 --- a/src/plugins/projectexplorer/projectconfigurationaspects.h +++ b/src/plugins/projectexplorer/projectconfigurationaspects.h @@ -33,6 +33,10 @@ #include <memory> +QT_BEGIN_NAMESPACE +class QCheckBox; +QT_END_NAMESPACE + namespace ProjectExplorer { namespace Internal { @@ -64,6 +68,9 @@ public: void fromMap(const QVariantMap &map) override; void toMap(QVariantMap &map) const override; +protected: + QCheckBox *checkBox() const; + private: std::unique_ptr<Internal::BaseBoolAspectPrivate> d; }; diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index 06bc76a0ea4..7acbaccccb9 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -45,6 +45,7 @@ #include <projectexplorer/target.h> #include <projectexplorer/toolchain.h> +#include <qtsupport/qtbuildaspects.h> #include <qtsupport/qtkitinformation.h> #include <utils/mimetypes/mimedatabase.h> @@ -87,6 +88,11 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id) connect(m_configurationName, &BaseStringAspect::changed, this, &BuildConfiguration::buildDirectoryChanged); + const auto qmlDebuggingAspect = addAspect<QtSupport::QmlDebuggingAspect>(); + qmlDebuggingAspect->setKit(target->kit()); + connect(qmlDebuggingAspect, &QtSupport::QmlDebuggingAspect::changed, + this, &QbsBuildConfiguration::qbsConfigurationChanged); + connect(this, &BuildConfiguration::environmentChanged, this, &QbsBuildConfiguration::triggerReparseIfActive); connect(this, &BuildConfiguration::buildDirectoryChanged, @@ -144,11 +150,11 @@ void QbsBuildConfiguration::initialize() + '_' + kitHash.toHex().left(16); m_configurationName->setValue(uniqueConfigName); + if (initialBuildType() == Release) + aspect<QtSupport::QmlDebuggingAspect>()->setDefaultValue(false); BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD); auto bs = new QbsBuildStep(buildSteps); - if (initialBuildType() == Release) - bs->setQmlDebuggingEnabled(false); bs->setQbsConfiguration(bd); buildSteps->appendStep(bs); @@ -369,6 +375,11 @@ QString QbsBuildConfiguration::equivalentCommandLine(const BuildStep *buildStep) return commandLine.arguments(); } +bool QbsBuildConfiguration::isQmlDebuggingEnabled() const +{ + return aspect<QtSupport::QmlDebuggingAspect>()->value(); +} + // --------------------------------------------------------------------------- // QbsBuildConfigurationFactory: // --------------------------------------------------------------------------- diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h index a19c52fd997..01edafc3218 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.h @@ -44,6 +44,11 @@ class QbsBuildConfiguration : public ProjectExplorer::BuildConfiguration { Q_OBJECT + // used in DebuggerRunConfigurationAspect + Q_PROPERTY(bool linkQmlDebuggingLibrary + READ isQmlDebuggingEnabled + NOTIFY qbsConfigurationChanged) + friend class ProjectExplorer::BuildConfigurationFactory; QbsBuildConfiguration(ProjectExplorer::Target *target, Core::Id id); ~QbsBuildConfiguration() final; @@ -69,6 +74,8 @@ public: QString configurationName() const; QString equivalentCommandLine(const ProjectExplorer::BuildStep *buildStep) const; + bool isQmlDebuggingEnabled() const; + signals: void qbsConfigurationChanged(); diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index d86a4c68d8e..45d9b4f63db 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -43,7 +43,6 @@ #include <utils/pathchooser.h> #include <utils/qtcassert.h> #include <utils/qtcprocess.h> -#include <utils/utilsicons.h> #include <QBoxLayout> #include <QCheckBox> @@ -82,7 +81,6 @@ public: private: void updateState(); - void updateQmlDebuggingOption(); void updatePropertyEdit(const QVariantMap &data); void changeBuildVariant(int); @@ -98,9 +96,6 @@ private: QbsBuildStep *qbsStep() const; - // QML debugging: - void linkQmlDebuggingLibraryChecked(bool checked); - bool validateProperties(Utils::FancyLineEdit *edit, QString *errorMessage); class Property @@ -127,11 +122,8 @@ private: QComboBox *buildVariantComboBox; QSpinBox *jobSpinBox; - QCheckBox *qmlDebuggingLibraryCheckBox; FancyLineEdit *propertyEdit; PathChooser *installDirChooser; - QLabel *qmlDebuggingWarningIcon; - QLabel *qmlDebuggingWarningText; QCheckBox *keepGoingCheckBox; QCheckBox *showCommandLinesCheckBox; QCheckBox *forceProbesCheckBox; @@ -146,8 +138,7 @@ private: // -------------------------------------------------------------------- QbsBuildStep::QbsBuildStep(ProjectExplorer::BuildStepList *bsl) : - ProjectExplorer::BuildStep(bsl, Constants::QBS_BUILDSTEP_ID), - m_enableQmlDebugging(QtSupport::BaseQtVersion::isQmlDebuggingSupported(target()->kit())) + ProjectExplorer::BuildStep(bsl, Constants::QBS_BUILDSTEP_ID) { setDisplayName(tr("Qbs Build")); setQbsConfiguration(QVariantMap()); @@ -222,7 +213,7 @@ QVariantMap QbsBuildStep::qbsConfiguration(VariableHandling variableHandling) co { QVariantMap config = m_qbsConfiguration; config.insert(Constants::QBS_FORCE_PROBES_KEY, m_forceProbes); - if (m_enableQmlDebugging) + if (static_cast<QbsBuildConfiguration *>(buildConfiguration())->isQmlDebuggingEnabled()) config.insert(Constants::QBS_CONFIG_QUICK_DEBUG_KEY, true); else config.remove(Constants::QBS_CONFIG_QUICK_DEBUG_KEY); @@ -278,7 +269,6 @@ int QbsBuildStep::maxJobs() const } static QString forceProbesKey() { return QLatin1String("Qbs.forceProbesKey"); } -static QString enableQmlDebuggingKey() { return QLatin1String("Qbs.enableQmlDebuggingKey"); } bool QbsBuildStep::fromMap(const QVariantMap &map) { @@ -292,7 +282,6 @@ bool QbsBuildStep::fromMap(const QVariantMap &map) m_install = map.value(QBS_INSTALL, true).toBool(); m_cleanInstallDir = map.value(QBS_CLEAN_INSTALL_ROOT).toBool(); m_forceProbes = map.value(forceProbesKey()).toBool(); - m_enableQmlDebugging = map.value(enableQmlDebuggingKey()).toBool(); return true; } @@ -306,7 +295,6 @@ QVariantMap QbsBuildStep::toMap() const map.insert(QBS_INSTALL, m_install); map.insert(QBS_CLEAN_INSTALL_ROOT, m_cleanInstallDir); map.insert(forceProbesKey(), m_forceProbes); - map.insert(enableQmlDebuggingKey(), m_enableQmlDebugging); return map; } @@ -532,7 +520,8 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) : { connect(step, &ProjectConfiguration::displayNameChanged, this, &QbsBuildStepConfigWidget::updateState); - connect(step, &QbsBuildStep::qbsConfigurationChanged, + connect(static_cast<QbsBuildConfiguration *>(step->buildConfiguration()), + &QbsBuildConfiguration::qbsConfigurationChanged, this, &QbsBuildStepConfigWidget::updateState); connect(step, &QbsBuildStep::qbsBuildOptionsChanged, this, &QbsBuildStepConfigWidget::updateState); @@ -563,22 +552,9 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) : horizontalLayout_6->addWidget(jobSpinBox); horizontalLayout_6->addItem(new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum)); - qmlDebuggingLibraryCheckBox = new QCheckBox(this); - qmlDebuggingWarningIcon = new QLabel(this); - qmlDebuggingWarningText = new QLabel(this); - - auto qmlDebuggingLayout = new QHBoxLayout(); - qmlDebuggingLayout->addWidget(qmlDebuggingLibraryCheckBox); - qmlDebuggingLayout->addWidget(qmlDebuggingWarningIcon); - qmlDebuggingLayout->addWidget(qmlDebuggingWarningText); - qmlDebuggingLayout->addItem(new QSpacerItem(40, 5, QSizePolicy::Expanding, QSizePolicy::Minimum)); - propertyEdit = new FancyLineEdit(this); - keepGoingCheckBox = new QCheckBox(this); - showCommandLinesCheckBox = new QCheckBox(this); - forceProbesCheckBox = new QCheckBox(this); auto flagsLayout = new QHBoxLayout(); @@ -610,7 +586,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) : auto formLayout = new QFormLayout(this); formLayout->addRow(tr("Build variant:"), horizontalLayout_5); formLayout->addRow(tr("Parallel jobs:"), horizontalLayout_6); - formLayout->addRow(tr("Enable QML debugging:"), qmlDebuggingLayout); formLayout->addRow(tr("Properties:"), propertyEdit); formLayout->addRow(tr("Flags:"), flagsLayout); formLayout->addRow(tr("Installation flags:"), installLayout); @@ -618,8 +593,7 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) : formLayout->addRow(tr("Equivalent command line:"), commandLineTextEdit); QWidget::setTabOrder(buildVariantComboBox, jobSpinBox); - QWidget::setTabOrder(jobSpinBox, qmlDebuggingLibraryCheckBox); - QWidget::setTabOrder(qmlDebuggingLibraryCheckBox, propertyEdit); + QWidget::setTabOrder(jobSpinBox, propertyEdit); QWidget::setTabOrder(propertyEdit, keepGoingCheckBox); QWidget::setTabOrder(keepGoingCheckBox, showCommandLinesCheckBox); QWidget::setTabOrder(showCommandLinesCheckBox, forceProbesCheckBox); @@ -647,8 +621,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) : return validateProperties(edit, errorMessage); }); - qmlDebuggingWarningIcon->setPixmap(Utils::Icons::WARNING.pixmap()); - connect(buildVariantComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &QbsBuildStepConfigWidget::changeBuildVariant); @@ -668,8 +640,6 @@ QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) : &QbsBuildStepConfigWidget::changeInstallDir); connect(forceProbesCheckBox, &QCheckBox::toggled, this, &QbsBuildStepConfigWidget::changeForceProbes); - connect(qmlDebuggingLibraryCheckBox, &QAbstractButton::toggled, - this, &QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked); updateState(); } @@ -683,43 +653,27 @@ void QbsBuildStepConfigWidget::updateState() cleanInstallRootCheckBox->setChecked(qbsStep()->cleanInstallRoot()); forceProbesCheckBox->setChecked(qbsStep()->forceProbes()); updatePropertyEdit(qbsStep()->qbsConfiguration(QbsBuildStep::PreserveVariables)); - qmlDebuggingLibraryCheckBox->setChecked(qbsStep()->isQmlDebuggingEnabled()); installDirChooser->setFileName(qbsStep()->installRoot(QbsBuildStep::PreserveVariables)); defaultInstallDirCheckBox->setChecked(!qbsStep()->hasCustomInstallRoot()); } - updateQmlDebuggingOption(); - const QString buildVariant = qbsStep()->buildVariant(); const int idx = (buildVariant == Constants::QBS_VARIANT_DEBUG) ? 0 : 1; buildVariantComboBox->setCurrentIndex(idx); - QString command = static_cast<QbsBuildConfiguration *>(step()->buildConfiguration()) - ->equivalentCommandLine(qbsStep()); + const auto qbsBuildConfig = static_cast<QbsBuildConfiguration *>(step()->buildConfiguration()); + QString command = qbsBuildConfig->equivalentCommandLine(qbsStep()); for (int i = 0; i < m_propertyCache.count(); ++i) { command += ' ' + m_propertyCache.at(i).name + ':' + m_propertyCache.at(i).effectiveValue; } - if (qbsStep()->isQmlDebuggingEnabled()) + if (qbsBuildConfig->isQmlDebuggingEnabled()) command.append(' ').append(Constants::QBS_CONFIG_QUICK_DEBUG_KEY).append(":true"); commandLineTextEdit->setPlainText(command); setSummaryText(tr("<b>Qbs:</b> %1").arg(command)); } -void QbsBuildStepConfigWidget::updateQmlDebuggingOption() -{ - QString warningText; - bool supported = QtSupport::BaseQtVersion::isQmlDebuggingSupported(step()->target()->kit(), - &warningText); - qmlDebuggingLibraryCheckBox->setEnabled(supported); - - if (supported && qbsStep()->isQmlDebuggingEnabled()) - warningText = tr("Might make your application vulnerable. Only use in a safe environment."); - - qmlDebuggingWarningText->setText(warningText); - qmlDebuggingWarningIcon->setVisible(!warningText.isEmpty()); -} void QbsBuildStepConfigWidget::updatePropertyEdit(const QVariantMap &data) { @@ -852,13 +806,6 @@ QbsBuildStep *QbsBuildStepConfigWidget::qbsStep() const return static_cast<QbsBuildStep *>(step()); } -void QbsBuildStepConfigWidget::linkQmlDebuggingLibraryChecked(bool checked) -{ - m_ignoreChange = true; - qbsStep()->setQmlDebuggingEnabled(checked); - m_ignoreChange = false; -} - bool QbsBuildStepConfigWidget::validateProperties(Utils::FancyLineEdit *edit, QString *errorMessage) { Utils::QtcProcess::SplitError err; diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h index 5cd6199aa57..dc85d255a58 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.h +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h @@ -44,10 +44,6 @@ class QbsBuildStep : public ProjectExplorer::BuildStep { Q_OBJECT - // used in DebuggerRunConfigurationAspect - Q_PROPERTY(bool linkQmlDebuggingLibrary READ isQmlDebuggingEnabled - WRITE setQmlDebuggingEnabled NOTIFY qbsConfigurationChanged) - public: enum VariableHandling { @@ -73,12 +69,6 @@ public: void setForceProbes(bool force) { m_forceProbes = force; emit qbsConfigurationChanged(); } bool forceProbes() const { return m_forceProbes; } - void setQmlDebuggingEnabled(bool debug) { - m_enableQmlDebugging = debug; - emit qbsConfigurationChanged(); - } - bool isQmlDebuggingEnabled() const { return m_enableQmlDebugging; } - QbsBuildSystem *qbsBuildSystem() const; signals: @@ -129,7 +119,6 @@ private: bool m_install = true; bool m_cleanInstallDir = false; bool m_forceProbes = false; - bool m_enableQmlDebugging; // Temporary data: QStringList m_changedFiles; diff --git a/src/plugins/qtsupport/CMakeLists.txt b/src/plugins/qtsupport/CMakeLists.txt index 80c54bd06fb..0f032ac76c6 100644 --- a/src/plugins/qtsupport/CMakeLists.txt +++ b/src/plugins/qtsupport/CMakeLists.txt @@ -13,6 +13,7 @@ add_qtc_plugin(QtSupport profilereader.cpp profilereader.h qmldumptool.cpp qmldumptool.h qscxmlcgenerator.cpp qscxmlcgenerator.h + qtbuildaspects.cpp qtbuildaspects.h qtconfigwidget.cpp qtconfigwidget.h qtcppkitinfo.cpp qtcppkitinfo.h qtkitinformation.cpp qtkitinformation.h diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 23fe51d5440..54811a92fa4 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1937,7 +1937,7 @@ bool BaseQtVersion::isSubProject(const FilePath &filePath) const return false; } -bool BaseQtVersion::isQmlDebuggingSupported(Kit *k, QString *reason) +bool BaseQtVersion::isQmlDebuggingSupported(const Kit *k, QString *reason) { QTC_ASSERT(k, return false); BaseQtVersion *version = QtKitAspect::qtVersion(k); diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 80489d1bb9d..ce50c34ba40 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -174,7 +174,7 @@ public: /// warnings and finally info items. ProjectExplorer::Tasks reportIssues(const QString &proFile, const QString &buildDir) const; - static bool isQmlDebuggingSupported(ProjectExplorer::Kit *k, QString *reason = nullptr); + static bool isQmlDebuggingSupported(const ProjectExplorer::Kit *k, QString *reason = nullptr); bool isQmlDebuggingSupported(QString *reason = nullptr) const; static bool isQtQuickCompilerSupported(ProjectExplorer::Kit *k, QString *reason = nullptr); bool isQtQuickCompilerSupported(QString *reason = nullptr) const; diff --git a/src/plugins/qtsupport/qtbuildaspects.cpp b/src/plugins/qtsupport/qtbuildaspects.cpp new file mode 100644 index 00000000000..5c8a400499b --- /dev/null +++ b/src/plugins/qtsupport/qtbuildaspects.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2019 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 "qtbuildaspects.h" + +#include "baseqtversion.h" + +#include <projectexplorer/kitmanager.h> +#include <utils/utilsicons.h> + +#include <QCheckBox> +#include <QLabel> +#include <QLayout> + +using namespace ProjectExplorer; + +namespace QtSupport { + +QmlDebuggingAspect::QmlDebuggingAspect() : BaseBoolAspect("EnableQmlDebugging") +{ + setDefaultValue(true); + setLabel(tr("Enable QML debugging and profiling")); +} + +void QmlDebuggingAspect::addToLayout(LayoutBuilder &builder) +{ + BaseBoolAspect::addToLayout(builder); + const auto warningIconLabel = new QLabel; + warningIconLabel->setAlignment(Qt::AlignTop); + warningIconLabel->setPixmap(Utils::Icons::WARNING.pixmap()); + const auto warningTextLabel = new QLabel; + warningTextLabel->setAlignment(Qt::AlignTop); + builder.startNewRow().addItems(QString(), warningIconLabel, warningTextLabel); + const auto changeHandler = [this, warningIconLabel, warningTextLabel] { + QString warningText; + const bool supported = m_kit && BaseQtVersion::isQmlDebuggingSupported(m_kit, &warningText); + if (!supported) { + setValue(false); + } else if (value()) { + warningText = tr("Might make your application vulnerable.<br/>" + "Only use in a safe environment."); + } + warningTextLabel->setText(warningText); + checkBox()->setVisible(supported); + warningIconLabel->setVisible(supported && !warningText.isEmpty()); + warningTextLabel->setVisible(supported); + }; + connect(KitManager::instance(), &KitManager::kitsChanged, builder.layout(), changeHandler); + connect(this, &QmlDebuggingAspect::changed, builder.layout(), changeHandler); + changeHandler(); +} + +} // namespace QtSupport diff --git a/src/plugins/qtsupport/qtbuildaspects.h b/src/plugins/qtsupport/qtbuildaspects.h new file mode 100644 index 00000000000..20c29fc8952 --- /dev/null +++ b/src/plugins/qtsupport/qtbuildaspects.h @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2019 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 "qtsupport_global.h" + +#include <projectexplorer/projectconfigurationaspects.h> + +namespace QtSupport { + +class QTSUPPORT_EXPORT QmlDebuggingAspect : public ProjectExplorer::BaseBoolAspect +{ + Q_OBJECT +public: + QmlDebuggingAspect(); + + void setKit(const ProjectExplorer::Kit *kit) { m_kit = kit; } + +private: + void addToLayout(ProjectExplorer::LayoutBuilder &builder) override; + + const ProjectExplorer::Kit *m_kit = nullptr; +}; + +} // namespace QtSupport diff --git a/src/plugins/qtsupport/qtsupport.pro b/src/plugins/qtsupport/qtsupport.pro index eb0c78c8804..5cdbac964a9 100644 --- a/src/plugins/qtsupport/qtsupport.pro +++ b/src/plugins/qtsupport/qtsupport.pro @@ -11,6 +11,7 @@ HEADERS += \ codegensettings.h \ codegensettingspage.h \ gettingstartedwelcomepage.h \ + qtbuildaspects.h \ qtcppkitinfo.h \ qtprojectimporter.h \ qtsupportplugin.h \ @@ -39,6 +40,7 @@ SOURCES += \ codegensettings.cpp \ codegensettingspage.cpp \ gettingstartedwelcomepage.cpp \ + qtbuildaspects.cpp \ qtcppkitinfo.cpp \ qtprojectimporter.cpp \ qtsupportplugin.cpp \ diff --git a/src/plugins/qtsupport/qtsupport.qbs b/src/plugins/qtsupport/qtsupport.qbs index 40ff98448c8..ebb0838c3c6 100644 --- a/src/plugins/qtsupport/qtsupport.qbs +++ b/src/plugins/qtsupport/qtsupport.qbs @@ -66,6 +66,8 @@ Project { "codegensettingspage.cpp", "codegensettingspage.h", "codegensettingspagewidget.ui", + "qtbuildaspects.cpp", + "qtbuildaspects.h", "qtconfigwidget.cpp", "qtconfigwidget.h", "qtcppkitinfo.cpp", |