CMakePM: Add "Kit Configuration" button in Settings page

This "Kit Configuration" button opens a dialog with the kit's
CMake settings.

This way a user can change all CMake related settings in the
project's Settings page.

Change-Id: I76b6e69ea7a9b96823f6583aef007cf413410407
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Cristian Adam
2022-01-29 15:03:54 +01:00
parent b243a8d728
commit 633a9a04e2

View File

@@ -135,6 +135,7 @@ private:
void batchEditConfiguration(); void batchEditConfiguration();
void reconfigureWithInitialParameters(CMakeBuildConfiguration *bc); void reconfigureWithInitialParameters(CMakeBuildConfiguration *bc);
void updateInitialCMakeArguments(); void updateInitialCMakeArguments();
void kitCMakeConfiguration();
CMakeBuildConfiguration *m_buildConfiguration; CMakeBuildConfiguration *m_buildConfiguration;
QTreeView *m_configView; QTreeView *m_configView;
@@ -155,6 +156,7 @@ private:
InfoLabel *m_warningMessageLabel; InfoLabel *m_warningMessageLabel;
QPushButton *m_batchEditButton = nullptr; QPushButton *m_batchEditButton = nullptr;
QPushButton *m_kitConfiguration = nullptr;
}; };
static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex &idx) static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex &idx)
@@ -220,6 +222,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
updateConfigurationStateIndex(index); 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 = new FancyLineEdit;
m_filterEdit->setPlaceholderText(tr("Filter")); m_filterEdit->setPlaceholderText(tr("Filter"));
m_filterEdit->setFiltering(true); m_filterEdit->setFiltering(true);
@@ -333,7 +340,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
}, },
m_warningMessageLabel, m_warningMessageLabel,
Space(10), Space(10),
m_configurationStates, Row{m_kitConfiguration, m_configurationStates},
Group { Group {
cmakeConfiguration, cmakeConfiguration,
Row { Row {
@@ -603,6 +610,38 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments()
m_buildConfiguration->aspect<InitialCMakeArgumentsAspect>()->value())); m_buildConfiguration->aspect<InitialCMakeArgumentsAspect>()->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) void CMakeBuildSettingsWidget::setError(const QString &message)
{ {
m_buildConfiguration->buildDirectoryAspect()->setProblem(message); m_buildConfiguration->buildDirectoryAspect()->setProblem(message);