Browse Source

Merged universal list model

Alexey Edelev 8 years ago
parent
commit
b3b17ddc44
1 changed files with 17 additions and 9 deletions
  1. 17 9
      universallistmodel.h

+ 17 - 9
universallistmodel.h

@@ -16,11 +16,9 @@ template <typename T>
 class UniversalListModel : public QAbstractListModel
 {
 public:
+    UniversalListModel(QObject* parent = 0) : QAbstractListModel(parent) {}
     ~UniversalListModel() {
-        foreach (QPointer<T> value, m_container) {
-            delete value.data();
-        }
-        m_container.clear();
+        clear();
     }
 
     int rowCount(const QModelIndex &parent) const {
@@ -42,7 +40,7 @@ public:
     {
         int row = index.row();
 
-        if(row < 0 || row >= m_container.count()) {
+        if(row < 0 || row >= m_container.count() || m_container.at(row).isNull()) {
             return QVariant();
         }
 
@@ -77,19 +75,29 @@ public:
         }
     }
 
+    void reset(const QList<QPointer<T> >& container) {
+        beginResetModel();
+        clear();
+        m_container = container;
+        endResetModel();
+    }
+
 protected:
-    UniversalListModel(QObject* parent = 0) : QAbstractListModel(parent) {}
+    void clear() {
+        foreach (const QPointer<T>& value, m_container) {
+            delete value.data();
+        }
+        m_container.clear();
+    }
 
-    QList<QPointer<T>> m_container;
+    QList<QPointer<T> > m_container;
     static QHash<int, QByteArray> s_roleNames;
 
 
 private:
-#ifdef DEBUG
     static QByteArray fullTemplateName() { //Debug helper
         return QString("UniversalListModel<%1>").arg(T::staticMetaObject.className()).toLatin1();
     }
-#endif
 };
 
 template<typename T>