18#ifndef __AUDACITY_POPUP_MENU_TABLE__
19#define __AUDACITY_POPUP_MENU_TABLE__
29#include "../commands/CommandManager.h"
36 enum Type { Item, RadioItem, CheckItem };
43 wxCommandEventFunction
func;
52 : SingleItem{ stringId }
79 using GroupItem::GroupItem;
109 virtual void Popup( wxWindow &window,
const wxPoint &pos ) = 0;
120 , mCaption{ caption }
121 , mRegistry{ std::make_unique<Registry::GroupItem<>>(mId) }
126 static std::unique_ptr<PopupMenu> BuildMenu(
137 { table.
RegisterItem( placement, std::move( pItem ) ); }
144 const std::shared_ptr< Registry::GroupItemBase > &
Get(
void *pUserData )
147 this->InitUserData( pUserData );
160 template<
typename Table >
165 return std::make_unique< ComputedItem >(
168 auto &table =
static_cast< Table&
>( visitor.mTable );
185 ?
XXO(
"%s (%s)").Format(
label, extra )
220 std::shared_ptr< Registry::GroupItemBase >
mTop;
221 std::vector< Registry::GroupItemBase* >
mStack;
230template<
typename Derived,
typename Base = PopupMenuTable >
242 return Base::Computed(
factory );
310#define DECLARE_POPUP_MENU(HandlerClass) \
311 void Populate() override;
314#define BEGIN_POPUP_MENU(HandlerClass) \
315void HandlerClass::Populate() { \
316 using My = HandlerClass; \
317 mTop = std::make_shared< PopupSubMenu >( \
318 Id(), Caption(), *this ); \
320 mStack.push_back( mTop.get() );
322#define POPUP_MENU_FN( memFn ) ( (wxCommandEventFunction) (&My::memFn) )
324#define POPUP_MENU_SUB_MENU(stringId, classname, pUserData ) \
325 mStack.back()->items.push_back( \
326 Registry::Indirect(classname::Instance().Get(pUserData)));
329#define END_POPUP_MENU() }
const TranslatableString name
XXO("&Cut/Copy/Paste Toolbar")
Append([](My &table) -> Registry::BaseItemPtr { if(WaveTrackSubViews::slots() > 1) return std::make_unique< Entry >("MultiView", Entry::CheckItem, OnMultiViewID, XXO("&Multi-view"), POPUP_MENU_FN(OnMultiView), table, [](PopupMenuHandler &handler, wxMenu &menu, int id){ auto &table=static_cast< WaveTrackMenuTable & >(handler);auto &track=table.FindWaveTrack();const auto &view=WaveTrackView::Get(track);menu.Check(id, view.GetMultiView());});else return nullptr;})
An explicitly nonlocalized string, not meant for the user to see.
PopupMenuHandler(const PopupMenuHandler &)=delete
PopupMenuHandler()=default
virtual void InitUserData(void *pUserData)=0
Called before the menu items are appended.
PopupMenuHandler & operator=(const PopupMenuHandler &)=delete
Holds a msgid for the translation catalog; may also bind format arguments.
void RegisterItem(GroupItemBase ®istry, const Placement &placement, BaseItemPtr pItem)
std::unique_ptr< BaseItem > BaseItemPtr
AuthorizationHandler handler
static RegisteredToolbarFactory factory
Common abstract base class for items that group other items.