| 173 | } |
| 174 | |
| 175 | void TrackUtilities::DoMoveTrack( |
| 176 | AudacityProject &project, Track& target, MoveChoice choice) |
| 177 | { |
| 178 | auto &tracks = TrackList::Get( project ); |
| 179 | |
| 180 | TranslatableString longDesc, shortDesc; |
| 181 | |
| 182 | switch (choice) |
| 183 | { |
| 184 | case OnMoveTopID: |
| 185 | /* i18n-hint: Past tense of 'to move', as in 'moved audio track up'.*/ |
| 186 | longDesc = XO("Moved '%s' to Top"); |
| 187 | shortDesc = XO("Move Track to Top"); |
| 188 | |
| 189 | // TODO: write TrackList::Rotate to do this in one step and avoid emitting |
| 190 | // an event for each swap |
| 191 | while (tracks.CanMoveUp(target)) |
| 192 | tracks.Move(target, true); |
| 193 | |
| 194 | break; |
| 195 | case OnMoveBottomID: |
| 196 | /* i18n-hint: Past tense of 'to move', as in 'moved audio track up'.*/ |
| 197 | longDesc = XO("Moved '%s' to Bottom"); |
| 198 | shortDesc = XO("Move Track to Bottom"); |
| 199 | |
| 200 | // TODO: write TrackList::Rotate to do this in one step and avoid emitting |
| 201 | // an event for each swap |
| 202 | while (tracks.CanMoveDown(target)) |
| 203 | tracks.Move(target, false); |
| 204 | |
| 205 | break; |
| 206 | default: |
| 207 | bool bUp = (OnMoveUpID == choice); |
| 208 | |
| 209 | tracks.Move(target, bUp); |
| 210 | longDesc = |
| 211 | /* i18n-hint: Past tense of 'to move', as in 'moved audio track up'.*/ |
| 212 | bUp? XO("Moved '%s' Up") |
| 213 | : XO("Moved '%s' Down"); |
| 214 | shortDesc = |
| 215 | /* i18n-hint: Past tense of 'to move', as in 'moved audio track up'.*/ |
| 216 | bUp? XO("Move Track Up") |
| 217 | : XO("Move Track Down"); |
| 218 | |
| 219 | } |
| 220 | |
| 221 | longDesc.Format(target.GetName()); |
| 222 | |
| 223 | ProjectHistory::Get( project ).PushState(longDesc, shortDesc); |
| 224 | } |