These now all have help buttons to page Error:_Unable_to_export
And they have an error code such as OGG:355 so that (later) on that page
we can describe them better - if they ever happen.
... Implemented non-invasively just with overrides in LabelTrackShifter
Exceeding the bug description: it's also possible to drag just the subset of
labels that fall partly or wholly in the selected region.
I expect details of the new behavior may be debated.
... Because LabelTrack, unlike the others, will also need a mouse y coordinate.
The extra information is present when using the time-shift tool but not when
using the items in ClipMenus.
... for shifting of clips among tracks
But this (temporarily) breaks the behavior of dragging back to the original
clip without first releasing the mouse
... than the one clicked in; and the clip can't fit into the new track, but it
can still slide horizontally within its track.
This eliminates a redundant use of WaveClip::Offset().
... There is an AttachedVirtualFunction which is a factory for TrackShifter,
and subclasses of it appropriate for different kinds of tracks.
The logic to choose the intervals of tracks that move is replicated in them.
The old logic is not yet removed.
Enough logic is moved into them, so that snapping in TimeShift, and DoClipMove
in ClipMenus.cpp, make no direct special use of classes WaveTrack and WaveClip.
Not yet defining a new subclass for shifting of labels -- that will be the last
step.
... Preserving existing behavior, but maybe these cases should be reconsidered
and made more uniform. (e.g. should hit test on NoteTrack sometimes miss, as
with WaveTrack?)
Also made details of WaveTrack hit testing consistent with what ClipMenus does
... in TimeShiftHandle. They do nothing useful yet, but responsibilities
will shift into them.
TypeSwitch is avoided and the subclasses are defined in appropriate places
for dependency management, thanks to AttachedVirtualFunction.
one taking candidate list directly, the others delegating to it.
Some members removed, some in-class initializers.
The special constructor for TimeShift only has extra arguments. It will go
away.