/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #include "QCMakePresetComboBox.h" #include "QCMakePresetItemModel.h" QCMakePresetComboBox::QCMakePresetComboBox(QWidget* parent) : QComboBox(parent) { this->m_model = new QCMakePresetItemModel(this); this->setModel(this->m_model); QObject::connect(this->m_model, &QCMakePresetItemModel::modelAboutToBeReset, this, [this]() { this->m_resetting = true; }); QObject::connect(this->m_model, &QCMakePresetItemModel::modelReset, this, [this]() { this->setPresetName(this->m_lastPreset); this->m_resetting = false; this->emitPresetChanged(); }); QObject::connect( this, static_cast(&QComboBox::currentIndexChanged), this, [this](int /*row*/) { if (!this->m_resetting) { this->emitPresetChanged(); } }); } const QVector& QCMakePresetComboBox::presets() const { return this->m_model->presets(); } QString QCMakePresetComboBox::presetName() const { auto preset = this->currentData(); if (preset.canConvert()) { return preset.value().name; } return QString{}; } void QCMakePresetComboBox::setPresets(const QVector& presets) { this->m_model->setPresets(presets); } void QCMakePresetComboBox::setPresetName(const QString& name) { this->setCurrentIndex(this->m_model->presetNameToRow(name)); if (this->signalsBlocked()) { this->m_lastPreset = this->presetName(); } } void QCMakePresetComboBox::emitPresetChanged() { if (this->presetName() != this->m_lastPreset) { emit this->presetChanged(this->presetName()); this->m_lastPreset = this->presetName(); } }