Xenakios on Discord made suggestions and I came up with this example:
class PresetNameAndList : public Component
{
public:
class ModalManager : public ModalComponentManager::Callback
{
public:
ModalManager(std::function<void(int)> doStuff_) : doStuff(doStuff_) {}
void modalStateFinished(int returnValue)
{
doStuff(returnValue);
}
std::function<void(int)> doStuff;
};
PresetNameAndList()
{
ScopedPointer<PopupMenu> bassSubMenu = new PopupMenu();
bassSubMenu->addItem(1, "preset1", true, true);
bassSubMenu->addItem(2, "preset2", true, false);
bassSubMenu->addItem(3, "preset3", true, false);
popupMenu.addSubMenu("BASS", *bassSubMenu, true);
popupMenu.addSeparator();
popupMenu.addSectionHeader("Section Header");
ScopedPointer<PopupMenu> leadSubMenu = new PopupMenu();
leadSubMenu->addItem(4, "preset1", true, true);
leadSubMenu->addItem(5, "preset2", true, false);
leadSubMenu->addItem(6, "preset3", true, false);
popupMenu.addSubMenu("LEAD", *leadSubMenu, true);
};
~PresetNameAndList() = default;
protected:
void mouseDown(const MouseEvent & e)
{
popupMenu.showMenuAsync(PopupMenu::Options(), new ModalManager([this](int choice)
{
// do work here
}));
}
PopupMenu popupMenu;
};