x-tools/Source/Common/commonui/sakcombobox.cc
2024-03-19 14:47:44 +08:00

83 lines
2.0 KiB
C++

/***************************************************************************************************
* Copyright 2023 Qsaker(qsaker@foxmail.com). All rights reserved.
*
* The file is encoded using "utf8 with bom", it is a part of QtSwissArmyKnife project.
*
* QtSwissArmyKnife is licensed according to the terms in the file LICENCE in the root of the source
* code directory.
**************************************************************************************************/
#include "sakcombobox.h"
#include <QLineEdit>
#include "saksettings.h"
SAKComboBox::SAKComboBox(QWidget* parent)
: QComboBox(parent)
{
connect(this, &SAKComboBox::currentTextChanged, this, &SAKComboBox::writeToSettingsFile);
}
void SAKComboBox::setCurrentIndexFromData(const QVariant& data)
{
int ret = findData(data);
if (ret != -1) {
setCurrentIndex(ret);
}
}
void SAKComboBox::setGroupKey(const QString& group, const QString& key, bool isIndex)
{
mKey = group + "/" + key;
mIsIndex = isIndex;
readFromSettingsFile();
}
void SAKComboBox::readFromSettingsFile()
{
if (mKey.isEmpty()) {
return;
}
QVariant var = SAKSettings::instance()->value(mKey);
if (!var.isValid()) {
return;
}
if (mIsIndex) {
int index = var.toInt();
if (index >= 0 && index < count()) {
setCurrentIndex(index);
}
return;
}
int index = findData(var);
if (index >= 0 && index < count()) {
setCurrentIndex(index);
return;
}
if (isEditable()) {
setCurrentText(var.toString());
}
}
void SAKComboBox::writeToSettingsFile()
{
if (mKey.isEmpty()) {
return;
}
if (mIsIndex) {
SAKSettings::instance()->setValue(mKey, currentIndex());
} else {
if (isEditable()) {
SAKSettings::instance()->setValue(mKey, currentText());
} else {
SAKSettings::instance()->setValue(mKey, currentData());
}
}
}