Audacity 3.2.0
Public Member Functions | Static Public Member Functions | Private Types | Private Attributes | List of all members
WaveTrackLocations Class Referencefinal

#include <WaveTrackLocation.h>

Inheritance diagram for WaveTrackLocations:
[legend]
Collaboration diagram for WaveTrackLocations:
[legend]

Public Member Functions

 ~WaveTrackLocations () override
 
PointerType Clone () const override
 
void Update (const WaveTrack &track)
 
const std::vector< Location > & Get () const
 
- Public Member Functions inherited from ClientData::Cloneable< ClientData::UniquePtr >
virtual ~Cloneable ()
 
virtual PointerType Clone () const=0
 

Static Public Member Functions

static WaveTrackLocationsGet (const WaveTrack &track)
 

Private Types

using Location = WaveTrackLocation
 

Private Attributes

std::vector< LocationmDisplayLocationsCache
 

Additional Inherited Members

- Public Types inherited from ClientData::Cloneable< ClientData::UniquePtr >
using Base = Cloneable
 
using PointerType = ClientData::UniquePtr< Base >
 

Detailed Description

Definition at line 59 of file WaveTrackLocation.h.

Member Typedef Documentation

◆ Location

Definition at line 62 of file WaveTrackLocation.h.

Constructor & Destructor Documentation

◆ ~WaveTrackLocations()

WaveTrackLocations::~WaveTrackLocations ( )
overridedefault

Member Function Documentation

◆ Clone()

auto WaveTrackLocations::Clone ( ) const
overridevirtual

Implements ClientData::Cloneable< ClientData::UniquePtr >.

Definition at line 20 of file WaveTrackLocation.cpp.

21{
22 return std::make_unique<WaveTrackLocations>(*this);
23}

◆ Get() [1/2]

const std::vector< Location > & WaveTrackLocations::Get ( ) const
inline

Definition at line 75 of file WaveTrackLocation.h.

76 { return mDisplayLocationsCache; }
std::vector< Location > mDisplayLocationsCache

Referenced by CutlineHandle::Click(), SpectrumView::Draw(), WaveformView::Draw(), WaveChannelSubView::DrawBoldBoundaries(), anonymous_namespace{CutlineHandle.cpp}::FindMergeLine(), and anonymous_namespace{CutlineHandle.cpp}::IsOverCutline().

Here is the caller graph for this function:

◆ Get() [2/2]

WaveTrackLocations & WaveTrackLocations::Get ( const WaveTrack track)
static

Definition at line 101 of file WaveTrackLocation.cpp.

102{
103 // const_cast the track to get this cache of mutable attached display data
104 return const_cast< WaveTrack& >( track )
105 .Attachments::Get< WaveTrackLocations >( sKey );
106}
static WaveTrack::Attachments::RegisteredFactory sKey
A Track that contains audio waveform data.
Definition: WaveTrack.h:218

References sKey.

◆ Update()

void WaveTrackLocations::Update ( const WaveTrack track)

Definition at line 25 of file WaveTrackLocation.cpp.

26{
27 auto clips = track.SortedClipArray();
28
30
31 // Count number of display locations
32 int num = 0;
33 {
34 const WaveClip *prev = nullptr;
35 for (const auto clip : clips)
36 {
37 num += clip->NumCutLines();
38
39 if (prev && fabs(prev->GetPlayEndTime() -
40 clip->GetPlayStartTime()) < WAVETRACK_MERGE_POINT_TOLERANCE)
41 ++num;
42
43 prev = clip;
44 }
45 }
46
47 if (num == 0)
48 return;
49
50 // Alloc necessary number of display locations
51 mDisplayLocationsCache.reserve(num);
52
53 // Add all display locations to cache
54 int curpos = 0;
55
56 const WaveClip *previousClip = nullptr;
57 for (const auto clip: clips)
58 {
59 for (const auto &cc : clip->GetCutLines())
60 {
61 auto cutlinePosition = clip->GetSequenceStartTime() + cc->GetSequenceStartTime();
62 if (clip->WithinPlayRegion(cutlinePosition))
63 {
64 // Add cut line expander point
66 cutlinePosition,
68 });
69 }
70 // If cutline is skipped, we still need to count it
71 // so that curpos match num at the end
72 curpos++;
73 }
74
75 if (previousClip)
76 {
77 if (fabs(previousClip->GetPlayEndTime() - clip->GetPlayStartTime())
79 {
80 // Add merge point
82 previousClip->GetPlayEndTime(),
84 track.GetClipIndex(previousClip),
85 track.GetClipIndex(clip)
86 });
87 curpos++;
88 }
89 }
90
91 previousClip = clip;
92 }
93
94 wxASSERT(curpos == num);
95}
#define WAVETRACK_MERGE_POINT_TOLERANCE
Definition: WaveTrack.h:56
This allows multiple clips to be a part of one WaveTrack.
Definition: WaveClip.h:102
double GetSequenceStartTime() const noexcept
Definition: WaveClip.cpp:1263
double GetPlayEndTime() const override
Definition: WaveClip.cpp:1187
size_t NumCutLines() const
Definition: WaveClip.h:451
WaveClipPointers SortedClipArray()
Definition: WaveTrack.cpp:3440
int GetClipIndex(const WaveClip *clip) const
Definition: WaveTrack.cpp:2988

References WaveTrack::GetClipIndex(), WaveClip::GetPlayEndTime(), WaveClip::GetSequenceStartTime(), WaveTrackLocation::locationCutLine, WaveTrackLocation::locationMergePoint, mDisplayLocationsCache, WaveClip::NumCutLines(), WaveTrack::SortedClipArray(), and WAVETRACK_MERGE_POINT_TOLERANCE.

Here is the call graph for this function:

Member Data Documentation

◆ mDisplayLocationsCache

std::vector<Location> WaveTrackLocations::mDisplayLocationsCache
private

Definition at line 63 of file WaveTrackLocation.h.

Referenced by Update().


The documentation for this class was generated from the following files: