From c6944afd4c83b994bd0a8a9e7c91313e7c8402eb Mon Sep 17 00:00:00 2001 From: jules Date: Sun, 18 Nov 2012 14:06:55 +0000 Subject: [PATCH] PopupMenu: allowed custom components to have sub-menus. --- .../juce_gui_basics/menus/juce_PopupMenu.cpp | 31 ++++++++++--------- .../juce_gui_basics/menus/juce_PopupMenu.h | 3 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 792aef9cc3..f4e98193e1 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -1227,16 +1227,6 @@ void PopupMenu::addColouredItem (const int itemResultID, } //============================================================================== -void PopupMenu::addCustomItem (const int itemResultID, CustomComponent* const customComponent) -{ - jassert (itemResultID != 0); // 0 is used as a return value to indicate that the user - // didn't pick anything, so you shouldn't use it as the id - // for an item.. - - items.add (new Item (itemResultID, String::empty, true, false, Image::null, - Colours::black, false, customComponent, nullptr, nullptr)); -} - class PopupMenu::NormalComponentWrapper : public PopupMenu::CustomComponent { public: @@ -1266,14 +1256,27 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NormalComponentWrapper); }; +void PopupMenu::addCustomItem (const int itemResultID, CustomComponent* const customComponent) +{ + jassert (itemResultID != 0); // 0 is used as a return value to indicate that the user + // didn't pick anything, so you shouldn't use it as the id + // for an item.. + + items.add (new Item (itemResultID, String::empty, true, false, Image::null, + Colours::black, false, customComponent, nullptr, nullptr)); +} + void PopupMenu::addCustomItem (const int itemResultID, Component* customComponent, int idealWidth, int idealHeight, - const bool triggerMenuItemAutomaticallyWhenClicked) + const bool triggerMenuItemAutomaticallyWhenClicked, + const PopupMenu* subMenu) { - addCustomItem (itemResultID, - new NormalComponentWrapper (customComponent, idealWidth, idealHeight, - triggerMenuItemAutomaticallyWhenClicked)); + items.add (new Item (itemResultID, String::empty, true, false, Image::null, + Colours::black, false, + new NormalComponentWrapper (customComponent, idealWidth, idealHeight, + triggerMenuItemAutomaticallyWhenClicked), + subMenu, nullptr)); } //============================================================================== diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.h b/modules/juce_gui_basics/menus/juce_PopupMenu.h index 4e5b63805b..3658ec7839 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.h +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.h @@ -169,7 +169,8 @@ public: void addCustomItem (int itemResultID, Component* customComponent, int idealWidth, int idealHeight, - bool triggerMenuItemAutomaticallyWhenClicked); + bool triggerMenuItemAutomaticallyWhenClicked, + const PopupMenu* optionalSubMenu = nullptr); /** Appends a sub-menu.