12class TrackLaneList :
public QAbstractListModel
16 bool lanesVisible READ lanesVisible WRITE setLanesVisible NOTIFY
24 TrackLanePtrRole = Qt::UserRole + 1,
30 structure::arrangement::ArrangerObjectRegistry &obj_registry,
31 dsp::FileAudioSourceRegistry &file_audio_source_registry,
32 QObject * parent =
nullptr);
33 ~TrackLaneList ()
override;
34 Q_DISABLE_COPY_MOVE (TrackLaneList)
39 QHash<int, QByteArray> roleNames ()
const override;
40 int rowCount (
const QModelIndex &parent = QModelIndex ())
const override;
42 data (
const QModelIndex &index,
int role = Qt::DisplayRole)
const override;
44 Q_INVOKABLE
TrackLane * getFirstLane ()
const
46 return lanes_.front ().get ();
49 bool lanesVisible ()
const {
return lanes_visible_; }
50 void setLanesVisible (
bool visible)
52 if (lanes_visible_ == visible)
55 lanes_visible_ = visible;
56 Q_EMIT lanesVisibleChanged (visible);
58 Q_SIGNAL
void lanesVisibleChanged (
bool visible);
64 Q_INVOKABLE
TrackLane * insertLane (
size_t index);
65 Q_INVOKABLE
void removeLane (
size_t index);
67 Q_INVOKABLE
void moveLane (
size_t from_index,
size_t to_index);
72 Q_SIGNAL
void totalHeightChanged ();
76 [[nodiscard]]
size_t size () const noexcept {
return lanes_.size (); }
78 [[nodiscard]]
bool empty () const noexcept {
return lanes_.empty (); }
80 TrackLane * at (
size_t idx)
const {
return lanes_.at (idx).get (); }
87 auto &lanes ()
const {
return lanes_; }
89 auto lanes_view ()
const
92 | std::views::transform (&utils::QObjectUniquePtr<TrackLane>::get);
103 return std::ranges::fold_left (
104 lanes_view () | std::views::transform (&TrackLane::height), 0,
119 static constexpr auto kLanesKey =
"lanes"sv;
120 static constexpr std::string_view kLanesVisibleKey =
"lanesVisible";
121 friend void to_json (nlohmann::json &j,
const TrackLaneList &p);
122 friend void from_json (
const nlohmann::json &j, TrackLaneList &p);
124 void erase (
size_t pos);
126 void update_default_lane_names ();
130 std::vector<utils::QObjectUniquePtr<TrackLane>> lanes_;
133 bool lanes_visible_ =
false;
135 BOOST_DESCRIBE_CLASS (TrackLaneList, (), (), (), (lanes_, lanes_visible_))