You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.8 KiB
65 lines
1.8 KiB
/* 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<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
|
|
this, [this](int /*row*/) {
|
|
if (!this->m_resetting) {
|
|
this->emitPresetChanged();
|
|
}
|
|
});
|
|
}
|
|
|
|
const QVector<QCMakePreset>& QCMakePresetComboBox::presets() const
|
|
{
|
|
return this->m_model->presets();
|
|
}
|
|
|
|
QString QCMakePresetComboBox::presetName() const
|
|
{
|
|
auto preset = this->currentData();
|
|
if (preset.canConvert<QCMakePreset>()) {
|
|
return preset.value<QCMakePreset>().name;
|
|
}
|
|
return QString{};
|
|
}
|
|
|
|
void QCMakePresetComboBox::setPresets(const QVector<QCMakePreset>& 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();
|
|
}
|
|
}
|