mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-17 16:40:07 +02:00
Break dependency cycle introduced at a69fba9
This commit is contained in:
parent
f2ed21f9e5
commit
2ec2ad378d
@ -280,7 +280,7 @@ static const EnumValueSymbol kZoomTypeStrings[nZoomTypes] =
|
|||||||
|
|
||||||
static EnumValueSymbols DiscoverSubViewTypes()
|
static EnumValueSymbols DiscoverSubViewTypes()
|
||||||
{
|
{
|
||||||
const auto &types = WaveTrackSubView::AllTypes();
|
const auto &types = WaveTrackSubViewType::All();
|
||||||
return transform_container< EnumValueSymbols >(
|
return transform_container< EnumValueSymbols >(
|
||||||
types, std::mem_fn( &WaveTrackSubView::Type::name ) );
|
types, std::mem_fn( &WaveTrackSubView::Type::name ) );
|
||||||
}
|
}
|
||||||
@ -360,7 +360,7 @@ bool SetTrackVisualsCommand::ApplyInner(const CommandContext & context, Track *
|
|||||||
|
|
||||||
if( wt && bHasDisplayType )
|
if( wt && bHasDisplayType )
|
||||||
WaveTrackView::Get( *wt ).SetDisplay(
|
WaveTrackView::Get( *wt ).SetDisplay(
|
||||||
WaveTrackSubView::AllTypes()[ mDisplayType ].id );
|
WaveTrackSubViewType::All()[ mDisplayType ].id );
|
||||||
if( wt && bHasScaleType )
|
if( wt && bHasScaleType )
|
||||||
wt->GetIndependentWaveformSettings().scaleType =
|
wt->GetIndependentWaveformSettings().scaleType =
|
||||||
(mScaleType==kLinear) ?
|
(mScaleType==kLinear) ?
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#include "../Prefs.h"
|
#include "../Prefs.h"
|
||||||
#include "../ShuttleGui.h"
|
#include "../ShuttleGui.h"
|
||||||
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h"
|
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
|
||||||
|
|
||||||
int TracksPrefs::iPreferencePinned = -1;
|
int TracksPrefs::iPreferencePinned = -1;
|
||||||
|
|
||||||
@ -149,11 +149,11 @@ static TracksViewModeEnumSetting viewModeSetting()
|
|||||||
{
|
{
|
||||||
// Do a delayed computation, so that registration of sub-view types completes
|
// Do a delayed computation, so that registration of sub-view types completes
|
||||||
// first
|
// first
|
||||||
const auto &types = WaveTrackSubView::AllTypes();
|
const auto &types = WaveTrackSubViewType::All();
|
||||||
auto symbols = transform_container< EnumValueSymbols >(
|
auto symbols = transform_container< EnumValueSymbols >(
|
||||||
types, std::mem_fn( &WaveTrackSubView::Type::name ) );
|
types, std::mem_fn( &WaveTrackSubViewType::name ) );
|
||||||
auto ids = transform_container< std::vector< WaveTrackSubView::Display > >(
|
auto ids = transform_container< std::vector< WaveTrackSubViewType::Display > >(
|
||||||
types, std::mem_fn( &WaveTrackSubView::Type::id ) );
|
types, std::mem_fn( &WaveTrackSubViewType::id ) );
|
||||||
return {
|
return {
|
||||||
key3,
|
key3,
|
||||||
symbols,
|
symbols,
|
||||||
|
@ -35,7 +35,7 @@ static WaveTrackSubView::Type sType{
|
|||||||
{ wxT("Spectrogram"), XO("&Spectrogram") }
|
{ wxT("Spectrogram"), XO("&Spectrogram") }
|
||||||
};
|
};
|
||||||
|
|
||||||
static WaveTrackSubView::RegisteredType reg{ sType };
|
static WaveTrackSubViewType::RegisteredType reg{ sType };
|
||||||
|
|
||||||
SpectrumView::~SpectrumView() = default;
|
SpectrumView::~SpectrumView() = default;
|
||||||
|
|
||||||
|
@ -623,9 +623,9 @@ void WaveTrackMenuTable::InitUserData(void *pUserData)
|
|||||||
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WaveTrackSubView::Types AllTypes()
|
static std::vector<WaveTrackSubViewType> AllTypes()
|
||||||
{
|
{
|
||||||
auto result = WaveTrackSubView::AllTypes();
|
auto result = WaveTrackSubViewType::All();
|
||||||
if ( result.size() > reserveDisplays ) {
|
if ( result.size() > reserveDisplays ) {
|
||||||
wxASSERT( false );
|
wxASSERT( false );
|
||||||
result.resize( reserveDisplays );
|
result.resize( reserveDisplays );
|
||||||
|
@ -40,53 +40,6 @@ Paul Licameli split from TrackPanel.cpp
|
|||||||
#include "../../../ui/ButtonHandle.h"
|
#include "../../../ui/ButtonHandle.h"
|
||||||
#include "../../../../TrackInfo.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 {
|
namespace {
|
||||||
|
|
||||||
using WaveTrackSubViewPtrs = std::vector< std::shared_ptr< WaveTrackSubView > >;
|
using WaveTrackSubViewPtrs = std::vector< std::shared_ptr< WaveTrackSubView > >;
|
||||||
|
@ -13,8 +13,8 @@ Paul Licameli split from class WaveTrack
|
|||||||
|
|
||||||
#include "../../../ui/CommonTrackView.h"
|
#include "../../../ui/CommonTrackView.h"
|
||||||
#include "../../../../ClientData.h"
|
#include "../../../../ClientData.h"
|
||||||
#include "audacity/ComponentInterface.h"
|
|
||||||
namespace WaveTrackViewConstants{ enum Display : int; }
|
namespace WaveTrackViewConstants{ enum Display : int; }
|
||||||
|
struct WaveTrackSubViewType;
|
||||||
|
|
||||||
class CutlineHandle;
|
class CutlineHandle;
|
||||||
class TranslatableString;
|
class TranslatableString;
|
||||||
@ -26,26 +26,7 @@ class WaveTrackSubView : public CommonTrackView
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
using Display = WaveTrackViewConstants::Display;
|
using Display = WaveTrackViewConstants::Display;
|
||||||
struct Type {
|
using Type = WaveTrackSubViewType;
|
||||||
// Identifies the type session-wide, and determines relative position in
|
|
||||||
// menus listing all types
|
|
||||||
Display id;
|
|
||||||
// The translation is suitable for the track control panel drop-down,
|
|
||||||
// and it may contain a menu accelerator
|
|
||||||
EnumValueSymbol name;
|
|
||||||
|
|
||||||
bool operator < ( const Type &other ) const { return id < other.id; }
|
|
||||||
bool operator == ( const Type &other ) const { return id == other.id; }
|
|
||||||
};
|
|
||||||
using Types = std::vector< Type >;
|
|
||||||
|
|
||||||
// Typically a file scope statically constructed object
|
|
||||||
struct RegisteredType {
|
|
||||||
RegisteredType( Type type );
|
|
||||||
};
|
|
||||||
|
|
||||||
// Discover all registered types
|
|
||||||
static const Types &AllTypes();
|
|
||||||
|
|
||||||
explicit
|
explicit
|
||||||
WaveTrackSubView( WaveTrackView &waveTrackView );
|
WaveTrackSubView( WaveTrackView &waveTrackView );
|
||||||
|
@ -43,3 +43,51 @@ WaveTrackViewConstants::ConvertLegacyDisplayValue(int oldValue)
|
|||||||
}
|
}
|
||||||
return newValue;
|
return newValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
class Registry {
|
||||||
|
public:
|
||||||
|
using Type = WaveTrackSubViewType;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WaveTrackSubViewType::RegisteredType::RegisteredType( WaveTrackSubViewType type )
|
||||||
|
{
|
||||||
|
GetRegistry().Append( std::move( type ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
auto WaveTrackSubViewType::All()
|
||||||
|
-> const std::vector<WaveTrackSubViewType> &
|
||||||
|
{
|
||||||
|
return GetRegistry().Get();
|
||||||
|
}
|
||||||
|
@ -79,4 +79,32 @@ namespace WaveTrackViewConstants
|
|||||||
Display ConvertLegacyDisplayValue(int oldValue);
|
Display ConvertLegacyDisplayValue(int oldValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "audacity/ComponentInterface.h" // for EnumValueSymbol
|
||||||
|
|
||||||
|
struct WaveTrackSubViewType {
|
||||||
|
using Display = WaveTrackViewConstants::Display;
|
||||||
|
|
||||||
|
// Identifies the type session-wide, and determines relative position in
|
||||||
|
// menus listing all types
|
||||||
|
Display id;
|
||||||
|
// The translation is suitable for the track control panel drop-down,
|
||||||
|
// and it may contain a menu accelerator
|
||||||
|
EnumValueSymbol name;
|
||||||
|
|
||||||
|
bool operator < ( const WaveTrackSubViewType &other ) const
|
||||||
|
{ return id < other.id; }
|
||||||
|
|
||||||
|
bool operator == ( const WaveTrackSubViewType &other ) const
|
||||||
|
{ return id == other.id; }
|
||||||
|
|
||||||
|
// Typically a file scope statically constructed object
|
||||||
|
struct RegisteredType {
|
||||||
|
RegisteredType( WaveTrackSubViewType type );
|
||||||
|
};
|
||||||
|
|
||||||
|
// Discover all registered types
|
||||||
|
static const std::vector<WaveTrackSubViewType> &All();
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,7 +41,7 @@ static WaveTrackSubView::Type sType{
|
|||||||
{ wxT("Waveform"), XO("Wa&veform") }
|
{ wxT("Waveform"), XO("Wa&veform") }
|
||||||
};
|
};
|
||||||
|
|
||||||
static WaveTrackSubView::RegisteredType reg{ sType };
|
static WaveTrackSubViewType::RegisteredType reg{ sType };
|
||||||
|
|
||||||
WaveformView::~WaveformView() = default;
|
WaveformView::~WaveformView() = default;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user