mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-25 17:08:07 +02:00
Sub-view objects report their complete type, not just an enum value
This commit is contained in:
parent
36aad4d1c6
commit
7cff170cf7
@ -551,9 +551,10 @@ bool NyquistEffect::Init()
|
|||||||
for ( auto t :
|
for ( auto t :
|
||||||
TrackList::Get( *project ).Selected< const WaveTrack >() ) {
|
TrackList::Get( *project ).Selected< const WaveTrack >() ) {
|
||||||
const auto displays = WaveTrackView::Get(*t).GetDisplays();
|
const auto displays = WaveTrackView::Get(*t).GetDisplays();
|
||||||
bool hasSpectral =
|
bool hasSpectral = (displays.end() != std::find(
|
||||||
make_iterator_range( displays.begin(), displays.end())
|
displays.begin(), displays.end(),
|
||||||
.contains( WaveTrackViewConstants::Spectrum );
|
WaveTrackSubView::Type{ WaveTrackViewConstants::Spectrum, {} }
|
||||||
|
) );
|
||||||
if ( !hasSpectral ||
|
if ( !hasSpectral ||
|
||||||
!(t->GetSpectrogramSettings().SpectralSelectionEnabled())) {
|
!(t->GetSpectrogramSettings().SpectralSelectionEnabled())) {
|
||||||
bAllowSpectralEditing = false;
|
bAllowSpectralEditing = false;
|
||||||
@ -1097,7 +1098,7 @@ bool NyquistEffect::ProcessOne()
|
|||||||
spectralEditp = mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled()? wxT("T") : wxT("NIL");
|
spectralEditp = mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled()? wxT("T") : wxT("NIL");
|
||||||
auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
||||||
auto format = [&]( decltype(displays[0]) display ){
|
auto format = [&]( decltype(displays[0]) display ){
|
||||||
switch ( display )
|
switch ( display.id )
|
||||||
{
|
{
|
||||||
case Waveform:
|
case Waveform:
|
||||||
return wxT("\"Waveform\"");
|
return wxT("\"Waveform\"");
|
||||||
|
@ -36,8 +36,11 @@ void DoNextPeakFrequency(AudacityProject &project, bool up)
|
|||||||
const WaveTrack *pTrack {};
|
const WaveTrack *pTrack {};
|
||||||
for ( auto wt : tracks.Selected< const WaveTrack >() ) {
|
for ( auto wt : tracks.Selected< const WaveTrack >() ) {
|
||||||
const auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
const auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
||||||
if ( make_iterator_range( displays.begin(), displays.end() )
|
bool hasSpectrum = (displays.end() != std::find(
|
||||||
.contains( WaveTrackViewConstants::Spectrum) ) {
|
displays.begin(), displays.end(),
|
||||||
|
WaveTrackSubView::Type{ WaveTrackViewConstants::Spectrum, {} }
|
||||||
|
) );
|
||||||
|
if ( hasSpectrum ) {
|
||||||
pTrack = wt;
|
pTrack = wt;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -30,10 +30,12 @@ Paul Licameli split from WaveTrackView.cpp
|
|||||||
#include <wx/dcmemory.h>
|
#include <wx/dcmemory.h>
|
||||||
#include <wx/graphics.h>
|
#include <wx/graphics.h>
|
||||||
|
|
||||||
static WaveTrackSubView::RegisteredType reg{ {
|
static WaveTrackSubView::Type sType{
|
||||||
WaveTrackViewConstants::Spectrum,
|
WaveTrackViewConstants::Spectrum,
|
||||||
{ wxT("Spectrogram"), XO("&Spectrogram") }
|
{ wxT("Spectrogram"), XO("&Spectrogram") }
|
||||||
} };
|
};
|
||||||
|
|
||||||
|
static WaveTrackSubView::RegisteredType reg{ sType };
|
||||||
|
|
||||||
SpectrumView::~SpectrumView() = default;
|
SpectrumView::~SpectrumView() = default;
|
||||||
|
|
||||||
@ -78,9 +80,9 @@ void SpectrumView::DoSetMinimized( bool minimized )
|
|||||||
TrackView::DoSetMinimized( minimized );
|
TrackView::DoSetMinimized( minimized );
|
||||||
}
|
}
|
||||||
|
|
||||||
auto SpectrumView::SubViewType() const -> Display
|
auto SpectrumView::SubViewType() const -> const Type &
|
||||||
{
|
{
|
||||||
return WaveTrackViewConstants::Spectrum;
|
return sType;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TrackVRulerControls> SpectrumView::DoGetVRulerControls()
|
std::shared_ptr<TrackVRulerControls> SpectrumView::DoGetVRulerControls()
|
||||||
|
@ -24,7 +24,7 @@ public:
|
|||||||
using WaveTrackSubView::WaveTrackSubView;
|
using WaveTrackSubView::WaveTrackSubView;
|
||||||
~SpectrumView() override;
|
~SpectrumView() override;
|
||||||
|
|
||||||
virtual Display SubViewType() const override;
|
const Type &SubViewType() const override;
|
||||||
|
|
||||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||||
|
|
||||||
|
@ -659,7 +659,7 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu)
|
|||||||
int displayId = OnSetDisplayId;
|
int displayId = OnSetDisplayId;
|
||||||
int nDisplays = 0;
|
int nDisplays = 0;
|
||||||
for ( const auto &type : AllTypes() ) {
|
for ( const auto &type : AllTypes() ) {
|
||||||
if ( iter != end && *iter == type.id ) {
|
if ( iter != end && iter->id == type.id ) {
|
||||||
checkedIds.push_back( displayId );
|
checkedIds.push_back( displayId );
|
||||||
uniqueDisplay = displayId;
|
uniqueDisplay = displayId;
|
||||||
++iter;
|
++iter;
|
||||||
@ -796,9 +796,10 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
|
|
||||||
if ( pTrack ) {
|
if ( pTrack ) {
|
||||||
const auto displays = view.GetDisplays();
|
const auto displays = view.GetDisplays();
|
||||||
bool hasWaveform =
|
bool hasWaveform = (displays.end() != std::find(
|
||||||
make_iterator_range( displays.begin(), displays.end() )
|
displays.begin(), displays.end(),
|
||||||
.contains( WaveTrackViewConstants::Waveform );
|
WaveTrackSubView::Type{ WaveTrackViewConstants::Waveform, {} }
|
||||||
|
) );
|
||||||
if( hasWaveform ){
|
if( hasWaveform ){
|
||||||
POPUP_MENU_SEPARATOR()
|
POPUP_MENU_SEPARATOR()
|
||||||
POPUP_MENU_SUB_MENU(OnWaveColorID, XO("&Wave Color"), WaveColorMenuTable)
|
POPUP_MENU_SUB_MENU(OnWaveColorID, XO("&Wave Color"), WaveColorMenuTable)
|
||||||
@ -819,7 +820,7 @@ void WaveTrackMenuTable::OnMultiView(wxCommandEvent & event)
|
|||||||
bool multi = !view.GetMultiView();
|
bool multi = !view.GetMultiView();
|
||||||
const auto &displays = view.GetDisplays();
|
const auto &displays = view.GetDisplays();
|
||||||
const auto display = displays.empty()
|
const auto display = displays.empty()
|
||||||
? WaveTrackViewConstants::Waveform : *displays.begin();
|
? WaveTrackViewConstants::Waveform : displays.begin()->id;
|
||||||
for (const auto channel : TrackList::Channels(pTrack)) {
|
for (const auto channel : TrackList::Channels(pTrack)) {
|
||||||
auto &channelView = WaveTrackView::Get( *channel );
|
auto &channelView = WaveTrackView::Get( *channel );
|
||||||
channelView.SetMultiView( multi );
|
channelView.SetMultiView( multi );
|
||||||
@ -856,7 +857,8 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const auto displays = view.GetDisplays();
|
const auto displays = view.GetDisplays();
|
||||||
const bool wrongType = !(displays.size() == 1 && displays[0] == id);
|
const bool wrongType =
|
||||||
|
!(displays.size() == 1 && displays[0].id == id);
|
||||||
if (wrongType) {
|
if (wrongType) {
|
||||||
for (auto channel : TrackList::Channels(pTrack)) {
|
for (auto channel : TrackList::Channels(pTrack)) {
|
||||||
channel->SetLastScaleType();
|
channel->SetLastScaleType();
|
||||||
|
@ -889,12 +889,13 @@ WaveTrackView::DoDetailedHitTest
|
|||||||
return { false, results };
|
return { false, results };
|
||||||
}
|
}
|
||||||
|
|
||||||
auto WaveTrackView::GetDisplays() const -> std::vector<Display>
|
auto WaveTrackView::GetDisplays() const
|
||||||
|
-> std::vector< WaveTrackSubView::Type >
|
||||||
{
|
{
|
||||||
BuildSubViews();
|
BuildSubViews();
|
||||||
|
|
||||||
// Collect the display types of visible views and sort them by position
|
// Collect the display types of visible views and sort them by position
|
||||||
using Pair = std::pair< int, Display >;
|
using Pair = std::pair< int, WaveTrackSubView::Type >;
|
||||||
std::vector< Pair > pairs;
|
std::vector< Pair > pairs;
|
||||||
size_t ii = 0;
|
size_t ii = 0;
|
||||||
WaveTrackSubViews::ForEach( [&]( const WaveTrackSubView &subView ){
|
WaveTrackSubViews::ForEach( [&]( const WaveTrackSubView &subView ){
|
||||||
@ -904,7 +905,7 @@ auto WaveTrackView::GetDisplays() const -> std::vector<Display>
|
|||||||
++ii;
|
++ii;
|
||||||
} );
|
} );
|
||||||
std::sort( pairs.begin(), pairs.end() );
|
std::sort( pairs.begin(), pairs.end() );
|
||||||
std::vector<Display> results;
|
std::vector< WaveTrackSubView::Type > results;
|
||||||
for ( const auto &pair : pairs )
|
for ( const auto &pair : pairs )
|
||||||
results.push_back( pair.second );
|
results.push_back( pair.second );
|
||||||
return results;
|
return results;
|
||||||
@ -921,7 +922,7 @@ bool WaveTrackView::ToggleSubView(Display display)
|
|||||||
size_t ii = 0;
|
size_t ii = 0;
|
||||||
size_t found = 0;
|
size_t found = 0;
|
||||||
if ( WaveTrackSubViews::FindIf( [&]( const WaveTrackSubView &subView ) {
|
if ( WaveTrackSubViews::FindIf( [&]( const WaveTrackSubView &subView ) {
|
||||||
if ( subView.SubViewType() == display ) {
|
if ( subView.SubViewType().id == display ) {
|
||||||
found = ii;
|
found = ii;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -982,7 +983,7 @@ void WaveTrackView::DoSetDisplay(Display display, bool exclusive)
|
|||||||
size_t ii = 0;
|
size_t ii = 0;
|
||||||
std::vector< std::pair< WaveTrackViewConstants::Display, size_t > > pairs;
|
std::vector< std::pair< WaveTrackViewConstants::Display, size_t > > pairs;
|
||||||
WaveTrackSubViews::ForEach( [&pairs, &ii]( WaveTrackSubView &subView ){
|
WaveTrackSubViews::ForEach( [&pairs, &ii]( WaveTrackSubView &subView ){
|
||||||
pairs.push_back( { subView.SubViewType(), ii++ } );
|
pairs.push_back( { subView.SubViewType().id, ii++ } );
|
||||||
} );
|
} );
|
||||||
std::sort( pairs.begin(), pairs.end() );
|
std::sort( pairs.begin(), pairs.end() );
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ public:
|
|||||||
explicit
|
explicit
|
||||||
WaveTrackSubView( WaveTrackView &waveTrackView );
|
WaveTrackSubView( WaveTrackView &waveTrackView );
|
||||||
|
|
||||||
virtual Display SubViewType() const = 0;
|
virtual const Type &SubViewType() const = 0;
|
||||||
|
|
||||||
std::pair<
|
std::pair<
|
||||||
bool, // if true, hit-testing is finished
|
bool, // if true, hit-testing is finished
|
||||||
@ -118,7 +118,7 @@ public:
|
|||||||
const std::shared_ptr<WaveTrack> &wt,
|
const std::shared_ptr<WaveTrack> &wt,
|
||||||
CommonTrackView &view);
|
CommonTrackView &view);
|
||||||
|
|
||||||
std::vector<Display> GetDisplays() const;
|
std::vector< WaveTrackSubView::Type > GetDisplays() const;
|
||||||
void SetDisplay(Display display, bool exclusive = true);
|
void SetDisplay(Display display, bool exclusive = true);
|
||||||
|
|
||||||
const WaveTrackSubViewPlacements &SavePlacements() const
|
const WaveTrackSubViewPlacements &SavePlacements() const
|
||||||
|
@ -36,10 +36,12 @@ Paul Licameli split from WaveTrackView.cpp
|
|||||||
#include <wx/graphics.h>
|
#include <wx/graphics.h>
|
||||||
#include <wx/dc.h>
|
#include <wx/dc.h>
|
||||||
|
|
||||||
static WaveTrackSubView::RegisteredType reg{ {
|
static WaveTrackSubView::Type sType{
|
||||||
WaveTrackViewConstants::Waveform,
|
WaveTrackViewConstants::Waveform,
|
||||||
{ wxT("Waveform"), XO("Wa&veform") }
|
{ wxT("Waveform"), XO("Wa&veform") }
|
||||||
} };
|
};
|
||||||
|
|
||||||
|
static WaveTrackSubView::RegisteredType reg{ sType };
|
||||||
|
|
||||||
WaveformView::~WaveformView() = default;
|
WaveformView::~WaveformView() = default;
|
||||||
|
|
||||||
@ -124,9 +126,9 @@ void WaveformView::DoSetMinimized( bool minimized )
|
|||||||
TrackView::DoSetMinimized( minimized );
|
TrackView::DoSetMinimized( minimized );
|
||||||
}
|
}
|
||||||
|
|
||||||
auto WaveformView::SubViewType() const -> Display
|
auto WaveformView::SubViewType() const -> const Type &
|
||||||
{
|
{
|
||||||
return WaveTrackViewConstants::Waveform;
|
return sType;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<TrackVRulerControls> WaveformView::DoGetVRulerControls()
|
std::shared_ptr<TrackVRulerControls> WaveformView::DoGetVRulerControls()
|
||||||
|
@ -26,7 +26,7 @@ public:
|
|||||||
using WaveTrackSubView::WaveTrackSubView;
|
using WaveTrackSubView::WaveTrackSubView;
|
||||||
~WaveformView() override;
|
~WaveformView() override;
|
||||||
|
|
||||||
virtual Display SubViewType() const override;
|
const Type &SubViewType() const override;
|
||||||
|
|
||||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user