27 std::vector<Track*> toRemove;
28 for (
auto track : tracks.Selected())
29 toRemove.push_back(track);
33 if (!toRemove.empty()) {
34 auto found = tracks.
Find(toRemove[0]);
38 for (
auto track : toRemove)
43 f = *tracks.Any().rbegin();
46 auto found = tracks.FindLeader(f);
61 trackPanel.UpdateViewIfNoTracks();
70 t = *tracks.FindLeader(t);
76 bool chosen = (t == leader);
77 for (
auto channel : group)
78 channel->SetMute( chosen ),
79 channel->SetSolo(
false );
90 channel->SetMute( !wasMute );
99 auto nPlayableTracks = range.
size();
104 track->SetSolo( (nPlaying==1) && (nPlayableTracks > 1 ) && !track->GetMute() );
118 t = *tracks.FindLeader(t);
125 bool bSoloMultiple = !
settings.IsSoloSimple() ^ exclusive;
135 channel->SetSolo( !bWasSolo );
143 bool chosen = (t == leader);
144 for (
auto channel : group) {
146 channel->SetSolo( !bWasSolo );
148 channel->SetMute(
false );
151 channel->SetSolo(
false );
153 channel->SetMute( !bWasSolo );
172 bool toRemoveWasFocused = trackFocus.Get() == toRemove;
174 if (toRemoveWasFocused) {
175 auto iterNext = tracks.FindLeader(toRemove), iterPrev = iterNext;
176 newFocus = *++iterNext;
178 newFocus = *--iterPrev;
186 auto &iter = channels.first;
187 while (iter != channels.end())
188 tracks.Remove( * iter++ );
190 if (toRemoveWasFocused)
191 trackFocus.Set( newFocus );
209 longDesc =
XO(
"Moved '%s' to Top");
210 shortDesc =
XO(
"Move Track to Top");
214 while (tracks.CanMoveUp(target))
215 tracks.Move(target,
true);
220 longDesc =
XO(
"Moved '%s' to Bottom");
221 shortDesc =
XO(
"Move Track to Bottom");
225 while (tracks.CanMoveDown(target))
226 tracks.Move(target,
false);
232 tracks.Move(target, bUp);
235 bUp?
XO(
"Moved '%s' Up")
236 :
XO(
"Moved '%s' Down");
239 bUp?
XO(
"Move Track Up")
240 :
XO(
"Move Track Down");
const TranslatableString name
declares abstract base class Track, TrackList, and iterators over TrackList
static Settings & settings()
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
size_t size() const
How many attachment pointers are in the Site.
Subclass * Find(const RegisteredFactory &key)
Get a (bare) pointer to an attachment, or null, down-cast it to Subclass *; will not create on demand...
AudioTrack subclass that can also be audibly replayed by the program.
void PushState(const TranslatableString &desc, const TranslatableString &shortDesc)
void ModifyState(bool bWantsAutoSave)
static ProjectHistory & Get(AudacityProject &project)
static ProjectSettings & Get(AudacityProject &project)
static ProjectWindow & Get(AudacityProject &project)
Abstract base class for an object holding data associated with points on a time axis.
void EnsureVisible(bool modifyState=false)
static TrackList & Get(AudacityProject &project)
static auto Channels(TrackType *pTrack) -> TrackIterRange< TrackType >
static TrackPanel & Get(AudacityProject &project)
Holds a msgid for the translation catalog; may also bind format arguments.
TranslatableString & Format(Args &&...args) &
Capture variadic format arguments (by copy) when there is no plural.
void DoTrackMute(AudacityProject &project, Track *t, bool exclusive)
void DoMoveTrack(AudacityProject &project, Track *target, MoveChoice choice)
Move a track up, down, to top or to bottom.
void DoTrackSolo(AudacityProject &project, Track *t, bool exclusive)
void DoRemoveTrack(AudacityProject &project, Track *toRemove)
void DoRemoveTracks(AudacityProject &project)