20#ifndef LIBREPCB_EDITOR_UIOBJECTLIST_H
21#define LIBREPCB_EDITOR_UIOBJECTLIST_H
46template <
typename TObj,
typename TUiData>
76 const std::shared_ptr<TObj>&
at(
int index)
noexcept {
79 std::shared_ptr<TObj>
value(
int index)
noexcept {
82 void append(
const std::shared_ptr<TObj>& obj)
noexcept {
85 void insert(
int index,
const std::shared_ptr<TObj>& obj)
noexcept {
87 index = qBound(0, index,
mObjects.count() + 1);
89 slint::Model<TUiData>::notify_row_added(index, 1);
93 bool remove(
int index)
noexcept {
return takeAt(index) !=
nullptr; }
94 std::shared_ptr<TObj>
take(
const TObj* obj)
noexcept {
95 if (
auto index =
indexOf(obj)) {
101 std::shared_ptr<TObj>
takeAt(
int index)
noexcept {
102 if (
auto obj =
mObjects.takeAt(index)) {
103 slint::Model<TUiData>::notify_row_removed(index, 1);
112 for (
int i =
mObjects.count() - 1; i >= 0; --i) {
116 std::optional<int>
indexOf(
const TObj* obj)
const noexcept {
117 for (
int i = 0; i <
mObjects.count(); ++i) {
130 return static_cast<std::size_t
>(
mObjects.count());
132 std::optional<TUiData>
row_data(std::size_t i)
const override {
134 return obj->getUiData();
140 obj->setUiData(data);
149 if (
auto index =
indexOf(&obj)) {
150 slint::Model<TUiData>::notify_row_changed(*index);
The Signal class is used to emit signals on non-QObject derived classes.
Definition signalslot.h:65
The Slot class is used to receive signals from non-QObject derived classes.
Definition signalslot.h:170
The UiObjectList class.
Definition uiobjectlist.h:47
void clear() noexcept
Definition uiobjectlist.h:111
Slot< TObj > mOnUiDataChangedSlot
Definition uiobjectlist.h:156
std::size_t row_count() const noexcept override
Definition uiobjectlist.h:129
int count() const noexcept
Definition uiobjectlist.h:74
Slot< UiObjectList< TObj, TUiData >, int, const std::shared_ptr< TObj > &, Event > OnEditedSlot
Definition uiobjectlist.h:62
QVector< std::shared_ptr< TObj > > mObjects
Definition uiobjectlist.h:155
std::optional< TUiData > row_data(std::size_t i) const override
Definition uiobjectlist.h:132
UiObjectList(const UiObjectList &other)=delete
TUiData UiData
Definition uiobjectlist.h:50
void append(const std::shared_ptr< TObj > &obj) noexcept
Definition uiobjectlist.h:82
Event
Definition uiobjectlist.h:53
std::shared_ptr< TObj > value(int index) noexcept
Definition uiobjectlist.h:79
const std::shared_ptr< TObj > & at(int index) noexcept
Definition uiobjectlist.h:76
auto begin() noexcept
Definition uiobjectlist.h:125
UiObjectList() noexcept
Definition uiobjectlist.h:65
std::shared_ptr< TObj > take(const TObj *obj) noexcept
Definition uiobjectlist.h:94
Signal< UiObjectList< TObj, TUiData >, int, const std::shared_ptr< TObj > &, Event > onEdited
Definition uiobjectlist.h:59
~UiObjectList() noexcept
Definition uiobjectlist.h:71
void elementUiDataChangedHandler(const TObj &obj) noexcept
Definition uiobjectlist.h:148
UiObjectList & operator=(const UiObjectList &rhs)=delete
void insert(int index, const std::shared_ptr< TObj > &obj) noexcept
Definition uiobjectlist.h:85
bool remove(int index) noexcept
Definition uiobjectlist.h:93
auto end() noexcept
Definition uiobjectlist.h:126
const QVector< std::shared_ptr< TObj > > & values()
Definition uiobjectlist.h:124
void set_row_data(size_t i, const TUiData &data) noexcept override
Definition uiobjectlist.h:138
std::shared_ptr< TObj > takeAt(int index) noexcept
Definition uiobjectlist.h:101
bool isEmpty() const noexcept
Definition uiobjectlist.h:75
std::optional< int > indexOf(const TObj *obj) const noexcept
Definition uiobjectlist.h:116
TObj Element
Definition uiobjectlist.h:49
Definition occmodel.cpp:77