Gui: support more parameter types in PrefComboBox

Using a user defined property 'prefType'
This commit is contained in:
Zheng, Lei
2022-11-24 07:11:52 +08:00
committed by Chris Hennes
parent b141f8f491
commit 0cfec4061a
2 changed files with 85 additions and 6 deletions

View File

@@ -144,6 +144,7 @@ void PrefWidget::onRestore()
qWarning( "No parameter group specified!" );
#endif
restorePreferences();
m_Restored = true;
}
void PrefWidget::failedToSave(const QString& name) const
@@ -346,6 +347,11 @@ PrefComboBox::~PrefComboBox()
{
}
QVariant::Type PrefComboBox::getParamType() const
{
return property("prefType").type();
}
void PrefComboBox::restorePreferences()
{
if (getWindowParameter().isNull())
@@ -353,9 +359,41 @@ void PrefComboBox::restorePreferences()
failedToRestore(objectName());
return;
}
int index = getWindowParameter()->GetInt(entryName(), currentIndex());
setCurrentIndex(index);
if (!m_Restored) {
m_Default = currentData();
m_DefaultText = currentText();
m_DefaultIndex = currentIndex();
}
int index = -1;
switch(static_cast<int>(getParamType())) {
case QMetaType::Int:
case QMetaType::LongLong:
index = findData(static_cast<int>(getWindowParameter()->GetInt(entryName(), m_Default.toInt())));
break;
case QMetaType::UInt:
case QMetaType::ULongLong:
index = findData(static_cast<uint>(getWindowParameter()->GetUnsigned(entryName(), m_Default.toUInt())));
break;
case QMetaType::Bool:
index = findData(getWindowParameter()->GetBool(entryName(), m_Default.toBool()));
break;
case QMetaType::Double:
index = findData(getWindowParameter()->GetFloat(entryName(), m_Default.toDouble()));
break;
case QMetaType::QString:
index = findText(QString::fromUtf8(
getWindowParameter()->GetASCII(entryName(), m_DefaultText.toUtf8().constData()).c_str()));
break;
case QMetaType::QByteArray:
index = findData(QByteArray(getWindowParameter()->GetASCII(entryName(),
m_Default.toByteArray().constData()).c_str()));
break;
default:
index = getWindowParameter()->GetInt(entryName(), m_DefaultIndex);
break;
}
if (index >= 0 && index < count())
setCurrentIndex(index);
}
void PrefComboBox::savePreferences()
@@ -366,7 +404,31 @@ void PrefComboBox::savePreferences()
return;
}
getWindowParameter()->SetInt(entryName() , currentIndex());
switch(static_cast<int>(getParamType())) {
case QMetaType::Int:
case QMetaType::LongLong:
getWindowParameter()->SetInt(entryName(), currentData().toInt());
break;
case QMetaType::UInt:
case QMetaType::ULongLong:
getWindowParameter()->SetUnsigned(entryName(), currentData().toUInt());
break;
case QMetaType::Bool:
getWindowParameter()->SetBool(entryName(), currentData().toBool());
break;
case QMetaType::Double:
getWindowParameter()->SetFloat(entryName(), currentData().toDouble());
break;
case QMetaType::QString:
getWindowParameter()->SetASCII(entryName(), currentText().toUtf8().constData());
break;
case QMetaType::QByteArray:
getWindowParameter()->SetASCII(entryName(), currentData().toByteArray().constData());
break;
default:
getWindowParameter()->SetInt(entryName(), currentIndex());
break;
}
}
// --------------------------------------------------------------------