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 }
81 using ConcreteGroupItem< false >::ConcreteGroupItem;
111 virtual void Popup( wxWindow &window,
const wxPoint &pos ) = 0;
122 , mCaption{ caption }
123 , mRegistry{ std::make_unique<Registry::TransparentGroupItem<>>( mId ) }
128 static std::unique_ptr<PopupMenu> BuildMenu(
139 { table.
RegisterItem( placement, std::move( pItem ) ); }
146 const std::shared_ptr< Registry::GroupItem > &
Get(
void *pUserData )
149 this->InitUserData( pUserData );
162 template<
typename Table >
167 return std::make_unique< ComputedItem >(
170 auto &table =
static_cast< Table&
>( visitor.mTable );
187 ?
XXO(
"%s (%s)").Format(
label, extra )
222 std::shared_ptr< Registry::GroupItem >
mTop;
223 std::vector< Registry::GroupItem* >
mStack;
232template<
typename Derived,
typename Base = PopupMenuTable >
244 return Base::Computed(
factory );
312#define DECLARE_POPUP_MENU(HandlerClass) \
313 void Populate() override;
316#define BEGIN_POPUP_MENU(HandlerClass) \
317void HandlerClass::Populate() { \
318 using My = HandlerClass; \
319 mTop = std::make_shared< PopupSubMenu >( \
320 Id(), Caption(), *this ); \
322 mStack.push_back( mTop.get() );
324#define POPUP_MENU_FN( memFn ) ( (wxCommandEventFunction) (&My::memFn) )
326#define POPUP_MENU_SUB_MENU(stringId, classname, pUserData ) \
327 mStack.back()->items.push_back( \
328 Registry::Shared( classname::Instance().Get( pUserData ) ) );
331#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.
std::unique_ptr< BaseItem > BaseItemPtr
void RegisterItem(GroupItem ®istry, const Placement &placement, BaseItemPtr pItem)
AuthorizationHandler handler
static RegisteredToolbarFactory factory