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)
94 : QAbstractListModel (parent), objects_ (objects)
96 setup_signals (
false);
106 ArrangerObjectRefMultiIndexContainer &objects,
108 : QAbstractListModel (&parent_arranger_object), objects_ (objects)
110 setup_signals (
true);
113 QHash<int, QByteArray> roleNames ()
const override;
115 int rowCount (
const QModelIndex &parent = QModelIndex ())
const override
117 if (parent.isValid ())
119 return static_cast<int> (objects_.size ());
123 data (
const QModelIndex &index,
int role = Qt::DisplayRole)
const override;
125 ArrangerObject * object_at (
size_t row)
const
127 return objects_.get<random_access_index> ().at (row).get ();
132 bool insertObject (
const ArrangerObjectUuidReference &
object,
int index);
135 removeRows (
int row,
int count,
const QModelIndex &parent = QModelIndex ())
149 void connect_object_signals (
int index);
158 void disconnect_object_signals (
int index);
168 void setup_signals (
bool is_parent_arranger_object);
179 void handle_object_change (
const ArrangerObject *
object);
190 std::pair<units::precise_tick_t, units::precise_tick_t>
191 get_and_update_previous_range (
const ArrangerObject *
object);
194 ArrangerObjectRefMultiIndexContainer &objects_;
199 ArrangerObject::Uuid,
200 std::pair<units::precise_tick_t, units::precise_tick_t>>
201 previous_object_ranges_;
206 std::vector<utils::ExpandableTickRange> pending_removal_ranges_;