/**************************************************************************** * * (c) 2009-2020 QGROUNDCONTROL PROJECT * * QGroundControl is licensed according to the terms in the file * COPYING.md in the root of the source code directory. * ****************************************************************************/ #ifndef QmlObjectListModel_H #define QmlObjectListModel_H #include class QmlObjectListModel : public QAbstractListModel { Q_OBJECT public: <<<<<<< HEAD <<<<<<< HEAD QmlObjectListModel(QObject *parent = NULL); ~QmlObjectListModel(); Q_PROPERTY(int count READ count NOTIFY countChanged) /// Returns true if any of the items in the list are dirty. Requires each /// object to have a dirty property and dirtyChanged signal. Q_PROPERTY(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged) Q_INVOKABLE QObject *get(int index) { return _objectList[index]; } // No Q_INVOKABLE here, as QML seems to have a problem with const QObject*. const QObject *get(int index) const { return _objectList[index]; } // Property accessors int count() const; bool dirty() const { return _dirty; } void setDirty(bool dirty); void append(QObject *object); void append(QList objects); QObjectList swapObjectList(const QObjectList &newlist); void clear(); QObject *removeAt(int i); QObject *removeOne(QObject *object) { return removeAt(indexOf(object)); } void insert(int i, QObject *object); void insert(int i, QList objects); bool contains(QObject *object) { return _objectList.indexOf(object) != -1; } int indexOf(QObject *object) { return _objectList.indexOf(object); } QObject *operator[](int i); const QObject *operator[](int i) const; template T value(int index) const { return qobject_cast(_objectList[index]); } QList *objectList() { return &_objectList; } bool operator==(const QmlObjectListModel &other) const; bool operator!=(const QmlObjectListModel &other) const; /// Calls deleteLater on all items and this itself. void deleteListAndContents(); /// Clears the list and calls deleteLater on each entry void clearAndDeleteContents(); void beginReset() { beginResetModel(); } void endReset() { endResetModel(); } // Friends friend void swap(QmlObjectListModel &list1, QmlObjectListModel &list2); ======= ======= >>>>>>> upstream_merge QmlObjectListModel(QObject* parent = nullptr); ~QmlObjectListModel() override; Q_PROPERTY(int count READ count NOTIFY countChanged) /// Returns true if any of the items in the list are dirty. Requires each object to have /// a dirty property and dirtyChanged signal. Q_PROPERTY(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged) Q_INVOKABLE QObject* get(int index); // Property accessors int count () const; bool dirty () const { return _dirty; } void setDirty (bool dirty); void append (QObject* object); void append (QList objects); QObjectList swapObjectList (const QObjectList& newlist); void clear (); QObject* removeAt (int i); QObject* removeOne (QObject* object) { return removeAt(indexOf(object)); } void insert (int i, QObject* object); void insert (int i, QList objects); bool contains (QObject* object) { return _objectList.indexOf(object) != -1; } int indexOf (QObject* object) { return _objectList.indexOf(object); } /// Moves an item to a new position void move(int from, int to); QObject* operator[] (int i); const QObject* operator[] (int i) const; template T value (int index) { return qobject_cast(_objectList[index]); } QList* objectList () { return &_objectList; } /// Calls deleteLater on all items and this itself. void deleteListAndContents (); /// Clears the list and calls deleteLater on each entry void clearAndDeleteContents (); void beginReset (); void endReset (); <<<<<<< HEAD >>>>>>> upstream_merge ======= >>>>>>> upstream_merge signals: void countChanged(int count); void dirtyChanged(bool dirtyChanged); private slots: void _childDirtyChanged(bool dirty); private: // Overrides from QAbstractListModel int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; QHash roleNames(void) const override; private: <<<<<<< HEAD QList _objectList; bool _dirty; bool _skipDirtyFirstItem; static const int ObjectRole; static const int TextRole; ======= QList _objectList; bool _dirty; bool _skipDirtyFirstItem; bool _externalBeginResetModel; static const int ObjectRole; static const int TextRole; >>>>>>> upstream_merge }; #endif