Audacity 3.2.0
Public Member Functions | Static Public Member Functions | Private Attributes | Friends | List of all members
SelectionState Class Referencefinal

#include <SelectionState.h>

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

Public Member Functions

 SelectionState ()=default
 
 SelectionState (const SelectionState &)=delete
 
SelectionStateoperator= (const SelectionState &)=delete
 
void SelectTrack (Track &track, bool selected, bool updateLastPicked)
 
void SelectRangeOfTracks (TrackList &tracks, Track &sTrack, Track &eTrack)
 
void SelectNone (TrackList &tracks)
 
void ChangeSelectionOnShiftClick (TrackList &tracks, Track &track)
 
void HandleListSelection (TrackList &tracks, ViewInfo &viewInfo, Track &track, bool shift, bool ctrl, bool syncLocked)
 
- Public Member Functions inherited from ClientData::Base
virtual ~Base ()
 

Static Public Member Functions

static SelectionStateGet (AudacityProject &project)
 
static const SelectionStateGet (const AudacityProject &project)
 
static void SelectTrackLength (ViewInfo &viewInfo, Track &track, bool syncLocked)
 

Private Attributes

std::weak_ptr< TrackmLastPickedTrack
 

Friends

class SelectionStateChanger
 

Detailed Description

Definition at line 21 of file SelectionState.h.

Constructor & Destructor Documentation

◆ SelectionState() [1/2]

SelectionState::SelectionState ( )
default

◆ SelectionState() [2/2]

SelectionState::SelectionState ( const SelectionState )
delete

Member Function Documentation

◆ ChangeSelectionOnShiftClick()

void SelectionState::ChangeSelectionOnShiftClick ( TrackList tracks,
Track track 
)

Definition at line 103 of file SelectionState.cpp.

105{
106 // We will either extend from the first or from the last.
107 auto pExtendFrom = tracks.Lock(mLastPickedTrack);
108
109 if (!pExtendFrom) {
110 auto trackRange = tracks.Selected();
111 auto pFirst = *trackRange.begin();
112
113 // If our track is at or after the first, extend from the first.
114 if (pFirst) {
115 auto begin = tracks.Leaders().begin(),
116 iterT = tracks.FindLeader(&track),
117 iterF = tracks.FindLeader(pFirst);
118 auto indT = std::distance(begin, iterT),
119 indF = std::distance(begin, iterF);
120 if (indT >= indF)
121 pExtendFrom = pFirst->SharedPointer();
122 }
123
124 // Our track was earlier than the first. Extend from the last.
125 if (!pExtendFrom)
126 pExtendFrom = Track::SharedPointer( *trackRange.rbegin() );
127 }
128
129 SelectNone( tracks );
130 if( pExtendFrom )
131 SelectRangeOfTracks( tracks, track, *pExtendFrom );
132 else
133 SelectTrack( track, true, true );
134 mLastPickedTrack = pExtendFrom;
135}
std::weak_ptr< Track > mLastPickedTrack
void SelectRangeOfTracks(TrackList &tracks, Track &sTrack, Track &eTrack)
void SelectNone(TrackList &tracks)
void SelectTrack(Track &track, bool selected, bool updateLastPicked)
std::shared_ptr< Subclass > SharedPointer()
Definition: Track.h:232
std::shared_ptr< Subclass > Lock(const std::weak_ptr< Subclass > &wTrack)
Definition: Track.h:1485
auto Leaders() -> TrackIterRange< TrackType >
Definition: Track.h:1347
auto Selected() -> TrackIterRange< TrackType >
Definition: Track.h:1330
TrackIter< Track > FindLeader(Track *pTrack)
Definition: Track.cpp:552
auto begin(const Ptr< Type, BaseDeleter > &p)
Enables range-for.
Definition: PackedArray.h:150

References PackedArray::begin(), TrackList::FindLeader(), TrackList::Leaders(), TrackList::Lock(), mLastPickedTrack, TrackList::Selected(), SelectNone(), SelectRangeOfTracks(), SelectTrack(), and Track::SharedPointer().

Referenced by HandleListSelection().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Get() [1/2]

SelectionState & SelectionState::Get ( AudacityProject project)
static

Definition at line 20 of file SelectionState.cpp.

21{
22 return project.AttachedObjects::Get< SelectionState >( key );
23}
static const AudacityProject::AttachedObjects::RegisteredFactory key

References key.

Referenced by LabelGlyphHandle::Click(), SelectHandle::Click(), BackgroundHandle::Click(), SelectUtilities::DoListSelection(), anonymous_namespace{NavigationMenus.cpp}::DoNextTrack(), anonymous_namespace{NavigationMenus.cpp}::DoPrevTrack(), SelectHandle::Drag(), Get(), LabelGlyphHandle::HandleGlyphDragRelease(), NavigationActions::Handler::OnToggle(), and AffordanceHandle::Release().

Here is the caller graph for this function:

◆ Get() [2/2]

const SelectionState & SelectionState::Get ( const AudacityProject project)
static

Definition at line 25 of file SelectionState.cpp.

26{
27 return Get( const_cast< AudacityProject & >( project ) );
28}
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
static SelectionState & Get(AudacityProject &project)

References Get().

Here is the call graph for this function:

◆ HandleListSelection()

void SelectionState::HandleListSelection ( TrackList tracks,
ViewInfo viewInfo,
Track track,
bool  shift,
bool  ctrl,
bool  syncLocked 
)

Definition at line 137 of file SelectionState.cpp.

