From d77d1023849c0faaf3b0d19caf34ef4bff9c52d8 Mon Sep 17 00:00:00 2001
From: Brad Hefta-Gaub <brad@highfidelity.io>
Date: Wed, 10 Feb 2016 22:01:17 -0800
Subject: [PATCH] add support for persisting the mono preview mode option

---
 interface/src/PluginContainerProxy.cpp          | 10 ++++++++++
 interface/src/PluginContainerProxy.h            |  4 ++++
 libraries/plugins/src/plugins/PluginContainer.h |  4 ++++
 plugins/oculus/src/OculusDisplayPlugin.cpp      |  7 +++++--
 tests/controllers/src/main.cpp                  |  2 ++
 5 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/interface/src/PluginContainerProxy.cpp b/interface/src/PluginContainerProxy.cpp
index 048f079653..f8a9d907bb 100644
--- a/interface/src/PluginContainerProxy.cpp
+++ b/interface/src/PluginContainerProxy.cpp
@@ -184,3 +184,13 @@ void PluginContainerProxy::releaseOverlayTexture(uint32_t texture) {
     // FIXME implement present thread compositing
 }
 
+/// settings interface
+bool PluginContainerProxy::getBoolSetting(const QString& settingName, bool defaultValue) {
+    Setting::Handle<bool> settingValue(settingName, defaultValue);
+    return settingValue.get();
+}
+
+void PluginContainerProxy::setBoolSetting(const QString& settingName, bool value) {
+    Setting::Handle<bool> settingValue(settingName, value);
+    return settingValue.set(value);
+}
diff --git a/interface/src/PluginContainerProxy.h b/interface/src/PluginContainerProxy.h
index 3adc696ba9..c08cf97abb 100644
--- a/interface/src/PluginContainerProxy.h
+++ b/interface/src/PluginContainerProxy.h
@@ -33,6 +33,10 @@ class PluginContainerProxy : public QObject, PluginContainer {
     virtual bool isForeground() override;
     virtual const DisplayPlugin* getActiveDisplayPlugin() const override;
 
+    /// settings interface
+    virtual bool getBoolSetting(const QString& settingName, bool defaultValue) override;
+    virtual void setBoolSetting(const QString& settingName, bool value) override;
+
     QRect _savedGeometry{ 10, 120, 800, 600 };
     std::map<QString, QActionGroup*> _exclusiveGroups;
 
diff --git a/libraries/plugins/src/plugins/PluginContainer.h b/libraries/plugins/src/plugins/PluginContainer.h
index 19859fd98b..a32b50cb94 100644
--- a/libraries/plugins/src/plugins/PluginContainer.h
+++ b/libraries/plugins/src/plugins/PluginContainer.h
@@ -47,6 +47,10 @@ public:
     virtual bool isForeground() = 0;
     virtual const DisplayPlugin* getActiveDisplayPlugin() const = 0;
 
+    /// settings interface
+    virtual bool getBoolSetting(const QString& settingName, bool defaultValue) = 0;
+    virtual void setBoolSetting(const QString& settingName, bool value) = 0;
+
     QVector<QPair<QString, QString>>& currentDisplayActions() {
         return _currentDisplayPluginActions;
     }
diff --git a/plugins/oculus/src/OculusDisplayPlugin.cpp b/plugins/oculus/src/OculusDisplayPlugin.cpp
index 3002c746a2..69083ac488 100644
--- a/plugins/oculus/src/OculusDisplayPlugin.cpp
+++ b/plugins/oculus/src/OculusDisplayPlugin.cpp
@@ -12,7 +12,6 @@
 // FIXME get rid of this
 #include <gl/Config.h>
 #include <plugins/PluginContainer.h>
-
 #include "OculusHelpers.h"
 
 
@@ -140,12 +139,16 @@ const QString OculusDisplayPlugin::NAME("Oculus Rift");
 
 static const QString MONO_PREVIEW = "Mono Preview";
 static const QString FRAMERATE = DisplayPlugin::MENU_PATH() + ">Framerate";
+static const bool DEFAULT_MONO_VIEW = true;
 
 void OculusDisplayPlugin::activate() {
+    _monoPreview = _container->getBoolSetting("monoPreview", DEFAULT_MONO_VIEW);
+
     _container->addMenuItem(PluginType::DISPLAY_PLUGIN, MENU_PATH(), MONO_PREVIEW,
         [this](bool clicked) {
             _monoPreview = clicked;
-        }, true, true);
+            _container->setBoolSetting("monoPreview", _monoPreview);
+    }, true, _monoPreview);
     _container->removeMenu(FRAMERATE);
     OculusBaseDisplayPlugin::activate();
 }
diff --git a/tests/controllers/src/main.cpp b/tests/controllers/src/main.cpp
index fe49c2b385..da233d650c 100644
--- a/tests/controllers/src/main.cpp
+++ b/tests/controllers/src/main.cpp
@@ -99,6 +99,8 @@ public:
     virtual QOpenGLContext* getPrimaryContext() override { return nullptr; }
     virtual bool isForeground() override { return true;  }
     virtual const DisplayPlugin* getActiveDisplayPlugin() const override { return nullptr;  }
+    virtual bool getBoolSetting(const QString& settingName, bool defaultValue) override { return defaultValue; }
+    virtual void setBoolSetting(const QString& settingName, bool value) override { }
 };
 
 class MyControllerScriptingInterface : public controller::ScriptingInterface {