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 <boost/multi_index/global_fun.hpp>
13#include <boost/multi_index/hashed_index.hpp>
14#include <boost/multi_index/mem_fun.hpp>
15#include <boost/multi_index/ordered_index.hpp>
16#include <boost/multi_index/random_access_index.hpp>
17#include <boost/multi_index/ranked_index.hpp>
18#include <boost/multi_index/sequenced_index.hpp>
19#include <boost/multi_index_container.hpp>
21namespace zrythm::structure::arrangement
45get_ticks_from_arranger_object_uuid_ref (
const ArrangerObjectUuidReference &ref)
47 return ref.get_object_base ()->position ()->ticks ();
51using ArrangerObjectRefMultiIndexContainer = boost::multi_index_container<
52 ArrangerObjectUuidReference,
53 boost::multi_index::indexed_by<
54 boost::multi_index::hashed_unique<
55 boost::multi_index::tag<uuid_hash_index>,
56 boost::multi_index::const_mem_fun<
57 ArrangerObjectUuidReference,
59 &ArrangerObjectUuidReference::id>>,
60 boost::multi_index::random_access<boost::multi_index::tag<random_access_index>>,
61 boost::multi_index::ranked_non_unique<
62 boost::multi_index::tag<sorted_index>,
63 boost::multi_index::global_fun<
64 const ArrangerObjectUuidReference &,
66 &get_ticks_from_arranger_object_uuid_ref>>,
67 boost::multi_index::sequenced<boost::multi_index::tag<sequenced_index>>>>;
75class ArrangerObjectListModel :
public QAbstractListModel
82 enum ArrangerObjectListModelRoles
84 ArrangerObjectPtrRole = Qt::UserRole + 1,
85 ArrangerObjectUuidReferenceRole
87 Q_ENUM (ArrangerObjectListModelRoles)
89 ArrangerObjectListModel (
90 ArrangerObjectRefMultiIndexContainer &objects,
91 QObject * parent =
nullptr);
100 ArrangerObjectRefMultiIndexContainer &objects,
103 QHash<int, QByteArray> roleNames ()
const override;
105 int rowCount (
const QModelIndex &parent = QModelIndex ())
const override
107 if (parent.isValid ())
109 return static_cast<int> (objects_.size ());
113 data (
const QModelIndex &index,
int role = Qt::DisplayRole)
const override;
117 bool insertObject (
const ArrangerObjectUuidReference &
object,
int index);
120 removeRows (
int row,
int count,
const QModelIndex &parent = QModelIndex ())
134 void connect_object_signals (
int index);
143 void disconnect_object_signals (
int index);
153 void setup_signals (
bool is_parent_arranger_object);
175 std::pair<units::precise_tick_t, units::precise_tick_t>
179 ArrangerObjectRefMultiIndexContainer &objects_;
185 std::pair<units::precise_tick_t, units::precise_tick_t>>
186 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.