140{
141 // AS: If the shift button is being held down, invert
142 // the selection on this track.
143 if (ctrl)
144 SelectTrack( track, !track.GetSelected(), true );
145 else {
146 if (shift && mLastPickedTrack.lock())
147 ChangeSelectionOnShiftClick( tracks, track );
148 else {
149 SelectNone( tracks );
150 SelectTrack( track, true, true );
151 SelectTrackLength( viewInfo, track, syncLocked );
152 }
153 }
154}
void ChangeSelectionOnShiftClick(TrackList &tracks, Track &track)
static void SelectTrackLength(ViewInfo &viewInfo, Track &track, bool syncLocked)
bool GetSelected() const
Selectedness is always the same for all channels of a group.
Definition: Track.cpp:82

References ChangeSelectionOnShiftClick(), Track::GetSelected(), mLastPickedTrack, SelectNone(), SelectTrack(), and SelectTrackLength().

Here is the call graph for this function:

◆ operator=()

SelectionState & SelectionState::operator= ( const SelectionState )
delete

◆ SelectNone()

void SelectionState::SelectNone ( TrackList tracks)

Definition at line 97 of file SelectionState.cpp.

98{
99 for (auto t : tracks.Any())
100 SelectTrack( *t, false, false );
101}
auto Any() -> TrackIterRange< TrackType >
Definition: Track.h:1313

References TrackList::Any(), and SelectTrack().

Referenced by ChangeSelectionOnShiftClick(), BackgroundHandle::Click(), and HandleListSelection().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectRangeOfTracks()

void SelectionState::SelectRangeOfTracks ( TrackList tracks,
Track sTrack,
Track eTrack 
)

Definition at line 79 of file SelectionState.cpp.

81{
82 Track *sTrack = &rsTrack, *eTrack = &reTrack;
83 // Swap the track pointers if needed
84 auto begin = tracks.Leaders().begin(),
85 iterS = tracks.FindLeader(sTrack),
86 iterE = tracks.FindLeader(eTrack);
87 auto indS = std::distance(begin, iterS),
88 indE = std::distance(begin, iterE);
89 if (indE < indS)
90 std::swap(sTrack, eTrack);
91
92 for (auto track :
93 tracks.Any().StartingWith(sTrack).EndingAfter(eTrack))
94 SelectTrack(*track, true, false);
95}
Abstract base class for an object holding data associated with points on a time axis.
Definition: Track.h:162
void swap(std::unique_ptr< Alg_seq > &a, std::unique_ptr< Alg_seq > &b)
Definition: NoteTrack.cpp:752

References TrackList::Any(), PackedArray::begin(), TrackList::FindLeader(), TrackList::Leaders(), SelectTrack(), and anonymous_namespace{NoteTrack.cpp}::swap().

Referenced by ChangeSelectionOnShiftClick().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectTrack()

void SelectionState::SelectTrack ( Track track,
bool  selected,
bool  updateLastPicked 
)

Definition at line 52 of file SelectionState.cpp.

54{
55 //bool wasCorrect = (selected == track.GetSelected());
56
57 track.SetSelected(selected);
58
59 if (updateLastPicked)
61
62//The older code below avoids an anchor on an unselected track.
63
64 /*
65 if (selected) {
66 // This handles the case of linked tracks, selecting all channels
67 mTracks->Select(pTrack, true);
68 if (updateLastPicked)
69 mLastPickedTrack = Track::Pointer( pTrack );
70 }
71 else {
72 mTracks->Select(pTrack, false);
73 if (updateLastPicked && pTrack == mLastPickedTrack.lock().get())
74 mLastPickedTrack.reset();
75 }
76*/
77}
virtual void SetSelected(bool s)
Definition: Track.cpp:87

References mLastPickedTrack, Track::SetSelected(), and Track::SharedPointer().

Referenced by ChangeSelectionOnShiftClick(), HandleListSelection(), SelectNone(), and SelectRangeOfTracks().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectTrackLength()

void SelectionState::SelectTrackLength ( ViewInfo viewInfo,
Track track,
bool  syncLocked 
)
static

Definition at line 33 of file SelectionState.cpp.

35{
36 auto trackRange = syncLocked
37 // If we have a sync-lock group and sync-lock linking is on,
38 // check the sync-lock group tracks.
39 ? SyncLock::Group(&track)
40
41 // Otherwise, check for a stereo pair
42 : TrackList::Channels(&track);
43
44 auto minOffset = trackRange.min( &Track::GetOffset );
45 auto maxEnd = trackRange.max( &Track::GetEndTime );
46
47 // PRL: double click or click on track control.
48 // should this select all frequencies too? I think not.
49 viewInfo.selectedRegion.setTimes(minOffset, maxEnd);
50}
bool setTimes(double t0, double t1)
Definition: ViewInfo.cpp:51
static TrackIterRange< Track > Group(Track *pTrack)
Definition: SyncLock.cpp:161
virtual double GetOffset() const =0
virtual double GetEndTime() const =0
A flat linked list of tracks supporting Add, Remove, Clear, and Contains, serialization of the list o...
Definition: Track.h:1212
NotifyingSelectedRegion selectedRegion
Definition: ViewInfo.h:219

References TrackList::Channels(), Track::GetEndTime(), Track::GetOffset(), SyncLock::Group(), ViewInfo::selectedRegion, and NotifyingSelectedRegion::setTimes().

Referenced by SelectHandle::Click(), HandleListSelection(), and NoteTrackAffordanceHandle::SelectAt().

Here is the call graph for this function:
Here is the caller graph for this function:

Friends And Related Function Documentation

◆ SelectionStateChanger

friend class SelectionStateChanger
friend

Definition at line 48 of file SelectionState.h.

Member Data Documentation

◆ mLastPickedTrack

std::weak_ptr<Track> SelectionState::mLastPickedTrack
private

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