1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-02-06 19:52:19 +01:00

Define and use SelectionStateChanger

This commit is contained in:
Paul Licameli
2017-06-11 09:59:23 -04:00
parent a594207265
commit 4da881d1db
4 changed files with 67 additions and 22 deletions

View File

@@ -188,3 +188,39 @@ void SelectionState::TrackListUpdated( const TrackList &tracks )
if (mLastPickedTrack && !tracks.Contains(mLastPickedTrack))
mLastPickedTrack = nullptr;
}
SelectionStateChanger::SelectionStateChanger
( SelectionState &state, TrackList &tracks )
: mpState{ &state }
, mTracks{ tracks }
, mInitialLastPickedTrack{ state.mLastPickedTrack }
{
// Save initial state of track selections
mInitialTrackSelection.clear();
TrackListIterator iter( &mTracks );
for (Track *track = iter.First(); track; track = iter.Next()) {
const bool isSelected = track->GetSelected();
mInitialTrackSelection.push_back(isSelected);
}
}
SelectionStateChanger::~SelectionStateChanger()
{
if ( mpState ) {
// roll back changes
mpState->mLastPickedTrack = mInitialLastPickedTrack;
TrackListIterator iter( &mTracks );
std::vector<bool>::const_iterator
it = mInitialTrackSelection.begin(),
end = mInitialTrackSelection.end();
for (Track *track = iter.First(); track && it != end; track = iter.Next()) {
// wxASSERT(it != end);
track->SetSelected( *it++ );
}
}
}
void SelectionStateChanger::Commit()
{
mpState = nullptr;
}