QmlObjectListModel.h.orig 5.44 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
/****************************************************************************
 *
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * 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 <QAbstractListModel>

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<QObject *> 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<QObject *> 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 <class T> T value(int index) const {
    return qobject_cast<T>(_objectList[index]);
  }
  QList<QObject *> *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<QObject*> 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<QObject*> 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<class T> T value       (int index) { return qobject_cast<T>(_objectList[index]); }
    QList<QObject*>* 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<int, QByteArray> roleNames(void) const override;

private:
<<<<<<< HEAD
  QList<QObject *> _objectList;

  bool _dirty;
  bool _skipDirtyFirstItem;

  static const int ObjectRole;
  static const int TextRole;
=======
    QList<QObject*> _objectList;
    
    bool _dirty;
    bool _skipDirtyFirstItem;
    bool _externalBeginResetModel;
        
    static const int ObjectRole;
    static const int TextRole;
>>>>>>> upstream_merge
};

#endif