5#include <QtCore/QAbstractListModel>
8#include <istd/TSharedNullable.h>
11#include <imtsdl/TElementList.h>
18template <
class ModelDataType,
class ModelObjectDataType>
19class TSdlAbstractListModel:
public QAbstractListModel
22 TSdlAbstractListModel(QObject* parent =
nullptr);
25 virtual QVariant GetOrCreateCachedObject(
int index)
const = 0;
26 virtual QVariantMap get(
int row)
const;
27 virtual void remove(
int index);
29 virtual QVariant getData(
const QString& nameId,
int index);
33 virtual int rowCount(
const QModelIndex& parent = QModelIndex())
const override;
34 virtual QVariant data(
const QModelIndex& index,
int role = Qt::DisplayRole)
const override;
35 virtual bool setData(
const QModelIndex& index,
const QVariant& value,
int role = Qt::EditRole)
override;
36 virtual QHash<int, QByteArray> roleNames()
const override;
40 istd::TSharedNullable<imtsdl::TElementList<ModelDataType>> Version_1_0;
41 mutable QMap<int, QVariant> m_objectDataTypeMap;
47template <
class ModelDataType,
class ModelObjectDataType>
48TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::
49 TSdlAbstractListModel(QObject *parent): QAbstractListModel(parent)
51 Version_1_0.emplace();
55template <
class ModelDataType,
class ModelObjectDataType>
56void TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::ClearCache()
65 m_objectDataTypeMap.clear();
69template <
class ModelDataType,
class ModelObjectDataType>
70QVariantMap TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::get(
int row)
const
73 QModelIndex idx = index(row, 0);
77 QHash<int, QByteArray> roles = roleNames();
78 for (
auto it = roles.begin(); it != roles.end(); ++it){
79 data[it.value()] = idx.data(it.key());
85template <
class ModelDataType,
class ModelObjectDataType>
86void TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::remove(
int index)
88 if (index < 0 || index >= Version_1_0->size()){
91 beginRemoveRows(QModelIndex(), index, index);
92 Version_1_0->removeAt(index);
98template <
class ModelDataType,
class ModelObjectDataType>
99void TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::clear()
103 Version_1_0->clear();
108template <
class ModelDataType,
class ModelObjectDataType>
109QVariant TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::getData(
const QString& nameId,
int index)
111 if (nameId ==
"item" && Version_1_0.has_value() && index >= 0 && index < Version_1_0->count()){
112 QVariant retVal = GetOrCreateCachedObject(index);
121template <
class ModelDataType,
class ModelObjectDataType>
122int TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::
123 rowCount(
const QModelIndex& )
const
125 if (Version_1_0.has_value()){
126 return Version_1_0->count();
133template <
class ModelDataType,
class ModelObjectDataType>
134QVariant TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::
135 data(
const QModelIndex& index,
int role)
const
139 int row = index.row();
140 if (!Version_1_0.has_value() || row < 0 || row > Version_1_0->count() - 1){
144 QVariant retVal = GetOrCreateCachedObject(row);
149template <
class ModelDataType,
class ModelObjectDataType>
150bool TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::
151 setData(
const QModelIndex& index,
const QVariant& value,
int role)
155 int row = index.row();
157 if (!Version_1_0.has_value() || row < 0 || row > Version_1_0->count() - 1){
161 ModelDataType* newItemPtr = value.value<ModelDataType*>();
162 istd::TSharedNullable<ModelDataType> newItem = *newItemPtr;
163 Version_1_0->insert(row, newItem);
169template <
class ModelDataType,
class ModelObjectDataType>
170QHash<int, QByteArray> TSdlAbstractListModel<ModelDataType, ModelObjectDataType>::roleNames()
const
172 QHash<int, QByteArray> hash;
173 hash.insert(0,
"item");