57 QQmlTableInstanceModel(QQmlContext *qmlContext, QObject *parent =
nullptr);
58 ~QQmlTableInstanceModel() override;
60 void useImportVersion(QTypeRevision version);
62 int count()
const override {
return m_adaptorModel.count(); }
63 int rows()
const {
return m_adaptorModel.rowCount(); }
64 int columns()
const {
return m_adaptorModel.columnCount(); }
66 bool isValid()
const override {
return true; }
68 bool canFetchMore()
const {
return m_adaptorModel.canFetchMore(); }
69 void fetchMore() { m_adaptorModel.fetchMore(); }
71 QVariant model()
const;
72 void setModel(
const QVariant &model);
74 QQmlComponent *delegate()
const;
75 void setDelegate(QQmlComponent *);
77 QQmlDelegateModel::DelegateModelAccess delegateModelAccess()
const
79 return m_adaptorModel.delegateModelAccess;
81 void setDelegateModelAccess(QQmlDelegateModel::DelegateModelAccess delegateModelAccess)
83 m_adaptorModel.delegateModelAccess = delegateModelAccess;
86 const QAbstractItemModel *abstractItemModel()
const override;
88 QObject *object(
int index, QQmlIncubator::IncubationMode incubationMode = QQmlIncubator::AsynchronousIfNested) override;
89 QObject *incubateModelItemIfNeeded(QQmlDelegateModelItem *modelItem, QQmlIncubator::IncubationMode incubationMode);
90 void restoreFromReleasedItemsCache(QQmlDelegateModelItem *item,
int newFlatIndex);
91 void commitReleasedItems();
92 ReleaseFlags release(QObject *object, ReusableFlag reusable = NotReusable) override;
93 void dispose(QObject *object);
94 void cancel(
int) override;
96 void drainReusableItemsPool(
int maxPoolTime) override;
97 int poolSize() override {
return m_reusableItemsPool.size(); }
98 void reuseItem(QQmlDelegateModelItem *item,
int newModelIndex);
100 QQmlIncubator::Status incubationStatus(
int index) override;
102 bool setRequiredProperty(
int index,
const QString &name,
const QVariant &value) final;
104 QVariant variantValue(
int,
const QString &) override { Q_UNREACHABLE_RETURN(QVariant()); }
105 void setWatchedRoles(
const QList<QByteArray> &) override { Q_UNREACHABLE(); }
106 int indexOf(QObject *, QObject *)
const override { Q_UNREACHABLE_RETURN(0); }
108 QQmlDelegateModelItem *getModelItem(
int index);
114 enum DestructionMode {
119 QQmlComponent *resolveDelegate(
int index);
121 QQmlAdaptorModel m_adaptorModel;
122 QQmlAbstractDelegateComponent *m_delegateChooser =
nullptr;
123 QQmlComponent *m_delegate =
nullptr;
124 QPointer<QQmlContext> m_qmlContext;
125 QQmlRefPointer<QQmlDelegateModelItemMetaType> m_metaType;
127 QHash<
int, QQmlDelegateModelItem *> m_modelItems;
128 QQmlReusableDelegateModelItemsPool m_reusableItemsPool;
129 QList<QQmlDelegateModelItem *> m_releasedItems;
130 QList<QQmlIncubator *> m_finishedIncubationTasks;
132 void incubateModelItem(QQmlDelegateModelItem *modelItem, QQmlIncubator::IncubationMode incubationMode);
133 void incubatorStatusChanged(QQmlTableInstanceModelIncubationTask *dmIncubationTask, QQmlIncubator::Status status);
134 void deleteIncubationTaskLater(QQmlIncubator *incubationTask);
135 void deleteAllFinishedIncubationTasks();
136 QQmlDelegateModelItem *resolveModelItem(
int flatIndex,
const QModelIndex &modelIndex);
137 void destroyModelItem(QQmlDelegateModelItem *modelItem, DestructionMode mode);
139 void dataChangedCallback(
const QModelIndex &begin,
const QModelIndex &end,
const QList<
int> &roles);
140 void modelAboutToBeResetCallback();
141 void forceSetModel(
const QVariant &model);
143 static bool isDoneIncubating(QQmlDelegateModelItem *modelItem);
144 static void deleteModelItemLater(QQmlDelegateModelItem *modelItem);
146 friend class QQmlTableInstanceModelIncubationTask;