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 Q_INVOKABLE
bool isTrackPinned (
const Track * track)
const
70 Q_INVOKABLE
bool shouldBeVisible (
const Track * track)
const
75 Q_INVOKABLE
bool hasChannel (
const Track * track)
const
77 return track->channel () !=
nullptr;
80 TrackRouting * trackRouting ()
const {
return track_routing_.get (); }
82 int pinnedTracksCutoff ()
const {
return pinned_tracks_cutoff_; }
83 void setPinnedTracksCutoff (
int index)
85 if (index == pinned_tracks_cutoff_)
88 pinned_tracks_cutoff_ = index;
89 Q_EMIT pinnedTracksCutoffChanged (index);
91 Q_SIGNAL
void pinnedTracksCutoffChanged (
int index);
95 friend void init_from (
97 const Tracklist &other,
100 std::optional<TrackPtrVariant> get_track (
const TrackUuid &
id)
const
102 auto span = collection ()->get_track_span ();
103 auto it = std::ranges::find (span,
id, TrackSpan::uuid_projection);
104 if (it == span.end ()) [[unlikely]]
108 return std::make_optional (*it);
119 std::optional<TrackPtrVariant>
136 void handle_click (TrackUuid track_id,
bool ctrl,
bool shift,
bool dragged);
138 std::vector<ArrangerObjectPtrVariant> get_timeline_objects ()
const;
148 std::optional<TrackUuidReference>
149 get_track_for_plugin (
const plugins::Plugin::Uuid &plugin_id)
const;
164 return index < pinned_tracks_cutoff_;
170 static_cast<int> (collection ()->get_track_index (track_id)));
173 auto get_track_route_target (
const TrackUuid &source_track)
const
175 return track_routing_->get_output_track (source_track);
187 TrackPtrVariant track_var,
194 static constexpr auto kPinnedTracksCutoffKey =
"pinnedTracksCutoff"sv;
195 static constexpr auto kTracksKey =
"tracks"sv;
196 friend void to_json (nlohmann::json &j,
const Tracklist &t);
197 friend void from_json (
const nlohmann::json &j, Tracklist &t);
200 auto &get_track_registry ()
const {
return track_registry_; }
201 auto &get_track_registry () {
return track_registry_; }
204 TrackRegistry &track_registry_;
234 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.