| 264 | TrackPositioner &operator=( const TrackPositioner & ) = delete; |
| 265 | |
| 266 | void OnUpdate(const TrackListEvent & e) |
| 267 | { |
| 268 | switch (e.mType) { |
| 269 | case TrackListEvent::ADDITION: |
| 270 | case TrackListEvent::DELETION: |
| 271 | case TrackListEvent::PERMUTED: |
| 272 | case TrackListEvent::RESIZING: |
| 273 | break; |
| 274 | default: |
| 275 | return; |
| 276 | } |
| 277 | auto iter = |
| 278 | TrackList::Get(mProject).Find(e.mpTrack.lock().get()); |
| 279 | if (!*iter) |
| 280 | iter = TrackList::Get(mProject).begin(); |
| 281 | if (!*iter) |
| 282 | return; |
| 283 | |
| 284 | auto prev = iter; |
| 285 | auto yy = ChannelView::GetCumulativeHeight(*--prev); |
| 286 | |
| 287 | while (auto pTrack = *iter) { |
| 288 | for (auto pChannel : (*iter)->Channels()) { |
| 289 | auto &view = ChannelView::Get(*pChannel); |
| 290 | view.SetCumulativeHeightBefore(yy); |
| 291 | yy += view.GetHeight(); |
| 292 | } |
| 293 | ++iter; |
| 294 | } |
| 295 | } |
| 296 | |
| 297 | Observer::Subscription mSubscription; |
| 298 | }; |