From 22a8f88195da522a270d649d7d44c68d0e7a8ade Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sat, 31 May 2014 13:24:07 -0700 Subject: [PATCH] add support for Menu.menuExists() and menu.menuItemExists() --- examples/menuExample.js | 130 +++++++++++------- interface/src/Menu.cpp | 21 ++- interface/src/Menu.h | 2 + .../src/scripting/MenuScriptingInterface.cpp | 17 +++ .../src/scripting/MenuScriptingInterface.h | 2 + 5 files changed, 118 insertions(+), 54 deletions(-) diff --git a/examples/menuExample.js b/examples/menuExample.js index 00c6418269..c459a8d73d 100644 --- a/examples/menuExample.js +++ b/examples/menuExample.js @@ -13,68 +13,88 @@ function setupMenus() { - Menu.addMenu("Foo"); - Menu.addMenuItem("Foo","Foo item 1", "SHIFT+CTRL+F" ); - Menu.addMenuItem("Foo","Foo item 2", "SHIFT+F" ); - Menu.addMenuItem("Foo","Foo item 3", "META+F" ); - Menu.addMenuItem({ - menuName: "Foo", - menuItemName: "Foo item 4", - isCheckable: true, - isChecked: true - }); + if (!Menu.menuExists("Foo")) { + Window.alert("Adding Menu Foo!"); + Menu.addMenu("Foo"); + Menu.addMenuItem("Foo","Foo item 1", "SHIFT+CTRL+F" ); + Menu.addMenuItem("Foo","Foo item 2", "SHIFT+F" ); + Menu.addMenuItem("Foo","Foo item 3", "META+F" ); - Menu.addMenuItem({ - menuName: "Foo", - menuItemName: "Foo item 5", - shortcutKey: "ALT+F", - isCheckable: true - }); + Menu.addMenuItem({ + menuName: "Foo", + menuItemName: "Foo item 4", + isCheckable: true, + isChecked: true + }); + + Menu.addMenuItem({ + menuName: "Foo", + menuItemName: "Foo item 5", + shortcutKey: "ALT+F", + isCheckable: true + }); - Menu.addSeparator("Foo","Removable Tools"); - Menu.addMenuItem("Foo","Remove Foo item 4"); - Menu.addMenuItem("Foo","Remove Foo"); - Menu.addMenuItem("Foo","Remove Bar-Spam"); - Menu.addMenu("Bar"); + Menu.addSeparator("Foo","Removable Tools"); + Menu.addMenuItem("Foo","Remove Foo item 4"); + Menu.addMenuItem("Foo","Remove Foo"); + Menu.addMenuItem("Foo","Remove Bar-Spam"); - Menu.addMenuItem("Bar","Bar item 1", "b"); - Menu.addMenuItem({ - menuName: "Bar", - menuItemName: "Bar item 2", - shortcutKeyEvent: { text: "B", isControl: true } - }); + Menu.addMenuItem("Foo","Remove Spam item 2"); - Menu.addMenu("Bar > Spam"); - Menu.addMenuItem("Bar > Spam","Spam item 1"); - Menu.addMenuItem({ - menuName: "Bar > Spam", - menuItemName: "Spam item 2", - isCheckable: true, - isChecked: false - }); + Menu.addMenuItem({ + menuName: "Foo", + menuItemName: "Remove Spam item 2" + }); + } else { + Window.alert("Menu Foo already exists!"); + } + + if (!Menu.menuExists("Bar")) { + Window.alert("Adding Menu Bar!"); + Menu.addMenu("Bar"); + Menu.addMenuItem("Bar","Bar item 1", "b"); + Menu.addMenuItem({ + menuName: "Bar", + menuItemName: "Bar item 2", + shortcutKeyEvent: { text: "B", isControl: true } + }); + + Menu.addMenu("Bar > Spam"); + Menu.addMenuItem("Bar > Spam","Spam item 1"); + Menu.addMenuItem({ + menuName: "Bar > Spam", + menuItemName: "Spam item 2", + isCheckable: true, + isChecked: false + }); - Menu.addSeparator("Bar > Spam","Other Items"); - Menu.addMenuItem("Bar > Spam","Remove Spam item 2"); - Menu.addMenuItem("Foo","Remove Spam item 2"); + Menu.addSeparator("Bar > Spam","Other Items"); + Menu.addMenuItem("Bar > Spam","Remove Spam item 2"); + } - Menu.addMenuItem({ - menuName: "Foo", - menuItemName: "Remove Spam item 2" - }); - Menu.addMenuItem({ - menuName: "Edit", - menuItemName: "before Cut", - beforeItem: "Cut" - }); - - Menu.addMenuItem({ - menuName: "Edit", - menuItemName: "after Nudge", - afterItem: "Nudge" - }); + if (Menu.menuItemExists("Edit","Cut")) { + Window.alert("Menu Item Cut exist adding 'before Cut'."); + Menu.addMenuItem({ + menuName: "Edit", + menuItemName: "before Cut", + beforeItem: "Cut" + }); + } else { + Window.alert("Menu Item Cut doesn't exist!"); + } + if (Menu.menuItemExists("Edit","Nudge")) { + Window.alert("Menu Item Nudge exist adding 'after Nudge'."); + Menu.addMenuItem({ + menuName: "Edit", + menuItemName: "after Nudge", + afterItem: "Nudge" + }); + } else { + Window.alert("Menu Item Nudge doesn't exist!"); + } } function scriptEnding() { @@ -82,6 +102,10 @@ function scriptEnding() { Menu.removeMenu("Foo"); Menu.removeMenu("Bar"); + + Menu.removeMenuItem("Edit", "before Cut"); + Menu.removeMenuItem("Edit", "after Nudge"); + } function menuItemEvent(menuItem) { diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index c865f9c6ef..6121e5c458 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -1650,6 +1650,16 @@ void Menu::removeMenu(const QString& menuName) { } } +bool Menu::menuExists(const QString& menuName) { + QAction* action = getMenuAction(menuName); + + // only proceed if the menu actually exists + if (action) { + return true; + } + return false; +} + void Menu::addSeparator(const QString& menuName, const QString& separatorName) { QMenu* menuObj = getMenu(menuName); if (menuObj) { @@ -1725,8 +1735,17 @@ void Menu::removeMenuItem(const QString& menu, const QString& menuitem) { QMenu* menuObj = getMenu(menu); if (menuObj) { removeAction(menuObj, menuitem); + QMenuBar::repaint(); } - QMenuBar::repaint(); +}; + +bool Menu::menuItemExists(const QString& menu, const QString& menuitem) { + QMenu* menuObj = getMenu(menu); + QAction* menuItemAction = _actionHash.value(menuitem); + if (menuObj && menuItemAction) { + return true; + } + return false; }; QString Menu::getSnapshotsLocation() const { diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 18d6fbfda0..020cd651d2 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -169,10 +169,12 @@ public slots: QMenu* addMenu(const QString& menuName); void removeMenu(const QString& menuName); + bool menuExists(const QString& menuName); void addSeparator(const QString& menuName, const QString& separatorName); void removeSeparator(const QString& menuName, const QString& separatorName); void addMenuItem(const MenuItemProperties& properties); void removeMenuItem(const QString& menuName, const QString& menuitem); + bool menuItemExists(const QString& menuName, const QString& menuitem); bool isOptionChecked(const QString& menuOption) const; void setIsOptionChecked(const QString& menuOption, bool isChecked); diff --git a/interface/src/scripting/MenuScriptingInterface.cpp b/interface/src/scripting/MenuScriptingInterface.cpp index 11d681bfc7..277c611f04 100644 --- a/interface/src/scripting/MenuScriptingInterface.cpp +++ b/interface/src/scripting/MenuScriptingInterface.cpp @@ -35,6 +35,14 @@ void MenuScriptingInterface::removeMenu(const QString& menu) { QMetaObject::invokeMethod(Menu::getInstance(), "removeMenu", Q_ARG(const QString&, menu)); } +bool MenuScriptingInterface::menuExists(const QString& menu) { + bool result; + QMetaObject::invokeMethod(Menu::getInstance(), "menuExists", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, result), + Q_ARG(const QString&, menu)); + return result; +} + void MenuScriptingInterface::addSeparator(const QString& menuName, const QString& separatorName) { QMetaObject::invokeMethod(Menu::getInstance(), "addSeparator", Q_ARG(const QString&, menuName), @@ -67,6 +75,15 @@ void MenuScriptingInterface::removeMenuItem(const QString& menu, const QString& Q_ARG(const QString&, menuitem)); }; +bool MenuScriptingInterface::menuItemExists(const QString& menu, const QString& menuitem) { + bool result; + QMetaObject::invokeMethod(Menu::getInstance(), "menuItemExists", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(bool, result), + Q_ARG(const QString&, menu), + Q_ARG(const QString&, menuitem)); + return result; +} + bool MenuScriptingInterface::isOptionChecked(const QString& menuOption) { bool result; QMetaObject::invokeMethod(Menu::getInstance(), "isOptionChecked", Qt::BlockingQueuedConnection, diff --git a/interface/src/scripting/MenuScriptingInterface.h b/interface/src/scripting/MenuScriptingInterface.h index d127bd6edc..fda8207780 100644 --- a/interface/src/scripting/MenuScriptingInterface.h +++ b/interface/src/scripting/MenuScriptingInterface.h @@ -33,6 +33,7 @@ private slots: public slots: void addMenu(const QString& menuName); void removeMenu(const QString& menuName); + bool menuExists(const QString& menuName); void addSeparator(const QString& menuName, const QString& separatorName); void removeSeparator(const QString& menuName, const QString& separatorName); @@ -42,6 +43,7 @@ public slots: void addMenuItem(const QString& menuName, const QString& menuitem); void removeMenuItem(const QString& menuName, const QString& menuitem); + bool menuItemExists(const QString& menuName, const QString& menuitem); bool isOptionChecked(const QString& menuOption); void setIsOptionChecked(const QString& menuOption, bool isChecked);