Settings: save values to queue as they are requested

UBSettings::value() now saves the requested value to the settings
"queue" (hash table) for faster subsequent access
preferencesAboutTextFull
Craig Watson 8 years ago
parent 599f925d58
commit 85acf0d643
  1. 25
      src/core/UBSettings.cpp
  2. 2
      src/core/UBSettings.h

@ -426,8 +426,14 @@ void UBSettings::init()
/**
* @brief Returns the value for the *key* setting, or *defaultValue* if the key doesn't exist
*
* The value is also added to the local settings queue, to prevent future disk I/O when accessing
* that same setting.
*
* If the value doesn't exist in the application settings (i.e it was not present in the config file),
* it is also added there.
*/
QVariant UBSettings::value ( const QString & key, const QVariant & defaultValue) const
QVariant UBSettings::value ( const QString & key, const QVariant & defaultValue)
{
// Check first the settings queue, then the app settings, then the user settings.
// If the key exists in neither of these, then defaultValue is returned.
@ -435,10 +441,17 @@ QVariant UBSettings::value ( const QString & key, const QVariant & defaultValue)
if (mSettingsQueue.contains(key))
return mSettingsQueue.value(key);
// If the setting doesn't exist in the App settings, add it there
if (!sAppSettings->contains(key) && !(defaultValue == QVariant()))
sAppSettings->setValue(key, defaultValue);
return mUserSettings->value(key, sAppSettings->value(key, defaultValue));
QVariant val = mUserSettings->value(key, sAppSettings->value(key, defaultValue));
// If we got here, then the settings queue doesn't contain the value; add it
mSettingsQueue[key] = val;
return val;
}
@ -453,8 +466,6 @@ void UBSettings::setValue (const QString & key, const QVariant & value)
*/
void UBSettings::save()
{
// TODO: move this to a thread if it is too slow
QHash<QString, QVariant>::const_iterator it = mSettingsQueue.constBegin();
while (it != mSettingsQueue.constEnd()) {
@ -480,9 +491,9 @@ void UBSettings::load()
keyList.removeDuplicates();
foreach(const QString& key, keyList) {
QVariant val = mUserSettings->value(key);
if (val != QVariant())
setValue(key, val);
value(key);
// value() actually handles saving the value to the queue, so
// we don't need to do it here
}
}

@ -399,7 +399,7 @@ class UBSettings : public QObject
void setPenPressureSensitive(bool sensitive);
void setMarkerPressureSensitive(bool sensitive);
QVariant value ( const QString & key, const QVariant & defaultValue = QVariant() ) const;
QVariant value ( const QString & key, const QVariant & defaultValue = QVariant() );
void setValue (const QString & key,const QVariant & value);
void colorChanged() { emit colorContextChanged(); }

Loading…
Cancel
Save