This is necessary with clip recording because for some short time after recording,
a trigger may be playable despite not yet having a region.
GUI edition.
Track creation is a slow. Importing multi-channel files
to new tracks can take a significant amount of time.
This prevents the GUI from being marked as unresponsive and
shows progress.
This is mostly a simple lexical search+replace but the absence of operator< for
std::weak_ptr<T> leads to some complications, particularly with Evoral::Sequence
and ExportPortChannel.
Playlist::add_region copies regions as needed (see 8d045e15dc),
without forking the Source.
This fixes an issue when importing MIDI files. When
midi-copy-is-fork is enabled (enabled by default), the
RegionFactory::create call used during import forked the
region. This resulted in two Sources being created for each
imported MIDI file.
Import via Drag/Drop previously worked by selecting a track,
and then importing to the selected track.
This approach fails when the selected track is in a track-group,
and selecting the track also selects other tracks of different type.
Now the track to drop onto is passed directly passed through to
::finish_bringing_in_material as existing_track.
This commit leaves two issues outstanding:
1. unclear/ugly semantics for drag operations that reset the GUI thread's tempo map to the writable copy
2. undo/redo for the tempo map
These will be addressed in future commits
This will need some refinement, we should only copy the settings
if the file in question was previously auditioned, and perhaps
only if GMsynth.lv2 is used.
THe length of a Source(File) is always measured from its start. In this sense,
the length is like a position on the timeline, which is a duration with an
implicit origin, or a Region start, also a duration with an implicit origin (in
that case the start of the Source). There is no good reason for using
a timecnt_t for this value, because the position component of a timecnt_t
(the origin for the duration) is implicit and always zero. So we make
this property into a timepos_t, and include a number of asserts() to check
for common possible coding errors related to the time domain
Previously a triggerbox_ui.h change triggered a complete UI
rebuild. This follows the concept of other editor_selection
lists which use forward declarations.