From 040f7c86ea39ba6470bd71495dc88914890cd9a8 Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 1 Jul 2015 09:05:26 -0700 Subject: [PATCH] Working on plugin menu items --- interface/src/Application.cpp | 20 +++++++++++++++++-- interface/src/Application.h | 2 +- .../plugins/src/plugins/PluginContainer.h | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 28efe433f5..7d093d2b05 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4799,6 +4799,8 @@ const DisplayPlugin * Application::getActiveDisplayPlugin() const { return ((Application*)this)->getActiveDisplayPlugin(); } +static QVector> _currentDisplayPluginActions; + void Application::updateDisplayMode() { auto menu = Menu::getInstance(); auto displayPlugins = getDisplayPlugins(); @@ -4822,6 +4824,14 @@ void Application::updateDisplayMode() { oldDisplayPlugin->removeEventFilter(qApp); } + if (!_currentDisplayPluginActions.isEmpty()) { + auto menu = Menu::getInstance(); + foreach(auto itemInfo, _currentDisplayPluginActions) { + menu->removeMenuItem(itemInfo.first, itemInfo.second); + } + _currentDisplayPluginActions.clear(); + } + if (newDisplayPlugin) { _offscreenContext->makeCurrent(); newDisplayPlugin->activate(this); @@ -4850,8 +4860,14 @@ void Application::updateDisplayMode() { Q_ASSERT_X(_displayPlugin, "Application::updateDisplayMode", "could not find an activated display plugin"); } -void Application::addMenuItem(const QString& path, std::function onClicked, bool checkable, bool checked, const QString& groupName) { - +void Application::addMenuItem(const QString& path, const QString& name, std::function onClicked, bool checkable, bool checked, const QString& groupName) { + auto menu = Menu::getInstance(); + MenuWrapper* parentItem = menu->getMenu(path); + QAction* action = parentItem->addAction(name); + connect(action, &QAction::triggered, [=] { + onClicked(); + }); + _currentDisplayPluginActions.push_back({ path, name }); } GlWindow* Application::getVisibleWindow() { diff --git a/interface/src/Application.h b/interface/src/Application.h index 0aef17a357..4ee4eceded 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -296,7 +296,7 @@ public: virtual qreal getDevicePixelRatio(); // Plugin container support - virtual void addMenuItem(const QString& path, std::function onClicked, bool checkable, bool checked, const QString& groupName); + virtual void addMenuItem(const QString& path, const QString& name, std::function onClicked, bool checkable, bool checked, const QString& groupName); virtual GlWindow* getVisibleWindow(); private: diff --git a/libraries/plugins/src/plugins/PluginContainer.h b/libraries/plugins/src/plugins/PluginContainer.h index 687a06567d..937c4e99e4 100644 --- a/libraries/plugins/src/plugins/PluginContainer.h +++ b/libraries/plugins/src/plugins/PluginContainer.h @@ -6,6 +6,6 @@ class GlWindow; class PluginContainer { public: - virtual void addMenuItem(const QString& path, std::function onClicked, bool checkable = false, bool checked = false, const QString& groupName = "") = 0; + virtual void addMenuItem(const QString& path, const QString& name, std::function onClicked, bool checkable = false, bool checked = false, const QString& groupName = "") = 0; virtual GlWindow* getVisibleWindow() = 0; };