expose application settings to JS

This commit is contained in:
ZappoMan 2014-03-22 21:20:35 -07:00
parent b7243b0bfe
commit 938959a9f6
6 changed files with 94 additions and 7 deletions

View file

@ -74,6 +74,7 @@
#include "scripting/ClipboardScriptingInterface.h"
#include "scripting/MenuScriptingInterface.h"
#include "scripting/SettingsScriptingInterface.h"
#include "ui/InfoView.h"
#include "ui/Snapshot.h"
@ -3550,6 +3551,7 @@ void Application::loadScript(const QString& fileNameString) {
scriptEngine->registerGlobalObject("Overlays", &_overlays);
scriptEngine->registerGlobalObject("Menu", MenuScriptingInterface::getInstance());
scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance());
QThread* workerThread = new QThread(this);

View file

@ -171,7 +171,11 @@ public:
Visage* getVisage() { return &_visage; }
SixenseManager* getSixenseManager() { return &_sixenseManager; }
BandwidthMeter* getBandwidthMeter() { return &_bandwidthMeter; }
QSettings* getSettings() { return _settings; }
/// if you need to access the application settings, use lockSettings()/unlockSettings()
QSettings* lockSettings() { _settingsMutex.lock(); return _settings; }
void unlockSettings() { _settingsMutex.unlock(); }
QMainWindow* getWindow() { return _window; }
NodeToOctreeSceneStats* getOcteeSceneStats() { return &_octreeServerSceneStats; }
void lockOctreeSceneStats() { _octreeSceneStatsLock.lockForRead(); }
@ -352,6 +356,7 @@ private:
DatagramProcessor _datagramProcessor;
QNetworkAccessManager* _networkAccessManager;
QMutex _settingsMutex;
QSettings* _settings;
glm::vec3 _gravity;

View file

@ -374,8 +374,10 @@ Menu::~Menu() {
}
void Menu::loadSettings(QSettings* settings) {
bool lockedSettings = false;
if (!settings) {
settings = Application::getInstance()->getSettings();
settings = Application::getInstance()->lockSettings();
lockedSettings = true;
}
_audioJitterBufferSamples = loadSetting(settings, "audioJitterBufferSamples", 0);
@ -404,11 +406,17 @@ void Menu::loadSettings(QSettings* settings) {
// TODO: cache more settings in MyAvatar that are checked with very high frequency.
MyAvatar* myAvatar = Application::getInstance()->getAvatar();
myAvatar->updateCollisionFlags();
if (lockedSettings) {
Application::getInstance()->unlockSettings();
}
}
void Menu::saveSettings(QSettings* settings) {
bool lockedSettings = false;
if (!settings) {
settings = Application::getInstance()->getSettings();
settings = Application::getInstance()->lockSettings();
lockedSettings = true;
}
settings->setValue("audioJitterBufferSamples", _audioJitterBufferSamples);
@ -430,6 +438,9 @@ void Menu::saveSettings(QSettings* settings) {
Application::getInstance()->getAvatar()->saveData(settings);
NodeList::getInstance()->saveData(settings);
if (lockedSettings) {
Application::getInstance()->unlockSettings();
}
}
void Menu::importSettings() {

View file

@ -0,0 +1,36 @@
//
// SettingsScriptingInterface.cpp
// hifi
//
// Created by Brad Hefta-Gaub on 2/25/14
// Copyright (c) 2014 HighFidelity, Inc. All rights reserved.
//
#include "Application.h"
#include "SettingsScriptingInterface.h"
SettingsScriptingInterface* SettingsScriptingInterface::getInstance() {
static SettingsScriptingInterface sharedInstance;
return &sharedInstance;
}
QVariant SettingsScriptingInterface::getValue(const QString& setting) {
QSettings* settings = Application::getInstance()->lockSettings();
QVariant value = settings->value(setting);
Application::getInstance()->unlockSettings();
return value;
}
QVariant SettingsScriptingInterface::getValue(const QString& setting, const QVariant& defaultValue) {
QSettings* settings = Application::getInstance()->lockSettings();
QVariant value = settings->value(setting, defaultValue);
Application::getInstance()->unlockSettings();
return value;
}
void SettingsScriptingInterface::setValue(const QString& setting, const QVariant& value) {
QSettings* settings = Application::getInstance()->lockSettings();
settings->setValue(setting, value);
Application::getInstance()->unlockSettings();
}

View file

@ -0,0 +1,30 @@
//
// SettingsScriptingInterface.h
// hifi
//
// Created by Brad Hefta-Gaub on 3/22/14
// Copyright (c) 2014 HighFidelity, Inc. All rights reserved.
//
#ifndef __hifi__SettingsScriptingInterface__
#define __hifi__SettingsScriptingInterface__
#include <QDebug>
#include <QObject>
#include <QString>
#include "Application.h"
class SettingsScriptingInterface : public QObject {
Q_OBJECT
SettingsScriptingInterface() { };
public:
static SettingsScriptingInterface* getInstance();
public slots:
QVariant getValue(const QString& setting);
QVariant getValue(const QString& setting, const QVariant& defaultValue);
void setValue(const QString& setting, const QVariant& value);
};
#endif /* defined(__hifi__SettingsScriptingInterface__) */

View file

@ -38,11 +38,12 @@ void InfoView::forcedShow() {
}
bool InfoView::shouldShow() {
bool shouldShow = false;
if (_forced) {
return true;
}
QSettings* settings = Application::getInstance()->getSettings();
QSettings* settings = Application::getInstance()->lockSettings();
QString lastVersion = settings->value(SETTINGS_VERSION_KEY).toString();
@ -51,10 +52,12 @@ bool InfoView::shouldShow() {
if (version != QString::null && (lastVersion == QString::null || lastVersion != version)) {
settings->setValue(SETTINGS_VERSION_KEY, version);
return true;
shouldShow = true;
} else {
return false;
}
shouldShow = false;
}
Application::getInstance()->unlockSettings();
return shouldShow;
}
void InfoView::loaded(bool ok) {