mirror of
https://github.com/cookiengineer/audacity
synced 2026-01-02 06:08:44 +01:00
Don't hard-code the exhaustive list of sub-view types...
... in Wave track context menu and SetTrackVisualsCommand Instead, discover them through a registry. This eliminates some duplication of string constants and prepares for non-intrusive generalization to more kinds of sub-views. This makes the command agnostic about which subview types are known, but the context menu still has special case treatment for Spectrogram Settings and Wave Colors.
This commit is contained in:
@@ -40,6 +40,53 @@ Paul Licameli split from TrackPanel.cpp
|
||||
#include "../../../ui/ButtonHandle.h"
|
||||
#include "../../../../TrackInfo.h"
|
||||
|
||||
namespace {
|
||||
class Registry {
|
||||
public:
|
||||
using Type = WaveTrackSubView::Type;
|
||||
using Types = std::vector< Type >;
|
||||
|
||||
void Append( Type type )
|
||||
{
|
||||
types.emplace_back( std::move( type ) );
|
||||
sorted = false;
|
||||
}
|
||||
|
||||
Types &Get()
|
||||
{
|
||||
if ( !sorted ) {
|
||||
auto begin = types.begin(), end = types.end();
|
||||
std::sort( begin, end );
|
||||
// We don't want duplicate ids!
|
||||
wxASSERT( end == std::adjacent_find( begin, end ) );
|
||||
sorted = true;
|
||||
}
|
||||
return types;
|
||||
}
|
||||
|
||||
private:
|
||||
Types types;
|
||||
bool sorted = false;
|
||||
};
|
||||
|
||||
Registry &GetRegistry()
|
||||
{
|
||||
static Registry result;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
WaveTrackSubView::RegisteredType::RegisteredType( Type type )
|
||||
{
|
||||
GetRegistry().Append( std::move( type ) );
|
||||
}
|
||||
|
||||
// static
|
||||
auto WaveTrackSubView::AllTypes() -> const Types &
|
||||
{
|
||||
return GetRegistry().Get();
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
using WaveTrackSubViewPtrs = std::vector< std::shared_ptr< WaveTrackSubView > >;
|
||||
|
||||
Reference in New Issue
Block a user