18class TrackFactory :
public QObject
23 using ArrangerObjectRegistry = arrangement::ArrangerObjectRegistry;
26 TrackFactory () =
delete;
28 TrackRegistry &track_registry,
29 PluginRegistry &plugin_registry,
30 PortRegistry &port_registry,
31 ArrangerObjectRegistry &arranger_object_registry,
33 QObject * parent =
nullptr)
34 : QObject (parent), track_registry_ (track_registry),
35 plugin_registry_ (plugin_registry), port_registry_ (port_registry),
36 arranger_object_registry_ (arranger_object_registry),
37 settings_manager_ (settings_mgr)
41 static TrackFactory * get_instance ();
43 template <
typename TrackT>
class Builder
45 friend class TrackFactory;
49 TrackRegistry &track_registry,
50 PluginRegistry &plugin_registry,
51 PortRegistry &port_registry,
52 ArrangerObjectRegistry &arranger_object_registry)
53 : track_registry_ (track_registry), plugin_registry_ (plugin_registry),
54 port_registry_ (port_registry),
55 arranger_object_registry_ (arranger_object_registry)
61 settings_manager_ = settings_manager;
66 std::unique_ptr<TrackT> build_for_deserialization ()
const
71 return TrackT::create_unique (
72 track_registry_, plugin_registry_, port_registry_,
73 arranger_object_registry_,
false);
77 return std::make_unique<TrackT> (
78 track_registry_, plugin_registry_, port_registry_,
79 arranger_object_registry_,
false);
85 auto obj_ref = [&] () {
86 return track_registry_.create_object<TrackT> (
87 track_registry_, plugin_registry_, port_registry_,
88 arranger_object_registry_,
true);
97 TrackRegistry &track_registry_;
98 PluginRegistry &plugin_registry_;
99 PortRegistry &port_registry_;
100 ArrangerObjectRegistry &arranger_object_registry_;
104 template <
typename TrackT>
auto get_builder ()
const
108 track_registry_, plugin_registry_, port_registry_,
109 arranger_object_registry_)
110 .with_settings_manager (settings_manager_);
115 template <FinalTrackSub
class TrackT>
116 TrackUuidReference create_empty_track ()
const
118 auto obj_ref = get_builder<TrackT> ().build ();
127 return create_empty_track<AudioTrack> ();
129 return create_empty_track<MidiTrack> ();
131 return create_empty_track<MidiGroupTrack> ();
133 return create_empty_track<FolderTrack> ();
135 return create_empty_track<InstrumentTrack> ();
137 return create_empty_track<MasterTrack> ();
139 return create_empty_track<ChordTrack> ();
141 return create_empty_track<MarkerTrack> ();
143 return create_empty_track<ModulatorTrack> ();
145 return create_empty_track<AudioBusTrack> ();
147 return create_empty_track<MidiBusTrack> ();
149 return create_empty_track<AudioGroupTrack> ();
154 template <FinalTrackSub
class TrackT>
155 auto add_empty_track (Tracklist &tracklist)
157 auto track_ref = create_empty_track<TrackT> ();
160 tracklist.append_track (
162 *audio_engine_,
false,
false);
167 Q_INVOKABLE QVariant addEmptyTrackFromType (
int type)
175 auto * track_base = Track::create_empty_with_action (tt);
178 using TrackT = base_type<
decltype (track)>;
180 "created {} track: {}", typename_to_string<TrackT> (),
183 convert_to_variant<TrackPtrVariant> (track_base));
184 return QVariant::fromStdVariant (
185 convert_to_variant<TrackPtrVariant> (track_base));
187 catch (
const ZrythmException &e)
189 e.handle (QObject::tr (
"Failed to create track"));
195 template <
typename TrackT>
196 auto clone_new_object_identity (
const TrackT &other)
const
198 return plugin_registry_.clone_object (other, plugin_registry_);
201 template <
typename TrackT>
202 auto clone_object_snapshot (
const TrackT &other, QObject &owner)
const
206 new_obj = other.clone_qobject (
212 TrackRegistry &track_registry_;
213 PluginRegistry &plugin_registry_;
214 PortRegistry &port_registry_;
215 arrangement::ArrangerObjectRegistry &arranger_object_registry_;
216 gui::SettingsManager &settings_manager_;