More settings hooks

This commit is contained in:
Atlante45 2015-01-20 16:52:42 -08:00
parent 8d37f5ae00
commit 2b3f12a7c4
7 changed files with 107 additions and 71 deletions

View file

@ -312,6 +312,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(updateWindowTitle())); connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(updateWindowTitle()));
connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails())); connect(&domainHandler, SIGNAL(disconnectedFromDomain()), SLOT(clearDomainOctreeDetails()));
connect(&domainHandler, &DomainHandler::settingsReceived, this, &Application::domainSettingsReceived); connect(&domainHandler, &DomainHandler::settingsReceived, this, &Application::domainSettingsReceived);
connect(&domainHandler, &DomainHandler::hostnameChanged,
DependencyManager::get<AddressManager>().data(), &AddressManager::storeCurrentAddress);
// update our location every 5 seconds in the data-server, assuming that we are authenticated with one // update our location every 5 seconds in the data-server, assuming that we are authenticated with one
const qint64 DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS = 5 * 1000; const qint64 DATA_SERVER_LOCATION_CHANGE_UPDATE_MSECS = 5 * 1000;
@ -447,6 +449,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
_previousScriptLocation = SettingHandles::lastScriptLocation.get(); _previousScriptLocation = SettingHandles::lastScriptLocation.get();
} }
loadSettings();
_trayIcon->show(); _trayIcon->show();
@ -468,6 +472,7 @@ void Application::aboutToQuit() {
} }
Application::~Application() { Application::~Application() {
saveSettings();
_entities.getTree()->setSimulation(NULL); _entities.getTree()->setSimulation(NULL);
qInstallMessageHandler(NULL); qInstallMessageHandler(NULL);
@ -1583,6 +1588,20 @@ bool Application::exportEntities(const QString& filename, float x, float y, floa
return true; return true;
} }
void Application::loadSettings() {
DependencyManager::get<Audio>()->loadSettings();
DependencyManager::get<LODManager>()->loadSettings();
Menu::getInstance()->loadSettings();
_myAvatar->loadData();
}
void Application::saveSettings() {
DependencyManager::get<Audio>()->saveSettings();
DependencyManager::get<LODManager>()->saveSettings();
Menu::getInstance()->saveSettings();
_myAvatar->saveData();
}
bool Application::importEntities(const QString& filename) { bool Application::importEntities(const QString& filename) {
_entityClipboard.eraseAllOctreeElements(); _entityClipboard.eraseAllOctreeElements();
bool success = _entityClipboard.readFromSVOFile(filename.toLocal8Bit().constData()); bool success = _entityClipboard.readFromSVOFile(filename.toLocal8Bit().constData());

View file

@ -364,6 +364,9 @@ public slots:
void resetSensors(); void resetSensors();
void aboutApp(); void aboutApp();
void showEditEntitiesHelp(); void showEditEntitiesHelp();
void loadSettings();
void saveSettings();
private slots: private slots:
void clearDomainOctreeDetails(); void clearDomainOctreeDetails();

View file

@ -65,12 +65,12 @@ public:
bool shouldRenderMesh(float largestDimension, float distanceToCamera); bool shouldRenderMesh(float largestDimension, float distanceToCamera);
private:
LODManager() {}
void loadSettings(); void loadSettings();
void saveSettings(); void saveSettings();
private:
LODManager() {}
bool _automaticAvatarLOD = true; bool _automaticAvatarLOD = true;
float _avatarLODDecreaseFPS = DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS; float _avatarLODDecreaseFPS = DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS;
float _avatarLODIncreaseFPS = ADJUST_LOD_UP_FPS; float _avatarLODIncreaseFPS = ADJUST_LOD_UP_FPS;

View file

@ -555,6 +555,14 @@ Menu::Menu() {
#endif #endif
} }
void Menu::loadSettings() {
scanMenuBar(&Menu::loadAction);
}
void Menu::saveSettings() {
scanMenuBar(&Menu::saveAction);
}
void Menu::loadAction(Settings& settings, QAction& action) { void Menu::loadAction(Settings& settings, QAction& action) {
if (action.isChecked() != settings.value(action.text(), action.isChecked()).toBool()) { if (action.isChecked() != settings.value(action.text(), action.isChecked()).toBool()) {
action.trigger(); action.trigger();

View file

@ -27,6 +27,10 @@ class Menu : public QMenuBar {
Q_OBJECT Q_OBJECT
public: public:
static Menu* getInstance(); static Menu* getInstance();
void loadSettings();
void saveSettings();
QMenu* getMenu(const QString& menuName); QMenu* getMenu(const QString& menuName);
void triggerOption(const QString& menuOption); void triggerOption(const QString& menuOption);

View file

@ -679,68 +679,70 @@ AnimationDetails MyAvatar::getAnimationDetails(const QString& url) {
return result; return result;
} }
void MyAvatar::saveData(QSettings* settings) { void MyAvatar::saveData() {
settings->beginGroup("Avatar"); Settings settings;
settings.beginGroup("Avatar");
settings->setValue("headPitch", getHead()->getBasePitch()); settings.setValue("headPitch", getHead()->getBasePitch());
settings->setValue("pupilDilation", getHead()->getPupilDilation()); settings.setValue("pupilDilation", getHead()->getPupilDilation());
settings->setValue("leanScale", _leanScale); settings.setValue("leanScale", _leanScale);
settings->setValue("scale", _targetScale); settings.setValue("scale", _targetScale);
settings->setValue("faceModelURL", _faceModelURL); settings.setValue("faceModelURL", _faceModelURL);
settings->setValue("skeletonModelURL", _skeletonModelURL); settings.setValue("skeletonModelURL", _skeletonModelURL);
settings->beginWriteArray("attachmentData"); settings.beginWriteArray("attachmentData");
for (int i = 0; i < _attachmentData.size(); i++) { for (int i = 0; i < _attachmentData.size(); i++) {
settings->setArrayIndex(i); settings.setArrayIndex(i);
const AttachmentData& attachment = _attachmentData.at(i); const AttachmentData& attachment = _attachmentData.at(i);
settings->setValue("modelURL", attachment.modelURL); settings.setValue("modelURL", attachment.modelURL);
settings->setValue("jointName", attachment.jointName); settings.setValue("jointName", attachment.jointName);
settings->setValue("translation_x", attachment.translation.x); settings.setValue("translation_x", attachment.translation.x);
settings->setValue("translation_y", attachment.translation.y); settings.setValue("translation_y", attachment.translation.y);
settings->setValue("translation_z", attachment.translation.z); settings.setValue("translation_z", attachment.translation.z);
glm::vec3 eulers = safeEulerAngles(attachment.rotation); glm::vec3 eulers = safeEulerAngles(attachment.rotation);
settings->setValue("rotation_x", eulers.x); settings.setValue("rotation_x", eulers.x);
settings->setValue("rotation_y", eulers.y); settings.setValue("rotation_y", eulers.y);
settings->setValue("rotation_z", eulers.z); settings.setValue("rotation_z", eulers.z);
settings->setValue("scale", attachment.scale); settings.setValue("scale", attachment.scale);
} }
settings->endArray(); settings.endArray();
settings->beginWriteArray("animationHandles"); settings.beginWriteArray("animationHandles");
for (int i = 0; i < _animationHandles.size(); i++) { for (int i = 0; i < _animationHandles.size(); i++) {
settings->setArrayIndex(i); settings.setArrayIndex(i);
const AnimationHandlePointer& pointer = _animationHandles.at(i); const AnimationHandlePointer& pointer = _animationHandles.at(i);
settings->setValue("role", pointer->getRole()); settings.setValue("role", pointer->getRole());
settings->setValue("url", pointer->getURL()); settings.setValue("url", pointer->getURL());
settings->setValue("fps", pointer->getFPS()); settings.setValue("fps", pointer->getFPS());
settings->setValue("priority", pointer->getPriority()); settings.setValue("priority", pointer->getPriority());
settings->setValue("loop", pointer->getLoop()); settings.setValue("loop", pointer->getLoop());
settings->setValue("hold", pointer->getHold()); settings.setValue("hold", pointer->getHold());
settings->setValue("startAutomatically", pointer->getStartAutomatically()); settings.setValue("startAutomatically", pointer->getStartAutomatically());
settings->setValue("firstFrame", pointer->getFirstFrame()); settings.setValue("firstFrame", pointer->getFirstFrame());
settings->setValue("lastFrame", pointer->getLastFrame()); settings.setValue("lastFrame", pointer->getLastFrame());
settings->setValue("maskedJoints", pointer->getMaskedJoints()); settings.setValue("maskedJoints", pointer->getMaskedJoints());
} }
settings->endArray(); settings.endArray();
settings->setValue("displayName", _displayName); settings.setValue("displayName", _displayName);
settings->endGroup(); settings.endGroup();
} }
float loadSetting(QSettings* settings, const char* name, float defaultValue) { float loadSetting(QSettings& settings, const char* name, float defaultValue) {
float value = settings->value(name, defaultValue).toFloat(); float value = settings.value(name, defaultValue).toFloat();
if (glm::isnan(value)) { if (glm::isnan(value)) {
value = defaultValue; value = defaultValue;
} }
return value; return value;
} }
void MyAvatar::loadData(QSettings* settings) { void MyAvatar::loadData() {
settings->beginGroup("Avatar"); Settings settings;
settings.beginGroup("Avatar");
getHead()->setBasePitch(loadSetting(settings, "headPitch", 0.0f)); getHead()->setBasePitch(loadSetting(settings, "headPitch", 0.0f));
@ -751,16 +753,16 @@ void MyAvatar::loadData(QSettings* settings) {
setScale(_scale); setScale(_scale);
Application::getInstance()->getCamera()->setScale(_scale); Application::getInstance()->getCamera()->setScale(_scale);
setFaceModelURL(settings->value("faceModelURL", DEFAULT_HEAD_MODEL_URL).toUrl()); setFaceModelURL(settings.value("faceModelURL", DEFAULT_HEAD_MODEL_URL).toUrl());
setSkeletonModelURL(settings->value("skeletonModelURL").toUrl()); setSkeletonModelURL(settings.value("skeletonModelURL").toUrl());
QVector<AttachmentData> attachmentData; QVector<AttachmentData> attachmentData;
int attachmentCount = settings->beginReadArray("attachmentData"); int attachmentCount = settings.beginReadArray("attachmentData");
for (int i = 0; i < attachmentCount; i++) { for (int i = 0; i < attachmentCount; i++) {
settings->setArrayIndex(i); settings.setArrayIndex(i);
AttachmentData attachment; AttachmentData attachment;
attachment.modelURL = settings->value("modelURL").toUrl(); attachment.modelURL = settings.value("modelURL").toUrl();
attachment.jointName = settings->value("jointName").toString(); attachment.jointName = settings.value("jointName").toString();
attachment.translation.x = loadSetting(settings, "translation_x", 0.0f); attachment.translation.x = loadSetting(settings, "translation_x", 0.0f);
attachment.translation.y = loadSetting(settings, "translation_y", 0.0f); attachment.translation.y = loadSetting(settings, "translation_y", 0.0f);
attachment.translation.z = loadSetting(settings, "translation_z", 0.0f); attachment.translation.z = loadSetting(settings, "translation_z", 0.0f);
@ -772,10 +774,10 @@ void MyAvatar::loadData(QSettings* settings) {
attachment.scale = loadSetting(settings, "scale", 1.0f); attachment.scale = loadSetting(settings, "scale", 1.0f);
attachmentData.append(attachment); attachmentData.append(attachment);
} }
settings->endArray(); settings.endArray();
setAttachmentData(attachmentData); setAttachmentData(attachmentData);
int animationCount = settings->beginReadArray("animationHandles"); int animationCount = settings.beginReadArray("animationHandles");
while (_animationHandles.size() > animationCount) { while (_animationHandles.size() > animationCount) {
_animationHandles.takeLast()->stop(); _animationHandles.takeLast()->stop();
} }
@ -783,24 +785,24 @@ void MyAvatar::loadData(QSettings* settings) {
addAnimationHandle(); addAnimationHandle();
} }
for (int i = 0; i < animationCount; i++) { for (int i = 0; i < animationCount; i++) {
settings->setArrayIndex(i); settings.setArrayIndex(i);
const AnimationHandlePointer& handle = _animationHandles.at(i); const AnimationHandlePointer& handle = _animationHandles.at(i);
handle->setRole(settings->value("role", "idle").toString()); handle->setRole(settings.value("role", "idle").toString());
handle->setURL(settings->value("url").toUrl()); handle->setURL(settings.value("url").toUrl());
handle->setFPS(loadSetting(settings, "fps", 30.0f)); handle->setFPS(loadSetting(settings, "fps", 30.0f));
handle->setPriority(loadSetting(settings, "priority", 1.0f)); handle->setPriority(loadSetting(settings, "priority", 1.0f));
handle->setLoop(settings->value("loop", true).toBool()); handle->setLoop(settings.value("loop", true).toBool());
handle->setHold(settings->value("hold", false).toBool()); handle->setHold(settings.value("hold", false).toBool());
handle->setStartAutomatically(settings->value("startAutomatically", true).toBool()); handle->setStartAutomatically(settings.value("startAutomatically", true).toBool());
handle->setFirstFrame(settings->value("firstFrame", 0.0f).toFloat()); handle->setFirstFrame(settings.value("firstFrame", 0.0f).toFloat());
handle->setLastFrame(settings->value("lastFrame", INT_MAX).toFloat()); handle->setLastFrame(settings.value("lastFrame", INT_MAX).toFloat());
handle->setMaskedJoints(settings->value("maskedJoints").toStringList()); handle->setMaskedJoints(settings.value("maskedJoints").toStringList());
} }
settings->endArray(); settings.endArray();
setDisplayName(settings->value("displayName").toString()); setDisplayName(settings.value("displayName").toString());
settings->endGroup(); settings.endGroup();
} }
void MyAvatar::saveAttachmentData(const AttachmentData& attachment) const { void MyAvatar::saveAttachmentData(const AttachmentData& attachment) const {
@ -841,15 +843,15 @@ AttachmentData MyAvatar::loadAttachmentData(const QUrl& modelURL, const QString&
} }
settings.beginGroup(attachment.jointName); settings.beginGroup(attachment.jointName);
if (settings.contains("translation_x")) { if (settings.contains("translation_x")) {
attachment.translation.x = loadSetting(&settings, "translation_x", 0.0f); attachment.translation.x = loadSetting(settings, "translation_x", 0.0f);
attachment.translation.y = loadSetting(&settings, "translation_y", 0.0f); attachment.translation.y = loadSetting(settings, "translation_y", 0.0f);
attachment.translation.z = loadSetting(&settings, "translation_z", 0.0f); attachment.translation.z = loadSetting(settings, "translation_z", 0.0f);
glm::vec3 eulers; glm::vec3 eulers;
eulers.x = loadSetting(&settings, "rotation_x", 0.0f); eulers.x = loadSetting(settings, "rotation_x", 0.0f);
eulers.y = loadSetting(&settings, "rotation_y", 0.0f); eulers.y = loadSetting(settings, "rotation_y", 0.0f);
eulers.z = loadSetting(&settings, "rotation_z", 0.0f); eulers.z = loadSetting(settings, "rotation_z", 0.0f);
attachment.rotation = glm::quat(eulers); attachment.rotation = glm::quat(eulers);
attachment.scale = loadSetting(&settings, "scale", 1.0f); attachment.scale = loadSetting(settings, "scale", 1.0f);
} else { } else {
attachment = AttachmentData(); attachment = AttachmentData();
} }

View file

@ -78,8 +78,8 @@ public:
Q_INVOKABLE AnimationDetails getAnimationDetails(const QString& url); Q_INVOKABLE AnimationDetails getAnimationDetails(const QString& url);
// get/set avatar data // get/set avatar data
void saveData(QSettings* settings); void saveData();
void loadData(QSettings* settings); void loadData();
void saveAttachmentData(const AttachmentData& attachment) const; void saveAttachmentData(const AttachmentData& attachment) const;
AttachmentData loadAttachmentData(const QUrl& modelURL, const QString& jointName = QString()) const; AttachmentData loadAttachmentData(const QUrl& modelURL, const QString& jointName = QString()) const;