22class Tracklist :
public QObject
31 singletonTracks CONSTANT)
36 int pinnedTracksCutoff READ pinnedTracksCutoff WRITE setPinnedTracksCutoff
37 NOTIFY pinnedTracksCutoffChanged)
41 using ArrangerObjectPtrVariant = arrangement::ArrangerObjectPtrVariant;
45 explicit Tracklist (TrackRegistry &track_registry, QObject * parent =
nullptr);
46 Z_DISABLE_COPY_MOVE (Tracklist)
47 ~Tracklist ()
override;
53 TrackCollection * collection ()
const {
return track_collection_.get (); }
57 return singleton_tracks_.get ();
60 Q_INVOKABLE
Track * getTrackForTimelineObject (
62 Q_INVOKABLE
TrackLane * getTrackLaneForObject (
65 TrackRouting * trackRouting ()
const {
return track_routing_.get (); }
67 int pinnedTracksCutoff ()
const {
return pinned_tracks_cutoff_; }
68 void setPinnedTracksCutoff (
int index)
70 if (index == pinned_tracks_cutoff_)
73 pinned_tracks_cutoff_ = index;
74 Q_EMIT pinnedTracksCutoffChanged (index);
76 Q_SIGNAL
void pinnedTracksCutoffChanged (
int index);
80 friend void init_from (
82 const Tracklist &other,
85 std::optional<TrackPtrVariant> get_track (
const TrackUuid &
id)
const
87 auto span = collection ()->get_track_span ();
88 auto it = std::ranges::find (span,
id, TrackSpan::uuid_projection);
89 if (it == span.end ()) [[unlikely]]
93 return std::make_optional (*it);
104 std::optional<TrackPtrVariant>
121 void handle_click (TrackUuid track_id,
bool ctrl,
bool shift,
bool dragged);
123 std::vector<ArrangerObjectPtrVariant> get_timeline_objects ()
const;
133 std::optional<TrackUuidReference>
134 get_track_for_plugin (
const plugins::Plugin::Uuid &plugin_id)
const;
149 return index < pinned_tracks_cutoff_;
155 static_cast<int> (collection ()->get_track_index (track_id)));
158 auto get_track_route_target (
const TrackUuid &source_track)
const
160 return track_routing_->get_output_track (source_track);
172 TrackPtrVariant track_var,
179 static constexpr auto kPinnedTracksCutoffKey =
"pinnedTracksCutoff"sv;
180 static constexpr auto kTracksKey =
"tracks"sv;
181 friend void to_json (nlohmann::json &j,
const Tracklist &t)
184 { kPinnedTracksCutoffKey, t.pinned_tracks_cutoff_ },
185 { kTracksKey, t.track_collection_ },
188 friend void from_json (
const nlohmann::json &j, Tracklist &t);
191 auto &get_track_registry ()
const {
return track_registry_; }
192 auto &get_track_registry () {
return track_registry_; }
195 TrackRegistry &track_registry_;
214 utils::QObjectUniquePtr<TrackCollection> track_collection_;
216 utils::QObjectUniquePtr<TrackRouting> track_routing_;
218 utils::QObjectUniquePtr<SingletonTracks> singleton_tracks_;
225 int pinned_tracks_cutoff_ = 0;
bool multiply_track_heights(double multiplier, bool visible_only, bool check_only, bool fire_events)
Multiplies all tracks' heights and returns if the operation was valid.
void mark_track_for_bounce(TrackPtrVariant track_var, bool bounce, bool mark_regions, bool mark_children, bool mark_parents)
Marks the track for bouncing.