From 6a00dcbf0a2c7ff6ed1dd8cdfe341e70e504cc9c Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 20 Jan 2015 00:30:29 -0800 Subject: [PATCH] More switches to new Settings --- domain-server/src/DomainServer.cpp | 6 +-- interface/src/Application.cpp | 33 ++++++++------- interface/src/MainWindow.cpp | 31 ++++---------- interface/src/ModelUploader.cpp | 12 +++--- interface/src/Util.cpp | 8 ---- interface/src/Util.h | 2 - interface/src/avatar/Avatar.cpp | 4 +- .../scripting/SettingsScriptingInterface.cpp | 6 +-- interface/src/ui/AnimationsDialog.cpp | 9 ++-- interface/src/ui/ChatWindow.cpp | 9 ++-- interface/src/ui/InfoView.cpp | 13 +++--- interface/src/ui/RearMirrorTools.cpp | 29 +++---------- interface/src/ui/RearMirrorTools.h | 16 +++++--- libraries/metavoxels/src/MetavoxelUtil.cpp | 8 +++- libraries/metavoxels/src/Spanner.cpp | 18 ++++---- libraries/networking/src/AccountManager.cpp | 15 +++---- libraries/networking/src/AddressManager.cpp | 21 +++++----- libraries/shared/src/Settings.cpp | 5 +++ libraries/shared/src/Settings.h | 41 ++++++++++++++++++- 19 files changed, 152 insertions(+), 134 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index f78c856a44..3686be0f00 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1921,10 +1921,8 @@ Headers DomainServer::setupCookieHeadersFromProfileReply(QNetworkReply* profileR _cookieSessionHash.insert(cookieUUID, sessionData); // persist the cookie to settings file so we can get it back on DS relaunch - QSettings localSettings; - localSettings.beginGroup(DS_SETTINGS_SESSIONS_GROUP); - QVariant sessionVariant = QVariant::fromValue(sessionData); - localSettings.setValue(cookieUUID.toString(), QVariant::fromValue(sessionData)); + QStringList path = QStringList() << DS_SETTINGS_SESSIONS_GROUP << cookieUUID.toString(); + SettingHandles::SettingHandle(path).set(QVariant::fromValue(sessionData)); // setup expiry for cookie to 1 month from today QDateTime cookieExpiry = QDateTime::currentDateTimeUtc().addMonths(1); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a5ca0a10f9..94f7430f92 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #include #include #include @@ -146,6 +145,12 @@ const QString SKIP_FILENAME = QStandardPaths::writableLocation(QStandardPaths::D const QString DEFAULT_SCRIPTS_JS_URL = "http://s3.amazonaws.com/hifi-public/scripts/defaultScripts.js"; +namespace SettingHandles { + const SettingHandle firstRun("firstRun", true); + const SettingHandle lastScriptLocation("LastScriptLocation"); + const SettingHandle scriptsLocation("scriptsLocation"); +} + void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { QString logMessage = LogHandler::getInstance().printMessage((LogMsgType) type, context, message); @@ -428,21 +433,19 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : connect(this, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit())); // check first run... - Settings settings; - QString firstRunKey = "firstRun"; - QVariant firstRunValue = settings.value(firstRunKey, true); - if (firstRunValue.isValid() && firstRunValue.toBool()) { + bool firstRun = SettingHandles::firstRun.get(); + if (firstRun) { qDebug() << "This is a first run..."; // clear the scripts, and set out script to our default scripts clearScriptsBeforeRunning(); loadScript(DEFAULT_SCRIPTS_JS_URL); - settings.setValue(firstRunKey, false); + SettingHandles::firstRun.set(false); } else { // do this as late as possible so that all required subsystems are initialized loadScripts(); - _previousScriptLocation = settings.value("LastScriptLocation", "").toString(); + _previousScriptLocation = SettingHandles::lastScriptLocation.get(); } _trayIcon->show(); @@ -2968,7 +2971,7 @@ void Application::renderRearViewMirror(const QRect& region, bool billboard) { _mirrorCamera.setPosition(_myAvatar->getPosition() + _myAvatar->getOrientation() * glm::vec3(0.0f, 0.0f, -1.0f) * BILLBOARD_DISTANCE * _myAvatar->getScale()); - } else if (_rearMirrorTools->getZoomLevel() == BODY) { + } else if (SettingHandles::rearViewZoomLevel.get() == BODY) { _mirrorCamera.setFieldOfView(MIRROR_FIELD_OF_VIEW); // degrees _mirrorCamera.setPosition(_myAvatar->getChestPosition() + _myAvatar->getOrientation() * glm::vec3(0.0f, 0.0f, -1.0f) * MIRROR_REARVIEW_BODY_DISTANCE * _myAvatar->getScale()); @@ -3365,10 +3368,12 @@ void Application::packetSent(quint64 length) { _bandwidthMeter.outputStream(BandwidthMeter::OCTREE).updateValue(length); } +const QString SETTINGS_KEY = "Settings"; + void Application::loadScripts() { // loads all saved scripts Settings settings; - int size = settings.beginReadArray("Settings"); + int size = settings.beginReadArray(SETTINGS_KEY); for (int i = 0; i < size; ++i){ settings.setArrayIndex(i); QString string = settings.value("script").toString(); @@ -3381,7 +3386,7 @@ void Application::loadScripts() { void Application::clearScriptsBeforeRunning() { // clears all scripts from the settings - Settings().remove("Settings"); + SettingHandles::SettingHandle(SETTINGS_KEY).remove(); } void Application::saveScripts() { @@ -3392,7 +3397,7 @@ void Application::saveScripts() { // Saves all currently running user-loaded scripts Settings settings; - settings.beginWriteArray("Settings"); + settings.beginWriteArray(SETTINGS_KEY); int i = 0; for (auto it = runningScripts.begin(); it != runningScripts.end(); ++it) { if (getScriptEngine(*it)->isUserLoaded()) { @@ -3708,7 +3713,7 @@ QString Application::getPreviousScriptLocation() { void Application::setPreviousScriptLocation(const QString& previousScriptLocation) { _previousScriptLocation = previousScriptLocation; - Settings().setValue("LastScriptLocation", _previousScriptLocation); + SettingHandles::lastScriptLocation.set(_previousScriptLocation); } void Application::loadDialog() { @@ -3744,11 +3749,11 @@ void Application::loadScriptURLDialog() { } QString Application::getScriptsLocation() const { - return Settings().value("scriptsLocation", QString()).toString(); + return SettingHandles::scriptsLocation.get(); } void Application::setScriptsLocation(const QString& scriptsLocation) { - Settings().setValue("scriptsLocation", scriptsLocation); + SettingHandles::scriptsLocation.set(scriptsLocation); emit scriptLocationChanged(scriptsLocation); } diff --git a/interface/src/MainWindow.cpp b/interface/src/MainWindow.cpp index a79c6a500f..9f1f258efc 100644 --- a/interface/src/MainWindow.cpp +++ b/interface/src/MainWindow.cpp @@ -24,37 +24,20 @@ #include "Menu.h" #include "Util.h" +namespace SettingHandles { + const SettingHandle windowGeometry("WindowGeometry", qApp->desktop()->availableGeometry()); +} + + MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) { } void MainWindow::restoreGeometry() { - QRect available = qApp->desktop()->availableGeometry(); - - Settings settings; - settings.beginGroup("Window"); - - int x = (int)loadSetting(&settings, "x", 0); - int y = (int)loadSetting(&settings, "y", 0); - move(x, y); - - int width = (int)loadSetting(&settings, "width", available.width()); - int height = (int)loadSetting(&settings, "height", available.height()); - resize(width, height); - - settings.endGroup(); + setGeometry(SettingHandles::windowGeometry.get(qApp->desktop()->availableGeometry())); } void MainWindow::saveGeometry() { - Settings settings; - settings.beginGroup("Window"); - - settings.setValue("width", rect().width()); - settings.setValue("height", rect().height()); - - settings.setValue("x", pos().x()); - settings.setValue("y", pos().y()); - - settings.endGroup(); + SettingHandles::windowGeometry.set(geometry()); } void MainWindow::moveEvent(QMoveEvent* event) { diff --git a/interface/src/ModelUploader.cpp b/interface/src/ModelUploader.cpp index 7308339584..c7e6cccf51 100644 --- a/interface/src/ModelUploader.cpp +++ b/interface/src/ModelUploader.cpp @@ -60,8 +60,6 @@ static const QString BLENDSHAPE_FIELD = "bs"; static const QString S3_URL = "http://public.highfidelity.io"; static const QString MODEL_URL = "/api/v1/models"; -static const QString SETTING_NAME = "LastModelUploadLocation"; - static const unsigned long long MAX_SIZE = 50 * 1024 * BYTES_PER_MEGABYTES; // 50 GB (Virtually remove limit) static const int MAX_TEXTURE_SIZE = 1024; static const int TIMEOUT = 1000; @@ -70,6 +68,11 @@ static const int MAX_CHECK = 30; static const int QCOMPRESS_HEADER_POSITION = 0; static const int QCOMPRESS_HEADER_SIZE = 4; +namespace SettingHandles { + const SettingHandle lastModelUploadLocation("LastModelUploadLocation", + QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)); +} + void ModelUploader::uploadModel(ModelType modelType) { ModelUploader* uploader = new ModelUploader(modelType); QThread* thread = new QThread(); @@ -114,8 +117,7 @@ ModelUploader::~ModelUploader() { bool ModelUploader::zip() { // File Dialog - Settings settings; - QString lastLocation = settings.value(SETTING_NAME).toString(); + QString lastLocation = SettingHandles::lastModelUploadLocation.get(); if (lastLocation.isEmpty()) { lastLocation = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); @@ -132,7 +134,7 @@ bool ModelUploader::zip() { // If the user canceled we return. return false; } - settings.setValue(SETTING_NAME, filename); + SettingHandles::lastModelUploadLocation.set(filename); // First we check the FST file (if any) QFile* fst; diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 2580f8e445..79ea6b6924 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -238,14 +238,6 @@ void runTimingTests() { qDebug("vec3 assign and dot() usecs: %f, last result:%f", elapsedUsecs / (float) numTests, result); } -float loadSetting(QSettings* settings, const char* name, float defaultValue) { - float value = settings->value(name, defaultValue).toFloat(); - if (glm::isnan(value)) { - value = defaultValue; - } - return value; -} - bool rayIntersectsSphere(const glm::vec3& rayStarting, const glm::vec3& rayNormalizedDirection, const glm::vec3& sphereCenter, float sphereRadius, float& distance) { glm::vec3 relativeOrigin = rayStarting - sphereCenter; diff --git a/interface/src/Util.h b/interface/src/Util.h index 74336168c0..524216f527 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -31,8 +31,6 @@ void renderBevelCornersRect(int x, int y, int width, int height, int bevelDistan void runTimingTests(); -float loadSetting(QSettings* settings, const char* name, float defaultValue); - bool rayIntersectsSphere(const glm::vec3& rayStarting, const glm::vec3& rayNormalizedDirection, const glm::vec3& sphereCenter, float sphereRadius, float& distance); diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 1f9796aa3f..033b8b8ddf 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -115,8 +115,8 @@ glm::quat Avatar::getWorldAlignedOrientation () const { } float Avatar::getLODDistance() const { - return DependencyManager::get()->getAvatarLODDistanceMultiplier() * - glm::distance(Application::getInstance()->getCamera()->getPosition(), _position) / _scale; + return SettingHandles::avatarLODDistanceMultiplier.get() * + glm::distance(qApp->getCamera()->getPosition(), _position) / _scale; } void Avatar::simulate(float deltaTime) { diff --git a/interface/src/scripting/SettingsScriptingInterface.cpp b/interface/src/scripting/SettingsScriptingInterface.cpp index b3ac97b7e3..a73bdf41f6 100644 --- a/interface/src/scripting/SettingsScriptingInterface.cpp +++ b/interface/src/scripting/SettingsScriptingInterface.cpp @@ -20,7 +20,7 @@ SettingsScriptingInterface* SettingsScriptingInterface::getInstance() { } QVariant SettingsScriptingInterface::getValue(const QString& setting) { - QVariant value = Settings().value(setting); + QVariant value = SettingHandles::SettingHandle(setting).get(); if (!value.isValid()) { value = ""; } @@ -28,7 +28,7 @@ QVariant SettingsScriptingInterface::getValue(const QString& setting) { } QVariant SettingsScriptingInterface::getValue(const QString& setting, const QVariant& defaultValue) { - QVariant value = Settings().value(setting, defaultValue); + QVariant value = SettingHandles::SettingHandle(setting, defaultValue).get(); if (!value.isValid()) { value = ""; } @@ -36,5 +36,5 @@ QVariant SettingsScriptingInterface::getValue(const QString& setting, const QVar } void SettingsScriptingInterface::setValue(const QString& setting, const QVariant& value) { - Settings().setValue(setting, value); + SettingHandles::SettingHandle(setting).set(value); } diff --git a/interface/src/ui/AnimationsDialog.cpp b/interface/src/ui/AnimationsDialog.cpp index 607b507318..74f6310ea1 100644 --- a/interface/src/ui/AnimationsDialog.cpp +++ b/interface/src/ui/AnimationsDialog.cpp @@ -26,6 +26,10 @@ #include "Application.h" #include "MainWindow.h" +namespace SettingHandles { + const SettingHandle animationDirectory("animation_directory", QString()); +} + AnimationsDialog::AnimationsDialog(QWidget* parent) : QDialog(parent) { @@ -159,13 +163,12 @@ AnimationPanel::AnimationPanel(AnimationsDialog* dialog, const AnimationHandlePo } void AnimationPanel::chooseURL() { - Settings settings; - QString directory = settings.value("animation_directory").toString(); + QString directory = SettingHandles::animationDirectory.get(); QString filename = QFileDialog::getOpenFileName(this, "Choose Animation", directory, "Animation files (*.fbx)"); if (filename.isEmpty()) { return; } - settings.setValue("animation_directory", QFileInfo(filename).path()); + SettingHandles::animationDirectory.set(QFileInfo(filename).path()); _url->setText(QUrl::fromLocalFile(filename).toString()); emit _url->returnPressed(); } diff --git a/interface/src/ui/ChatWindow.cpp b/interface/src/ui/ChatWindow.cpp index ca2a5d6416..dd1a73c5d2 100644 --- a/interface/src/ui/ChatWindow.cpp +++ b/interface/src/ui/ChatWindow.cpp @@ -42,6 +42,10 @@ const QRegularExpression regexHifiLinks("([#@]\\S+)"); const QString mentionSoundsPath("/mention-sounds/"); const QString mentionRegex("@(\\b%1\\b)"); +namespace SettingHandles { + const SettingHandle usernameMentionTimestamp("MentionTimestamp", QDateTime()); +} + ChatWindow::ChatWindow(QWidget* parent) : QWidget(parent, Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), @@ -378,10 +382,9 @@ void ChatWindow::messageReceived(const QXmppMessage& message) { if (message.body().contains(usernameMention)) { // Don't show messages already seen in icon tray at start-up. - Settings settings; - bool showMessage = settings.value("usernameMentionTimestamp").toDateTime() < _lastMessageStamp; + bool showMessage = SettingHandles::usernameMentionTimestamp.get() < _lastMessageStamp; if (showMessage) { - settings.setValue("usernameMentionTimestamp", _lastMessageStamp); + SettingHandles::usernameMentionTimestamp.set(_lastMessageStamp); } if (isHidden() && showMessage) { diff --git a/interface/src/ui/InfoView.cpp b/interface/src/ui/InfoView.cpp index dac3e318c7..1f2bddac5a 100644 --- a/interface/src/ui/InfoView.cpp +++ b/interface/src/ui/InfoView.cpp @@ -20,8 +20,11 @@ #include "InfoView.h" -#define SETTINGS_VERSION_KEY "info-version" -#define MAX_DIALOG_HEIGHT_RATIO 0.9 +static const float MAX_DIALOG_HEIGHT_RATIO = 0.9f; + +namespace SettingHandles { + const SettingHandle infoVersion("info-version", QString()); +} InfoView::InfoView(bool forced, QString path) : _forced(forced) @@ -49,15 +52,13 @@ bool InfoView::shouldShow() { return true; } - Settings settings; - - QString lastVersion = settings.value(SETTINGS_VERSION_KEY).toString(); + QString lastVersion = SettingHandles::infoVersion.get(); QWebElement versionTag = page()->mainFrame()->findFirstElement("#version"); QString version = versionTag.attribute("value"); if (version != QString::null && (lastVersion == QString::null || lastVersion != version)) { - settings.setValue(SETTINGS_VERSION_KEY, version); + SettingHandles::infoVersion.set(version); shouldShow = true; } else { shouldShow = false; diff --git a/interface/src/ui/RearMirrorTools.cpp b/interface/src/ui/RearMirrorTools.cpp index 47a34abade..da1c82494f 100644 --- a/interface/src/ui/RearMirrorTools.cpp +++ b/interface/src/ui/RearMirrorTools.cpp @@ -14,16 +14,12 @@ #include #include -#include #include #include "Application.h" #include "RearMirrorTools.h" #include "Util.h" - -const char SETTINGS_GROUP_NAME[] = "Rear View Tools"; -const char ZOOM_LEVEL_SETTINGS[] = "ZoomLevel"; const int ICON_SIZE = 24; const int ICON_PADDING = 5; @@ -56,8 +52,9 @@ void RearMirrorTools::render(bool fullScreen) { if (_windowed) { displayIcon(_bounds, _closeIconRect, _closeTextureId); - displayIcon(_bounds, _headZoomIconRect, _zoomHeadTextureId, getZoomLevel() == HEAD); - displayIcon(_bounds, _bodyZoomIconRect, _zoomBodyTextureId, getZoomLevel() == BODY); + ZoomLevel zoomLevel = (ZoomLevel)SettingHandles::rearViewZoomLevel.get(); + displayIcon(_bounds, _headZoomIconRect, _zoomHeadTextureId, zoomLevel == HEAD); + displayIcon(_bounds, _bodyZoomIconRect, _zoomBodyTextureId, zoomLevel == BODY); } } } @@ -71,12 +68,12 @@ bool RearMirrorTools::mousePressEvent(int x, int y) { } if (_headZoomIconRect.contains(x, y)) { - setZoomLevel(HEAD); + SettingHandles::rearViewZoomLevel.set(HEAD); return true; } if (_bodyZoomIconRect.contains(x, y)) { - setZoomLevel(BODY); + SettingHandles::rearViewZoomLevel.set(BODY); return true; } @@ -97,22 +94,6 @@ bool RearMirrorTools::mousePressEvent(int x, int y) { return false; } -ZoomLevel RearMirrorTools::getZoomLevel() { - Settings settings; - settings.beginGroup(SETTINGS_GROUP_NAME); - ZoomLevel zoomLevel = (ZoomLevel)settings.value(ZOOM_LEVEL_SETTINGS, HEAD).toInt(); - settings.endGroup(); - - return zoomLevel; -} - -void RearMirrorTools::setZoomLevel(ZoomLevel zoomLevel) { - Settings settings; - settings.beginGroup(SETTINGS_GROUP_NAME); - settings.setValue(ZOOM_LEVEL_SETTINGS, zoomLevel); - settings.endGroup(); -} - void RearMirrorTools::displayIcon(QRect bounds, QRect iconBounds, GLuint textureId, bool selected) { glMatrixMode(GL_PROJECTION); diff --git a/interface/src/ui/RearMirrorTools.h b/interface/src/ui/RearMirrorTools.h index f899c7a3c8..dea77dab76 100644 --- a/interface/src/ui/RearMirrorTools.h +++ b/interface/src/ui/RearMirrorTools.h @@ -16,20 +16,26 @@ #include +#include + enum ZoomLevel { - HEAD, - BODY + HEAD = 0, + BODY = 1 }; +namespace SettingHandles { + const char SETTINGS_GROUP_NAME[] = "Rear View Tools"; + const char ZOOM_LEVEL_SETTINGS[] = "ZoomLevel"; + const SettingHandle rearViewZoomLevel(QStringList() << SETTINGS_GROUP_NAME << ZOOM_LEVEL_SETTINGS, + ZoomLevel::HEAD); +} + class RearMirrorTools : public QObject { Q_OBJECT public: RearMirrorTools(QGLWidget* parent, QRect& bounds); void render(bool fullScreen); bool mousePressEvent(int x, int y); - - ZoomLevel getZoomLevel(); - void setZoomLevel(ZoomLevel zoomLevel); signals: void closeView(); diff --git a/libraries/metavoxels/src/MetavoxelUtil.cpp b/libraries/metavoxels/src/MetavoxelUtil.cpp index f887ca744b..352497b723 100644 --- a/libraries/metavoxels/src/MetavoxelUtil.cpp +++ b/libraries/metavoxels/src/MetavoxelUtil.cpp @@ -485,6 +485,10 @@ void QColorEditor::selectColor() { } } +namespace SettingHandles { + const SettingHandle editorURLs("editorURLs"); +} + QUrlEditor::QUrlEditor(QWidget* parent) : QComboBox(parent) { @@ -492,7 +496,7 @@ QUrlEditor::QUrlEditor(QWidget* parent) : setInsertPolicy(InsertAtTop); // populate initial URL list from settings - addItems(Settings().value("editorURLs").toStringList()); + addItems(SettingHandles::editorURLs.get()); connect(this, SIGNAL(activated(const QString&)), SLOT(updateURL(const QString&))); connect(model(), SIGNAL(rowsInserted(const QModelIndex&,int,int)), SLOT(updateSettings())); @@ -512,7 +516,7 @@ void QUrlEditor::updateSettings() { for (int i = 0, size = qMin(MAX_STORED_URLS, count()); i < size; i++) { urls.append(itemText(i)); } - Settings().setValue("editorURLs", urls); + SettingHandles::editorURLs.set(urls); } BaseVec3Editor::BaseVec3Editor(QWidget* parent) : QWidget(parent) { diff --git a/libraries/metavoxels/src/Spanner.cpp b/libraries/metavoxels/src/Spanner.cpp index eb58301f3b..15ab15ad1a 100644 --- a/libraries/metavoxels/src/Spanner.cpp +++ b/libraries/metavoxels/src/Spanner.cpp @@ -58,6 +58,10 @@ static QItemEditorCreatorBase* heightfieldColorEditorCreator = createHeightfield const float DEFAULT_PLACEMENT_GRANULARITY = 0.01f; const float DEFAULT_VOXELIZATION_GRANULARITY = powf(2.0f, -3.0f); +namespace SettingHandles { + const SettingHandle heightfieldDir("heightDir", QString()); +} + Spanner::Spanner() : _renderer(NULL), _placementGranularity(DEFAULT_PLACEMENT_GRANULARITY), @@ -610,13 +614,13 @@ static int getHeightfieldSize(int size) { } void HeightfieldHeightEditor::select() { - Settings settings; - QString result = QFileDialog::getOpenFileName(this, "Select Height Image", settings.value("heightDir").toString(), - "Images (*.png *.jpg *.bmp *.raw *.mdr)"); + QString result = QFileDialog::getOpenFileName(this, "Select Height Image", + SettingHandles::heightfieldDir.get(), + "Images (*.png *.jpg *.bmp *.raw *.mdr)"); if (result.isNull()) { return; } - settings.setValue("heightDir", QFileInfo(result).path()); + SettingHandles::heightfieldDir.set(QFileInfo(result).path()); const quint16 CONVERSION_OFFSET = 1; QString lowerResult = result.toLower(); bool isMDR = lowerResult.endsWith(".mdr"); @@ -920,13 +924,13 @@ void HeightfieldColorEditor::setColor(const HeightfieldColorPointer& color) { } void HeightfieldColorEditor::select() { - Settings settings; - QString result = QFileDialog::getOpenFileName(this, "Select Color Image", settings.value("heightDir").toString(), + QString result = QFileDialog::getOpenFileName(this, "Select Color Image", + SettingHandles::heightfieldDir.get(), "Images (*.png *.jpg *.bmp)"); if (result.isNull()) { return; } - settings.setValue("heightDir", QFileInfo(result).path()); + SettingHandles::heightfieldDir.get(QFileInfo(result).path()); QImage image; if (!image.load(result)) { QMessageBox::warning(this, "Invalid Image", "The selected image could not be read."); diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 3a3ae598c7..02b45ca574 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -90,11 +90,9 @@ void AccountManager::logout() { connect(&_accountInfo, &DataServerAccountInfo::balanceChanged, this, &AccountManager::accountInfoBalanceChanged); if (_shouldPersistToSettingsFile) { - Settings settings; - settings.beginGroup(ACCOUNTS_GROUP); - QString keyURLString(_authURL.toString().replace("//", DOUBLE_SLASH_SUBSTITUTE)); - settings.remove(keyURLString); + QStringList path = QStringList() << ACCOUNTS_GROUP << keyURLString; + SettingHandles::SettingHandle(path).remove(); qDebug() << "Removed account info for" << _authURL << "from in-memory accounts and .ini file"; } else { @@ -135,7 +133,7 @@ void AccountManager::setAuthURL(const QUrl& authURL) { foreach(const QString& key, settings.allKeys()) { // take a key copy to perform the double slash replacement QString keyCopy(key); - QUrl keyURL(keyCopy.replace("slashslash", "//")); + QUrl keyURL(keyCopy.replace(DOUBLE_SLASH_SUBSTITUTE, "//")); if (keyURL == _authURL) { // pull out the stored access token and store it in memory @@ -324,10 +322,9 @@ void AccountManager::passErrorToCallback(QNetworkReply* requestReply) { void AccountManager::persistAccountToSettings() { if (_shouldPersistToSettingsFile) { // store this access token into the local settings - Settings localSettings; - localSettings.beginGroup(ACCOUNTS_GROUP); - localSettings.setValue(_authURL.toString().replace("//", DOUBLE_SLASH_SUBSTITUTE), - QVariant::fromValue(_accountInfo)); + QString keyURLString(_authURL.toString().replace("//", DOUBLE_SLASH_SUBSTITUTE)); + QStringList path = QStringList() << ACCOUNTS_GROUP << keyURLString; + SettingHandles::SettingHandle(path).set(QVariant::fromValue(_accountInfo)); } } diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index f8c39b37aa..507ddd6e5e 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -24,6 +24,14 @@ #include "AddressManager.h" +const QString ADDRESS_MANAGER_SETTINGS_GROUP = "AddressManager"; +const QString SETTINGS_CURRENT_ADDRESS_KEY = "address"; +namespace SettingHandles { + const SettingHandle currentAddress(QStringList() << ADDRESS_MANAGER_SETTINGS_GROUP + << "address", + QUrl()); +} + AddressManager::AddressManager() : _rootPlaceName(), _rootPlaceID(), @@ -47,25 +55,16 @@ const QUrl AddressManager::currentAddress() const { return hifiURL; } -const QString ADDRESS_MANAGER_SETTINGS_GROUP = "AddressManager"; -const QString SETTINGS_CURRENT_ADDRESS_KEY = "address"; - void AddressManager::loadSettings(const QString& lookupString) { if (lookupString.isEmpty()) { - Settings settings; - settings.beginGroup(ADDRESS_MANAGER_SETTINGS_GROUP); - handleLookupString(settings.value(SETTINGS_CURRENT_ADDRESS_KEY).toString()); + handleLookupString(SettingHandles::currentAddress.get().toString()); } else { handleLookupString(lookupString); } } void AddressManager::storeCurrentAddress() { - Settings settings; - - settings.beginGroup(ADDRESS_MANAGER_SETTINGS_GROUP); - settings.setValue(SETTINGS_CURRENT_ADDRESS_KEY, currentAddress()); - settings.endGroup(); + SettingHandles::currentAddress.set(currentAddress()); } const QString AddressManager::currentPath(bool withOrientation) const { diff --git a/libraries/shared/src/Settings.cpp b/libraries/shared/src/Settings.cpp index 94f253fe66..ee8cd5b40b 100644 --- a/libraries/shared/src/Settings.cpp +++ b/libraries/shared/src/Settings.cpp @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include #include "Settings.h" @@ -21,5 +22,9 @@ QVariant SettingsBridge::getFromSettings(const QString& key, const QVariant& def void SettingsBridge::setInSettings(const QString& key, const QVariant& value) { QSettings().setValue(key, value); } + +void SettingsBridge::removeFromSettings(const QString& key) { + QSettings().remove(key); +} } \ No newline at end of file diff --git a/libraries/shared/src/Settings.h b/libraries/shared/src/Settings.h index c0f4296fbb..6a66a9a886 100644 --- a/libraries/shared/src/Settings.h +++ b/libraries/shared/src/Settings.h @@ -17,16 +17,28 @@ #include // TODO: remove +#include class Settings : public QSettings { }; +float loadSetting(QSettings* settings, const char* name, float defaultValue) { + float value = settings->value(name, defaultValue).toFloat(); + if (glm::isnan(value)) { + value = defaultValue; + } + return value; +} +//// namespace SettingHandles { template class SettingHandle { public: + SettingHandle(const QString& key); + SettingHandle(const QStringList& path); SettingHandle(const QString& key, const T& defaultValue); + SettingHandle(const QStringList& path, const T& defaultValue); T get() const; // Returns setting value, returns its default value if not found T get(const T& other) const; // Returns setting value, returns other if not found @@ -35,6 +47,8 @@ public: void set(const T& value) const; void reset() const; + void remove() const; + private: const QString _key; const QVariant _defaultValue; @@ -44,13 +58,31 @@ class SettingsBridge { private: static QVariant getFromSettings(const QString& key, const QVariant& defaultValue); static void setInSettings(const QString& key, const QVariant& value); + static void removeFromSettings(const QString& key); template friend class SettingHandle; }; template -SettingHandle::SettingHandle(const QString& key, const T& defaultValue) : _key(key), _defaultValue(defaultValue) { +SettingHandle::SettingHandle(const QString& key) : _key(key) { +} + +template +SettingHandle::SettingHandle(const QStringList& path) : _key(path.join("/")) { +} + +template +SettingHandle::SettingHandle(const QString& key, const T& defaultValue) : + _key(key), + _defaultValue(defaultValue) { +} + +template +SettingHandle::SettingHandle(const QStringList& path, const T& defaultValue) : + _key(path.join("/")), + _defaultValue(defaultValue) { + } template @@ -83,7 +115,12 @@ void SettingHandle::set(const T& value) const { template inline void SettingHandle::reset() const { - setInSettings(_key, _defaultValue); + SettingsBridge::setInSettings(_key, _defaultValue); +} + +template inline +void SettingHandle::remove() const { + SettingsBridge::removeFromSettings(_key); } }