6#include <unordered_map>
8#include "structure/arrangement/arranger_object.h"
9#include "utils/expandable_tick_range.h"
10#include "utils/units.h"
12#include <QAbstractListModel>
14#include <boost/multi_index/global_fun.hpp>
15#include <boost/multi_index/hashed_index.hpp>
16#include <boost/multi_index/mem_fun.hpp>
17#include <boost/multi_index/ordered_index.hpp>
18#include <boost/multi_index/random_access_index.hpp>
19#include <boost/multi_index/ranked_index.hpp>
20#include <boost/multi_index/sequenced_index.hpp>
21#include <boost/multi_index_container.hpp>
23namespace zrythm::structure::arrangement
47get_ticks_from_arranger_object_uuid_ref (
const ArrangerObjectUuidReference &ref)
49 return ref.get_object_base ()->position ()->ticks ();
53using ArrangerObjectRefMultiIndexContainer = boost::multi_index_container<
54 ArrangerObjectUuidReference,
55 boost::multi_index::indexed_by<
56 boost::multi_index::hashed_unique<
57 boost::multi_index::tag<uuid_hash_index>,
58 boost::multi_index::const_mem_fun<
59 ArrangerObjectUuidReference,
61 &ArrangerObjectUuidReference::id>>,
62 boost::multi_index::random_access<boost::multi_index::tag<random_access_index>>,
63 boost::multi_index::ranked_non_unique<
64 boost::multi_index::tag<sorted_index>,
65 boost::multi_index::global_fun<
66 const ArrangerObjectUuidReference &,
68 &get_ticks_from_arranger_object_uuid_ref>>,
69 boost::multi_index::sequenced<boost::multi_index::tag<sequenced_index>>>>;
77class ArrangerObjectListModel :
public QAbstractListModel
84 enum ArrangerObjectListModelRoles
86 ArrangerObjectPtrRole = Qt::UserRole + 1,
87 ArrangerObjectUuidReferenceRole
89 Q_ENUM (ArrangerObjectListModelRoles)
91 ArrangerObjectListModel (
92 ArrangerObjectRefMultiIndexContainer &objects,
93 QObject * parent =
nullptr);
102 ArrangerObjectRefMultiIndexContainer &objects,
105 QHash<int, QByteArray> roleNames ()
const override;
107 int rowCount (
const QModelIndex &parent = QModelIndex ())
const override
109 if (parent.isValid ())
111 return static_cast<int> (objects_.size ());
115 data (
const QModelIndex &index,
int role = Qt::DisplayRole)
const override;
119 bool insertObject (
const ArrangerObjectUuidReference &
object,
int index);
122 removeRows (
int row,
int count,
const QModelIndex &parent = QModelIndex ())
136 void connect_object_signals (
int index);
145 void disconnect_object_signals (
int index);
155 void setup_signals (
bool is_parent_arranger_object);
177 std::pair<units::precise_tick_t, units::precise_tick_t>
181 ArrangerObjectRefMultiIndexContainer &objects_;
187 std::pair<units::precise_tick_t, units::precise_tick_t>>
188 previous_object_ranges_;
ArrangerObjectListModel(ArrangerObjectRefMultiIndexContainer &objects, ArrangerObject &parent_arranger_object)
To be used when the parent is also an arranger object.
Base class for all objects in the arranger.