mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-09 16:52:28 +02:00
working on plugin menu manipulation
This commit is contained in:
parent
9fd80d7954
commit
e3bc4b3b89
25 changed files with 80 additions and 42 deletions
|
@ -144,6 +144,7 @@
|
|||
#include "ui/AddressBarDialog.h"
|
||||
#include "ui/UpdateDialog.h"
|
||||
|
||||
#include <qopenglcontext.h>
|
||||
|
||||
// ON WIndows PC, NVidia Optimus laptop, we want to enable NVIDIA GPU
|
||||
#if defined(Q_OS_WIN)
|
||||
|
@ -754,14 +755,14 @@ Application::~Application() {
|
|||
|
||||
ModelEntityItem::cleanupLoadedAnimations();
|
||||
|
||||
getActiveDisplayPlugin()->deactivate();
|
||||
getActiveDisplayPlugin()->deactivate(this);
|
||||
|
||||
auto inputPlugins = getInputPlugins();
|
||||
foreach(auto inputPlugin, inputPlugins) {
|
||||
QString name = inputPlugin->getName();
|
||||
QAction* action = Menu::getInstance()->getActionForOption(name);
|
||||
if (action->isChecked()) {
|
||||
inputPlugin->deactivate();
|
||||
inputPlugin->deactivate(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4806,7 +4807,7 @@ void Application::updateDisplayMode() {
|
|||
_displayPlugin = newDisplayPlugin;
|
||||
|
||||
if (oldDisplayPlugin) {
|
||||
oldDisplayPlugin->deactivate();
|
||||
oldDisplayPlugin->deactivate(this);
|
||||
_offscreenContext->makeCurrent();
|
||||
}
|
||||
}
|
||||
|
@ -4844,7 +4845,7 @@ void Application::updateInputModes() {
|
|||
}
|
||||
if (removedInputPlugins.size() > 0) { // A plugin was unchecked
|
||||
foreach(auto removedInputPlugin, removedInputPlugins) {
|
||||
removedInputPlugin->deactivate();
|
||||
removedInputPlugin->deactivate(this);
|
||||
//removedInputPlugin->removeEventFilter(qApp);
|
||||
//removedInputPlugin->removeEventFilter(offscreenUi.data());
|
||||
}
|
||||
|
@ -4861,6 +4862,14 @@ void Application::updateInputModes() {
|
|||
//}
|
||||
}
|
||||
|
||||
void Application::addMenu(const QString& menuName) {
|
||||
Menu::getInstance()->addMenu(menuName);
|
||||
}
|
||||
|
||||
void Application::removeMenu(const QString& menuName) {
|
||||
Menu::getInstance()->removeMenu(menuName);
|
||||
}
|
||||
|
||||
void Application::addMenuItem(const QString& path, const QString& name, std::function<void()> onClicked, bool checkable, bool checked, const QString& groupName) {
|
||||
auto menu = Menu::getInstance();
|
||||
MenuWrapper* parentItem = menu->getMenu(path);
|
||||
|
@ -4872,6 +4881,18 @@ void Application::addMenuItem(const QString& path, const QString& name, std::fun
|
|||
_currentInputPluginActions.push_back({ path, name });
|
||||
}
|
||||
|
||||
void Application::removeMenuItem(const QString& menuName, const QString& menuItem) {
|
||||
Menu::getInstance()->removeMenuItem(menuName, menuItem);
|
||||
}
|
||||
|
||||
bool Application::isOptionChecked(const QString& name) {
|
||||
return Menu::getInstance()->isOptionChecked(name);
|
||||
}
|
||||
|
||||
void Application::setIsOptionChecked(const QString& path, bool checked) {
|
||||
Menu::getInstance()->setIsOptionChecked(path, checked);
|
||||
}
|
||||
|
||||
GlWindow* Application::getVisibleWindow() {
|
||||
return _glWindow;
|
||||
}
|
||||
|
|
|
@ -280,7 +280,12 @@ public:
|
|||
virtual qreal getDevicePixelRatio();
|
||||
|
||||
// Plugin container support
|
||||
virtual void addMenu(const QString& menuName);
|
||||
virtual void removeMenu(const QString& menuName);
|
||||
virtual void addMenuItem(const QString& path, const QString& name, std::function<void()> onClicked, bool checkable, bool checked, const QString& groupName);
|
||||
virtual void removeMenuItem(const QString& menuName, const QString& menuItem);
|
||||
virtual bool isOptionChecked(const QString& name);
|
||||
virtual void setIsOptionChecked(const QString& path, bool checked);
|
||||
virtual GlWindow* getVisibleWindow();
|
||||
|
||||
private:
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#include "devices/DdeFaceTracker.h"
|
||||
#include "devices/Faceshift.h"
|
||||
#include "devices/RealSense.h"
|
||||
#include <input-plugins/SixenseManager.h> // TODO: should be able to remove this once input plugin architecture is finished
|
||||
#include "MainWindow.h"
|
||||
#include "scripting/MenuScriptingInterface.h"
|
||||
#if defined(Q_OS_MAC) || defined(Q_OS_WIN)
|
||||
|
@ -443,14 +442,6 @@ Menu::Menu() {
|
|||
qApp, SLOT(setLowVelocityFilter(bool)));
|
||||
addCheckableActionToQMenuAndActionHash(handOptionsMenu, MenuOption::ShowIKConstraints, 0, false);
|
||||
|
||||
MenuWrapper* sixenseOptionsMenu = handOptionsMenu->addMenu("Sixense");
|
||||
addCheckableActionToQMenuAndActionHash(sixenseOptionsMenu,
|
||||
MenuOption::FilterSixense,
|
||||
0,
|
||||
true,
|
||||
&SixenseManager::getInstance(),
|
||||
SLOT(setFilter(bool)));
|
||||
|
||||
MenuWrapper* leapOptionsMenu = handOptionsMenu->addMenu("Leap Motion");
|
||||
addCheckableActionToQMenuAndActionHash(leapOptionsMenu, MenuOption::LeapMotionOnHMD, 0, false);
|
||||
|
||||
|
|
|
@ -190,7 +190,6 @@ namespace MenuOption {
|
|||
const QString ExpandPaintGLTiming = "Expand /paintGL";
|
||||
const QString ExpandUpdateTiming = "Expand /update";
|
||||
const QString Faceshift = "Faceshift";
|
||||
const QString FilterSixense = "Smooth Sixense Movement";
|
||||
const QString FirstPerson = "First Person";
|
||||
const QString Forward = "Forward";
|
||||
const QString FrameTimer = "Show Timer";
|
||||
|
@ -271,7 +270,6 @@ namespace MenuOption {
|
|||
const QString ShowRealtimeEntityStats = "Show Realtime Entity Stats";
|
||||
const QString ShowWhosLookingAtMe = "Show Who's Looking at Me";
|
||||
const QString SimpleShadows = "Simple";
|
||||
const QString SixenseEnabled = "Enable Hydra Support";
|
||||
const QString ShiftHipsForIdleAnimations = "Shift hips for idle animations";
|
||||
const QString StandingHMDSensorMode = "Standing HMD Sensor Mode";
|
||||
const QString Stars = "Stars";
|
||||
|
|
|
@ -33,4 +33,4 @@ void NullDisplayPlugin::display(GLuint sceneTexture, const glm::uvec2& sceneSize
|
|||
void NullDisplayPlugin::finishFrame() {}
|
||||
|
||||
void NullDisplayPlugin::activate(PluginContainer * container) {}
|
||||
void NullDisplayPlugin::deactivate() {}
|
||||
void NullDisplayPlugin::deactivate(PluginContainer* container) {}
|
||||
|
|
|
@ -16,7 +16,7 @@ public:
|
|||
virtual const QString & getName() const override;
|
||||
|
||||
void activate(PluginContainer * container) override;
|
||||
void deactivate() override;
|
||||
void deactivate(PluginContainer* container) override;
|
||||
|
||||
virtual glm::uvec2 getRecommendedRenderSize() const override;
|
||||
virtual bool hasFocus() const override;
|
||||
|
|
|
@ -72,7 +72,7 @@ void OpenGLDisplayPlugin::activate(PluginContainer * container) {
|
|||
_timer.start(1);
|
||||
}
|
||||
|
||||
void OpenGLDisplayPlugin::deactivate() {
|
||||
void OpenGLDisplayPlugin::deactivate(PluginContainer* container) {
|
||||
_timer.stop();
|
||||
|
||||
makeCurrent();
|
||||
|
|
|
@ -23,8 +23,8 @@ public:
|
|||
virtual void preDisplay() override;
|
||||
virtual void finishFrame() override;
|
||||
|
||||
virtual void activate(PluginContainer * container) override;
|
||||
virtual void deactivate() override;
|
||||
virtual void activate(PluginContainer* container) override;
|
||||
virtual void deactivate(PluginContainer* container) override;
|
||||
|
||||
virtual bool eventFilter(QObject* receiver, QEvent* event) override;
|
||||
|
||||
|
|
|
@ -45,8 +45,8 @@ void WindowOpenGLDisplayPlugin::activate(PluginContainer * container) {
|
|||
customizeContext(container);
|
||||
}
|
||||
|
||||
void WindowOpenGLDisplayPlugin::deactivate() {
|
||||
OpenGLDisplayPlugin::deactivate();
|
||||
void WindowOpenGLDisplayPlugin::deactivate(PluginContainer* container) {
|
||||
OpenGLDisplayPlugin::deactivate(container);
|
||||
destroyWindow();
|
||||
_window = nullptr;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ public:
|
|||
virtual bool hasFocus() const override;
|
||||
virtual QWindow* getWindow() const override;
|
||||
virtual void activate(PluginContainer * container) override;
|
||||
virtual void deactivate() override;
|
||||
virtual void deactivate(PluginContainer* container) override;
|
||||
virtual void installEventFilter(QObject* filter) override;
|
||||
virtual void removeEventFilter(QObject* filter) override;
|
||||
|
||||
|
|
|
@ -248,11 +248,11 @@ void Oculus_0_5_DisplayPlugin::activate(PluginContainer * container) {
|
|||
|
||||
}
|
||||
|
||||
void Oculus_0_5_DisplayPlugin::deactivate() {
|
||||
void Oculus_0_5_DisplayPlugin::deactivate(PluginContainer* container) {
|
||||
_hmdWindow->deleteLater();
|
||||
_hmdWindow = nullptr;
|
||||
|
||||
OculusBaseDisplayPlugin::deactivate();
|
||||
OculusBaseDisplayPlugin::deactivate(container);
|
||||
|
||||
ovrHmd_Destroy(_hmd);
|
||||
_hmd = nullptr;
|
||||
|
|
|
@ -26,7 +26,7 @@ public:
|
|||
virtual const QString & getName() const override;
|
||||
|
||||
virtual void activate(PluginContainer * container) override;
|
||||
virtual void deactivate() override;
|
||||
virtual void deactivate(PluginContainer* container) override;
|
||||
|
||||
|
||||
virtual bool eventFilter(QObject* receiver, QEvent* event) override;
|
||||
|
|
|
@ -220,14 +220,14 @@ void Oculus_0_6_DisplayPlugin::customizeContext(PluginContainer * container) {
|
|||
_sceneFbo->Init(getRecommendedRenderSize());
|
||||
}
|
||||
|
||||
void Oculus_0_6_DisplayPlugin::deactivate() {
|
||||
void Oculus_0_6_DisplayPlugin::deactivate(PluginContainer* container) {
|
||||
makeCurrent();
|
||||
_sceneFbo.reset();
|
||||
_mirrorFbo.reset();
|
||||
doneCurrent();
|
||||
PerformanceTimer::setActive(false);
|
||||
|
||||
OculusBaseDisplayPlugin::deactivate();
|
||||
OculusBaseDisplayPlugin::deactivate(container);
|
||||
|
||||
ovrHmd_Destroy(_hmd);
|
||||
_hmd = nullptr;
|
||||
|
|
|
@ -26,7 +26,7 @@ public:
|
|||
virtual const QString & getName() const override;
|
||||
|
||||
virtual void activate(PluginContainer * container) override;
|
||||
virtual void deactivate() override;
|
||||
virtual void deactivate(PluginContainer* container) override;
|
||||
|
||||
|
||||
virtual bool eventFilter(QObject* receiver, QEvent* event) override;
|
||||
|
|
|
@ -120,7 +120,7 @@ void OpenVrDisplayPlugin::activate(PluginContainer * container) {
|
|||
MainWindowOpenGLDisplayPlugin::activate(container);
|
||||
}
|
||||
|
||||
void OpenVrDisplayPlugin::deactivate() {
|
||||
void OpenVrDisplayPlugin::deactivate(PluginContainer* container) {
|
||||
hmdRefCount--;
|
||||
|
||||
if (hmdRefCount == 0 && _hmd) {
|
||||
|
|
|
@ -18,7 +18,7 @@ public:
|
|||
virtual bool isHmd() const override { return true; }
|
||||
|
||||
virtual void activate(PluginContainer * container) override;
|
||||
virtual void deactivate() override;
|
||||
virtual void deactivate(PluginContainer* container) override;
|
||||
|
||||
virtual glm::uvec2 getRecommendedRenderSize() const override;
|
||||
virtual glm::uvec2 getRecommendedUiSize() const override { return uvec2(1920, 1080); }
|
||||
|
|
|
@ -62,7 +62,7 @@ public:
|
|||
const QString& getName() const { return NAME; }
|
||||
|
||||
virtual void activate(PluginContainer * container) override {};
|
||||
virtual void deactivate() override {};
|
||||
virtual void deactivate(PluginContainer* container) override {};
|
||||
|
||||
virtual void pluginFocusOutEvent() override { focusOutEvent(); }
|
||||
virtual void pluginUpdate(float deltaTime, bool jointsCaptured) override { update(deltaTime, jointsCaptured); }
|
||||
|
|
|
@ -35,7 +35,7 @@ public:
|
|||
virtual void init() override;
|
||||
virtual void deinit() override;
|
||||
virtual void activate(PluginContainer * container) override {};
|
||||
virtual void deactivate() override {};
|
||||
virtual void deactivate(PluginContainer* container) override {};
|
||||
|
||||
virtual void pluginFocusOutEvent() override;
|
||||
virtual void pluginUpdate(float deltaTime, bool jointsCaptured) override;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <NumericalConstants.h>
|
||||
|
||||
#include "NumericalConstants.h"
|
||||
#include <plugins/PluginContainer.h>
|
||||
#include "SixenseManager.h"
|
||||
#include "UserActivityLogger.h"
|
||||
|
||||
|
@ -52,6 +53,12 @@ typedef int (*SixenseTakeIntAndSixenseControllerData)(int, sixenseControllerData
|
|||
|
||||
const QString SixenseManager::NAME = "Sixense";
|
||||
|
||||
const QString MENU_PARENT = "Avatar";
|
||||
const QString MENU_NAME = "Sixense";
|
||||
const QString MENU_PATH = MENU_PARENT + ">" + MENU_NAME;
|
||||
const QString RENDER_CONTROLLERS = "Render Hand Controllers";
|
||||
const QString TOGGLE_SMOOTH = "Smooth Sixense Movement";
|
||||
|
||||
SixenseManager& SixenseManager::getInstance() {
|
||||
static SixenseManager sharedInstance;
|
||||
return sharedInstance;
|
||||
|
@ -82,6 +89,14 @@ void SixenseManager::activate(PluginContainer* container) {
|
|||
// as the "torso" is below it.
|
||||
_neckBase = glm::vec3(NECK_X, -NECK_Y, NECK_Z);
|
||||
|
||||
container->addMenu(MENU_PATH);
|
||||
container->addMenuItem(MENU_PATH, TOGGLE_SMOOTH,
|
||||
[this, &container] { this->setFilter(container->isOptionChecked(TOGGLE_SMOOTH)); },
|
||||
true, true);
|
||||
container->addMenuItem(MENU_PATH, RENDER_CONTROLLERS,
|
||||
[this, &container] { /*this->setShouldRenderController(container->isOptionChecked(RENDER_CONTROLLERS));*/ },
|
||||
true, true);
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
||||
if (!_sixenseLibrary) {
|
||||
|
@ -111,8 +126,13 @@ void SixenseManager::activate(PluginContainer* container) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void SixenseManager::deinit() {
|
||||
#ifdef HAVE_SIXENSE_
|
||||
void SixenseManager::deactivate(PluginContainer* container) {
|
||||
#ifdef HAVE_SIXENSE
|
||||
container->removeMenuItem(MENU_NAME, RENDER_CONTROLLERS);
|
||||
container->removeMenuItem(MENU_NAME, TOGGLE_SMOOTH);
|
||||
container->removeMenu(MENU_PATH);
|
||||
|
||||
_poseStateMap.clear();
|
||||
|
||||
#ifdef __APPLE__
|
||||
SixenseBaseFunction sixenseExit = (SixenseBaseFunction)_sixenseLibrary->resolve("sixenseExit");
|
||||
|
|
|
@ -62,9 +62,8 @@ public:
|
|||
virtual bool isJointController() const override { return true; }
|
||||
const QString& getName() const { return NAME; }
|
||||
|
||||
virtual void deinit() override;
|
||||
virtual void activate(PluginContainer * container) override;
|
||||
virtual void deactivate() override { _poseStateMap.clear(); }
|
||||
virtual void deactivate(PluginContainer* container) override;
|
||||
|
||||
virtual void pluginFocusOutEvent() override { focusOutEvent(); }
|
||||
virtual void pluginUpdate(float deltaTime, bool jointsCaptured) override { update(deltaTime, jointsCaptured); }
|
||||
|
|
|
@ -114,7 +114,7 @@ void ViveControllerManager::activate(PluginContainer* container) {
|
|||
}
|
||||
}
|
||||
|
||||
void ViveControllerManager::deactivate() {
|
||||
void ViveControllerManager::deactivate(PluginContainer* container) {
|
||||
hmdRefCount--;
|
||||
|
||||
if (hmdRefCount == 0 && _hmd) {
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
const QString& getName() const { return NAME; }
|
||||
|
||||
virtual void activate(PluginContainer * container) override;
|
||||
virtual void deactivate() override;
|
||||
virtual void deactivate(PluginContainer* container) override;
|
||||
|
||||
virtual void pluginFocusOutEvent() override { focusOutEvent(); }
|
||||
virtual void pluginUpdate(float deltaTime, bool jointsCaptured) override { update(deltaTime, jointsCaptured); }
|
||||
|
|
|
@ -16,9 +16,9 @@ public:
|
|||
virtual void deinit();
|
||||
|
||||
/// Called when a plugin is being activated for use. May be called multiple times.
|
||||
virtual void activate(PluginContainer * container) = 0;
|
||||
virtual void activate(PluginContainer* container) = 0;
|
||||
/// Called when a plugin is no longer being used. May be called multiple times.
|
||||
virtual void deactivate() = 0;
|
||||
virtual void deactivate(PluginContainer* container) = 0;
|
||||
|
||||
/**
|
||||
* Called by the application during it's idle phase. If the plugin needs to do
|
||||
|
|
|
@ -7,6 +7,11 @@ class GlWindow;
|
|||
|
||||
class PluginContainer {
|
||||
public:
|
||||
virtual void addMenu(const QString& menuName) = 0;
|
||||
virtual void removeMenu(const QString& menuName) = 0;
|
||||
virtual void addMenuItem(const QString& path, const QString& name, std::function<void()> onClicked, bool checkable = false, bool checked = false, const QString& groupName = "") = 0;
|
||||
virtual void removeMenuItem(const QString& menuName, const QString& menuItem) = 0;
|
||||
virtual bool isOptionChecked(const QString& name) = 0;
|
||||
virtual void setIsOptionChecked(const QString& path, bool checked) = 0;
|
||||
virtual GlWindow* getVisibleWindow() = 0;
|
||||
};
|
||||
|
|
|
@ -213,7 +213,6 @@ public:
|
|||
ShowBordersEntityNodes,
|
||||
ShowIKConstraints,
|
||||
SimpleShadows,
|
||||
SixenseEnabled,
|
||||
ShiftHipsForIdleAnimations,
|
||||
Stars,
|
||||
Stats,
|
||||
|
|
Loading…
Reference in a new issue