mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 12:04:18 +02:00
expose application settings to JS
This commit is contained in:
parent
b7243b0bfe
commit
938959a9f6
6 changed files with 94 additions and 7 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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() {
|
||||
|
|
36
interface/src/scripting/SettingsScriptingInterface.cpp
Normal file
36
interface/src/scripting/SettingsScriptingInterface.cpp
Normal 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();
|
||||
}
|
30
interface/src/scripting/SettingsScriptingInterface.h
Normal file
30
interface/src/scripting/SettingsScriptingInterface.h
Normal 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__) */
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue