6#include <imtsdl/TSdlAbstractListModel.h>
13template <
class ModelDataType,
class ModelObjectDataType>
14class TListModelBase:
public TSdlAbstractListModel<ModelDataType, ModelObjectDataType>
17 TListModelBase(QObject* parent =
nullptr);
19 void append(ModelObjectDataType* item);
20 void fromMe(TListModelBase<ModelDataType, ModelObjectDataType>* objectListPtr);
23 bool isEqualWithModel(TListModelBase<ModelDataType, ModelObjectDataType>* otherModelPtr);
24 void insert(
int index, ModelObjectDataType* item);
27 virtual QVariant GetOrCreateCachedObject(
int index)
const override;
31template <
class ModelDataType,
class ModelObjectDataType>
32TListModelBase<ModelDataType, ModelObjectDataType>::TListModelBase(QObject* parent)
33 : TSdlAbstractListModel<ModelDataType, ModelObjectDataType>(parent)
39template <
class ModelDataType,
class ModelObjectDataType>
40void TListModelBase<ModelDataType, ModelObjectDataType>::append(ModelObjectDataType* item){
41 this->beginInsertRows(QModelIndex(), this->rowCount(), this->rowCount());
42 this->Version_1_0->append(*item->Version_1_0);
44 this->endInsertRows();
48template <
class ModelDataType,
class ModelObjectDataType>
49void TListModelBase<ModelDataType, ModelObjectDataType>::fromMe(TListModelBase<ModelDataType, ModelObjectDataType>* objectListPtr)
51 for (
int i = 0; i < this->rowCount(); i++){
52 QVariant item = this->getData(
"item", i);
53 if (!item.canConvert<ModelObjectDataType>()){
57 ModelObjectDataType* itemObjectPtr = item.value<ModelObjectDataType*>();
58 if (itemObjectPtr ==
nullptr){
62 ModelObjectDataType* copyItem(
dynamic_cast<ModelObjectDataType*
>(itemObjectPtr->copyMe()));
63 objectListPtr->append(copyItem);
68template <
class ModelDataType,
class ModelObjectDataType>
69QString TListModelBase<ModelDataType, ModelObjectDataType>::toJson()
71 QString retVal = QStringLiteral(
"[");
73 for (
int i = 0; i < this->rowCount(); i++){
74 if (i > 0 && i < this->rowCount() - 1){
75 retVal += QStringLiteral(
", ");
78 QVariant item = this->getData(
"item", i);
79 if (!item.canConvert<ModelObjectDataType*>()){
83 ModelObjectDataType* itemObjectPtr = item.value<ModelObjectDataType*>();
84 if (itemObjectPtr ==
nullptr){
88 retVal += itemObjectPtr->toJson();
91 retVal += QStringLiteral(
"]");
97template <
class ModelDataType,
class ModelObjectDataType>
98QString TListModelBase<ModelDataType, ModelObjectDataType>::toGraphQL()
100 QString retVal = QStringLiteral(
"[");
102 for (
int i = 0; i < this->rowCount(); i++){
103 if (i > 0 && i < this->rowCount() - 1){
104 retVal += QStringLiteral(
", ");
107 QVariant item = this->getData(
"item", i);
108 if (!item.canConvert<ModelObjectDataType*>()){
112 ModelObjectDataType* itemObjectPtr = item.value<ModelObjectDataType*>();
113 if (itemObjectPtr ==
nullptr){
117 retVal += itemObjectPtr->toGraphQL();
120 retVal += QStringLiteral(
"]");
126template <
class ModelDataType,
class ModelObjectDataType>
127bool TListModelBase<ModelDataType, ModelObjectDataType>::isEqualWithModel(TListModelBase<ModelDataType, ModelObjectDataType>* otherModelPtr)
129 if (otherModelPtr ==
nullptr){
133 if (
this == otherModelPtr){
137 if (this->rowCount() != otherModelPtr->rowCount()){
141 for (
int i = 0; i < this->rowCount(); i++){
142 QVariant selfItem = this->getData(
"item", i);
143 QVariant otherItem = otherModelPtr->getData(
"item", i);
144 if (!selfItem.canConvert<ModelObjectDataType>() || !otherItem.canConvert<ModelObjectDataType>()){
148 ModelObjectDataType* selfItemObjectPtr = selfItem.value<ModelObjectDataType*>();
149 if (selfItemObjectPtr ==
nullptr){
153 ModelObjectDataType* otherItemObjectPtr = otherItem.value<ModelObjectDataType*>();
154 if (otherItemObjectPtr ==
nullptr){
158 if (!selfItemObjectPtr->isEqualWithModel(otherItemObjectPtr)){
167template <
class ModelDataType,
class ModelObjectDataType>
168void TListModelBase<ModelDataType, ModelObjectDataType>::insert(
int index, ModelObjectDataType* item)
170 if (index < 0 || index > this->Version_1_0->size()) {
173 this->beginInsertRows(QModelIndex(), index, index);
174 this->Version_1_0->insert(index, *item->Version_1_0);
176 this->endInsertRows();
181template <
class ModelDataType,
class ModelObjectDataType>
182QVariant TListModelBase<ModelDataType, ModelObjectDataType>::GetOrCreateCachedObject(
int index)
const
184 Q_ASSERT_X(this->Version_1_0,
"TListModelBase::GetOrCreateCachedObject",
"Version_1_0 is null");
187 if (this->m_objectDataTypeMap.contains(index)){
188 retVal = QVariant::fromValue(this->m_objectDataTypeMap[index]);
191 auto* newItem =
new ModelObjectDataType();
192 newItem->Version_1_0 = this->Version_1_0->at(index);
193 this->m_objectDataTypeMap.insert(index, QVariant::fromValue(newItem));
194 retVal = QVariant::fromValue(newItem);