diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index cec02706263..bd605f7c2d9 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -135,6 +135,7 @@ private: void batchEditConfiguration(); void reconfigureWithInitialParameters(CMakeBuildConfiguration *bc); void updateInitialCMakeArguments(); + void kitCMakeConfiguration(); CMakeBuildConfiguration *m_buildConfiguration; QTreeView *m_configView; @@ -155,6 +156,7 @@ private: InfoLabel *m_warningMessageLabel; QPushButton *m_batchEditButton = nullptr; + QPushButton *m_kitConfiguration = nullptr; }; static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex &idx) @@ -220,6 +222,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) updateConfigurationStateIndex(index); }); + m_kitConfiguration = new QPushButton(tr("Kit Configuration")); + m_kitConfiguration->setToolTip(tr("Edit the current kit's CMake configuration.")); + m_kitConfiguration->setFixedWidth(m_kitConfiguration->sizeHint().width()); + connect(m_kitConfiguration, &QPushButton::clicked, this, [this]() { kitCMakeConfiguration(); }); + m_filterEdit = new FancyLineEdit; m_filterEdit->setPlaceholderText(tr("Filter")); m_filterEdit->setFiltering(true); @@ -333,7 +340,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc) }, m_warningMessageLabel, Space(10), - m_configurationStates, + Row{m_kitConfiguration, m_configurationStates}, Group { cmakeConfiguration, Row { @@ -603,6 +610,38 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments() m_buildConfiguration->aspect()->value())); } +void CMakeBuildSettingsWidget::kitCMakeConfiguration() +{ + m_buildConfiguration->kit()->blockNotification(); + + auto dialog = new QDialog(this); + dialog->setWindowTitle(tr("Kit CMake Configuration")); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->setModal(true); + connect(dialog, &QDialog::finished, this, [=]{ + m_buildConfiguration->kit()->unblockNotification(); + }); + + CMakeKitAspect kitAspect; + CMakeGeneratorKitAspect generatorAspect; + CMakeConfigurationKitAspect configurationKitAspect; + + auto layout = new QGridLayout(dialog); + + kitAspect.createConfigWidget(m_buildConfiguration->kit()) + ->addToLayoutWithLabel(layout->parentWidget()); + generatorAspect.createConfigWidget(m_buildConfiguration->kit()) + ->addToLayoutWithLabel(layout->parentWidget()); + configurationKitAspect.createConfigWidget(m_buildConfiguration->kit()) + ->addToLayoutWithLabel(layout->parentWidget()); + + layout->setColumnStretch(1, 1); + + dialog->setMinimumWidth(400); + dialog->resize(800, 1); + dialog->show(); +} + void CMakeBuildSettingsWidget::setError(const QString &message) { m_buildConfiguration->buildDirectoryAspect()->setProblem(message);