11#ifndef __AUDACITY_REGISTRY__
12#define __AUDACITY_REGISTRY__
42 : type(type_),
name(name_) {}
45 {
return name == other.
name && type == other.type; }
50 return std::make_pair( type,
name ) <
51 std::make_pair( other.type, other.
name );
65 :
name{ internalName }
98 {
return std::make_unique<IndirectItem>(ptr); }
109 template<
typename VisitorType >
136 :
BaseItem{ internalName }, items{
std::move( items_ ) }
156 virtual Ordering GetOrdering()
const;
162 template<
typename VisitorType = ComputedItem::DefaultVisitor >
166 template<
typename... Args >
169 {
Append( std::forward< Args >( args )... ); }
175 template<
typename Arg,
typename... Args >
176 void Append( Arg &&arg, Args&&... moreArgs )
184 Append( std::forward<Args>(moreArgs)... );
190 items.push_back( std::move( ptr ) );
201 return factory(
dynamic_cast< VisitorType&
>( visitor ) );
203 AppendOne( std::make_unique<ComputedItem>( adaptedFactory ) );
206 template<
typename Subtype>
208 {
AppendOne( std::make_unique<IndirectItem>(ptr) ); }
231 void RegisterItem( GroupItemBase ®istry,
const Placement &placement,
248 RegistryClass::Registry(), placement, std::move( pItem ) );
259 using Path = std::vector< Identifier >;
274 REGISTRIES_API
void Visit(
286 struct REGISTRIES_API
289 using Pair = std::pair< Literal, Literal >;
300 void operator () ()
override;
const TranslatableString name
An explicitly nonlocalized string, not meant for the user to see.
Generates classes whose instances register items at construction.
RegisteredItem(std::unique_ptr< Item > pItem, const Placement &placement)
std::vector< Identifier > Path
void RegisterItem(GroupItemBase ®istry, const Placement &placement, BaseItemPtr pItem)
std::unique_ptr< BaseItem > BaseItemPtr
std::vector< BaseItemPtr > BaseItemPtrs
void Visit(Visitor &visitor, BaseItem *pTopItem, const GroupItemBase *pRegistry)
std::unique_ptr< IndirectItem > Indirect(const BaseItemSharedPtr &ptr)
A convenience function.
std::shared_ptr< BaseItem > BaseItemSharedPtr
static RegisteredToolbarFactory factory
OrderingHint orderingHint
BaseItem(const Identifier &internalName)
Factory< DefaultVisitor > factory
ComputedItem(const Factory< DefaultVisitor > &factory_)
std::function< BaseItemSharedPtr(VisitorType &) > Factory
Common abstract base class for items that group other items.
GroupItemBase(const GroupItemBase &) PROHIBITED
Ordering
Choose treatment of the children of the group when merging trees.
GroupItemBase(const Identifier &internalName, BaseItemPtrs &&items_)
void Append(Arg &&arg, Args &&... moreArgs)
void AppendOne(const ComputedItem::Factory< VisitorType > &factory)
GroupItem(const Identifier &internalName, Args &&... args)
void AppendOne(const std::shared_ptr< Subtype > &ptr)
void AppendOne(BaseItemPtr &&ptr)
An item that delegates to another held in a shared pointer.
IndirectItem(const BaseItemSharedPtr &ptr_)
enum Registry::OrderingHint::Type Unspecified
OrderingHint(Type type_, const wxString &name_={})
bool operator==(const OrderingHint &other) const
bool operator<(const OrderingHint &other) const
std::vector< Pair > Pairs
std::pair< Literal, Literal > Pair
Placement(const wxString &path_, const OrderingHint &hint_={})