20 TrackFactory (DependenciesProvider dependencies_provider)
21 : dependencies_provider_ (std::move (dependencies_provider))
25 template <
typename TrackT>
class Builder
27 friend class TrackFactory;
31 : track_deps_ (std::move (track_deps))
36 std::unique_ptr<TrackT> build_for_deserialization ()
const
38 return std::make_unique<TrackT> (track_deps_);
44 utils::create_object<TrackT> (track_deps_.registry_, track_deps_);
45 auto * track = obj_ref.template get_object_as<TrackT> ();
46 track->set_default_name ();
54 template <
typename TrackT>
auto get_builder ()
const
60 template <FinalTrackSub
class TrackT>
61 TrackUuidReference create_empty_track ()
const
63 auto obj_ref = get_builder<TrackT> ().build ();
67 TrackUuidReference create_empty_track (
Track::Type type)
const
72 return create_empty_track<AudioTrack> ();
74 return create_empty_track<MidiTrack> ();
76 return create_empty_track<MidiGroupTrack> ();
78 return create_empty_track<FolderTrack> ();
80 return create_empty_track<InstrumentTrack> ();
82 return create_empty_track<MasterTrack> ();
84 return create_empty_track<ChordTrack> ();
86 return create_empty_track<MarkerTrack> ();
88 return create_empty_track<ModulatorTrack> ();
90 return create_empty_track<AudioBusTrack> ();
92 return create_empty_track<MidiBusTrack> ();
94 return create_empty_track<AudioGroupTrack> ();
97 throw std::invalid_argument (
"invalid track type");
100 template <
typename TrackT>
101 auto clone_new_object_identity (
const TrackT &other)
const
103 auto track_dependencies = dependencies_provider_ ();
104 return utils::clone_object (other, track_dependencies.registry_);
107 template <
typename TrackT>
108 auto clone_object_snapshot (
const TrackT &other, QObject &owner)
const
110 auto track_dependencies = dependencies_provider_ ();
113 new_obj = other.clone_qobject (
119 DependenciesProvider dependencies_provider_;