void Settings::setSetting(Settings::SettingsEnum setting, QVariant value) { bool setting_changed = true; if (settings_cache.contains(setting)) setting_changed = settings_cache.value(setting) != value; else setting_changed = QSettings().value(getSettingPath(setting), getDefaultValue(setting)) != value; if (setting_changed) { QSettings().setValue(getSettingPath(setting), value); settings_cache.clear(); emit settingsChanged(); } }
void Settings::remove(Settings::SettingsEnum setting) { QVariant value = getDefaultValue(setting); bool setting_changed = true; if (settings_cache.contains(setting)) setting_changed = settings_cache.value(setting) != value; else setting_changed = QSettings().value(getSettingPath(setting), value) != value; QSettings().remove(getSettingPath(setting)); if (setting_changed) { settings_cache.clear(); emit settingsChanged(); } }
void Settings::migrateSettings(QSettings& settings, QVariant version) { migrateValue("General/language", General_Language, settings); if (migrateValue("MapEditor/click_tolerance", MapEditor_ClickToleranceMM, settings)) settings.setValue(getSettingPath(MapEditor_ClickToleranceMM), Util::pixelToMMLogical(settings.value(getSettingPath(MapEditor_ClickToleranceMM)).toFloat())); if (migrateValue("MapEditor/snap_distance", MapEditor_SnapDistanceMM, settings)) settings.setValue(getSettingPath(MapEditor_SnapDistanceMM), Util::pixelToMMLogical(settings.value(getSettingPath(MapEditor_SnapDistanceMM)).toFloat())); if (migrateValue("RectangleTool/helper_cross_radius", RectangleTool_HelperCrossRadiusMM, settings)) settings.setValue(getSettingPath(RectangleTool_HelperCrossRadiusMM), Util::pixelToMMLogical(settings.value(getSettingPath(RectangleTool_HelperCrossRadiusMM)).toFloat())); if (!version.toByteArray().startsWith("0.")) { // Future cleanup settings.remove("new_ocd8_implementation"); } settings.setValue("version", version); }
QVariant Settings::getSettingCached(Settings::SettingsEnum setting) { if (settings_cache.contains(setting)) return settings_cache.value(setting); QSettings settings; QVariant value = settings.value(getSettingPath(setting), getDefaultValue(setting)); settings_cache.insert(setting, value); return value; }
bool Settings::migrateValue(const QString& old_key, SettingsEnum new_setting, QSettings& settings) const { bool value_migrated = false; if (settings.contains(old_key)) { const QString new_key = getSettingPath(new_setting); Q_ASSERT_X(new_key != old_key, "Settings::migrateValue", QString("New key \"%1\" equals old key").arg(new_key).toLocal8Bit().constData() ); if (!settings.contains(new_key)) { settings.setValue(new_key, settings.value(old_key)); value_migrated = true; } settings.remove(old_key); } return value_migrated; }
bool Settings::migrateValue(const char* old_key_latin1, SettingsEnum new_setting, QSettings& settings) const { auto old_key = QString::fromLatin1(old_key_latin1); bool value_migrated = false; if (settings.contains(old_key)) { const QString new_key = getSettingPath(new_setting); Q_ASSERT_X(new_key != old_key, "Settings::migrateValue", qPrintable(QString::fromLatin1("New key \"%1\" equals old key").arg(new_key)) ); if (!settings.contains(new_key)) { settings.setValue(new_key, settings.value(old_key)); value_migrated = true; } settings.remove(old_key); } return value_migrated; }
QVariant Settings::getSetting(Settings::SettingsEnum setting) const { QSettings settings; return settings.value(getSettingPath(setting), getDefaultValue(setting)); }