From d6a6b256fe3e880214d9fcc1836c0be07b4a661d Mon Sep 17 00:00:00 2001 From: James Crook Date: Sun, 15 Nov 2020 20:14:12 +0000 Subject: [PATCH] Bug 2584 - "GetInfo: Envelopes" returns incorrect track numbers Also clip count resets to zero on each new track. Also fixed GetInfo: Clips to count all tracks, not just wave tracks. --- src/commands/GetInfoCommand.cpp | 74 ++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/src/commands/GetInfoCommand.cpp b/src/commands/GetInfoCommand.cpp index 69ae9eb03..97cde6d32 100644 --- a/src/commands/GetInfoCommand.cpp +++ b/src/commands/GetInfoCommand.cpp @@ -510,16 +510,19 @@ bool GetInfoCommand::SendClips(const CommandContext &context) auto &tracks = TrackList::Get( context.project ); int i=0; context.StartArray(); - for (auto waveTrack : tracks.Leaders()) { - WaveClipPointers ptrs( waveTrack->SortedClipArray()); - for(WaveClip * pClip : ptrs ) { - context.StartStruct(); - context.AddItem( (double)i, "track" ); - context.AddItem( pClip->GetStartTime(), "start" ); - context.AddItem( pClip->GetEndTime(), "end" ); - context.AddItem( pClip->GetColourIndex(), "color" ); - context.EndStruct(); - } + for (auto t : tracks.Leaders()) { + t->TypeSwitch([&](WaveTrack *waveTrack) { + WaveClipPointers ptrs(waveTrack->SortedClipArray()); + for (WaveClip * pClip : ptrs) { + context.StartStruct(); + context.AddItem((double)i, "track"); + context.AddItem(pClip->GetStartTime(), "start"); + context.AddItem(pClip->GetEndTime(), "end"); + context.AddItem(pClip->GetColourIndex(), "color"); + context.EndStruct(); + } + }); + // Per track numbering counts all tracks i++; } context.EndArray(); @@ -533,30 +536,35 @@ bool GetInfoCommand::SendEnvelopes(const CommandContext &context) int i=0; int j=0; context.StartArray(); - for (auto waveTrack : tracks.Leaders()) { - WaveClipPointers ptrs( waveTrack->SortedClipArray()); - for(WaveClip * pClip : ptrs ) { - context.StartStruct(); - context.AddItem( (double)i, "track" ); - context.AddItem( (double)j, "clip" ); - context.AddItem( pClip->GetStartTime(), "start" ); - Envelope * pEnv = pClip->GetEnvelope(); - context.StartField( "points" ); - context.StartArray(); - double offset = pEnv->GetOffset(); - for( size_t k = 0; k < pEnv->GetNumberOfPoints(); k++) - { - context.StartStruct( ); - context.AddItem( (*pEnv)[k].GetT()+offset, "t" ); - context.AddItem( (*pEnv)[k].GetVal(), "y" ); + for (auto t : tracks.Leaders()) { + t->TypeSwitch([&](WaveTrack *waveTrack) { + WaveClipPointers ptrs(waveTrack->SortedClipArray()); + j = 0; + for (WaveClip * pClip : ptrs) { + context.StartStruct(); + context.AddItem((double)i, "track"); + context.AddItem((double)j, "clip"); + context.AddItem(pClip->GetStartTime(), "start"); + Envelope * pEnv = pClip->GetEnvelope(); + context.StartField("points"); + context.StartArray(); + double offset = pEnv->GetOffset(); + for (size_t k = 0; k < pEnv->GetNumberOfPoints(); k++) + { + context.StartStruct(); + context.AddItem((*pEnv)[k].GetT() + offset, "t"); + context.AddItem((*pEnv)[k].GetVal(), "y"); + context.EndStruct(); + } + context.EndArray(); + context.EndField(); + context.AddItem(pClip->GetEndTime(), "end"); context.EndStruct(); + j++; } - context.EndArray(); - context.EndField(); - context.AddItem( pClip->GetEndTime(), "end" ); - context.EndStruct(); - j++; - } + }); + // Per track numbering counts all tracks + i++; } context.EndArray(); @@ -601,8 +609,6 @@ bool GetInfoCommand::SendLabels(const CommandContext &context) } context.EndArray(); - - return true; }