34 if (inSeparatorSection)
51 auto p = pList->GetOwner();
59 const auto pOrigTrack = shTrack.get();
60 auto trackRange =
Group( pOrigTrack );
62 if (trackRange.size() <= 1) {
82 return {
nullptr,
nullptr };
90 auto member = pList->Find(pMember);
95 Track *first =
nullptr;
104 return { pMember, pMember };
106 auto last = pList->
Find(first);
108 bool inLabels =
false;
117 return { first, *last };
126 return pList->Any().StartingWith(tracks.first).EndingAfter(tracks.second);
DEFINE_ATTACHED_VIRTUAL(GetSyncLockPolicy)
@ EndSeparator
Delimits the end of a group (of which it is a part)
@ Grouped
Can be part of a group.
@ Isolated
Never part of a group.
declares abstract base class Track, TrackList, and iterators over TrackList
Class template generates single-dispatch, open method registry tables.
static Return Call(This &obj, Arguments &&...arguments)
Invoke the method – but only after static initialization time.
Subclass * Find(const RegisteredFactory &key)
Get a (bare) pointer to an attachment, or null, down-cast it to Subclass *; will not create on demand...
static ProjectSettings & Get(AudacityProject &project)
bool IsSyncLocked() const
static bool IsSelectedOrSyncLockSelected(const Track *pTrack)
static bool IsSyncLockSelected(const Track *pTrack)
static TrackIterRange< Track > Group(Track *pTrack)
Abstract base class for an object holding data associated with points on a time axis.
std::shared_ptr< const Track > SubstituteOriginalTrack() const
std::shared_ptr< TrackList > GetOwner() const
auto begin(const Ptr< Type, BaseDeleter > &p)
Enables range-for.
bool IsSeparatorTrack(const Track *pTrack)
bool IsSyncLockableNonSeparatorTrack(const Track *pTrack)
std::pair< Track *, Track * > FindSyncLockGroup(Track *pMember)
bool IsGoodNextSyncLockTrack(const Track *t, bool inSeparatorSection)
Range between two TrackIters, usable in range-for statements, and with Visit member functions.