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 ReleaseFlags release(QObject *object, ReusableFlag reusable = NotReusable) override;
90 void dispose(QObject *object);
91 void cancel(
int) override;
93 void drainReusableItemsPool(
int maxPoolTime) override;
94 int poolSize() override {
return m_reusableItemsPool.size(); }
95 void reuseItem(QQmlDelegateModelItem *item,
int newModelIndex);
97 QQmlIncubator::Status incubationStatus(
int index) override;
99 bool setRequiredProperty(
int index,
const QString &name,
const QVariant &value) final;
101 QVariant variantValue(
int,
const QString &) override { Q_UNREACHABLE_RETURN(QVariant()); }
102 void setWatchedRoles(
const QList<QByteArray> &) override { Q_UNREACHABLE(); }
103 int indexOf(QObject *, QObject *)
const override { Q_UNREACHABLE_RETURN(0); }
105 QQmlDelegateModelItem *getModelItem(
int index);
111 enum DestructionMode {
116 QQmlComponent *resolveDelegate(
int index);
118 QQmlAdaptorModel m_adaptorModel;
119 QQmlAbstractDelegateComponent *m_delegateChooser =
nullptr;
120 QQmlComponent *m_delegate =
nullptr;
121 QPointer<QQmlContext> m_qmlContext;
122 QQmlRefPointer<QQmlDelegateModelItemMetaType> m_metaType;
124 QHash<
int, QQmlDelegateModelItem *> m_modelItems;
125 QQmlReusableDelegateModelItemsPool m_reusableItemsPool;
126 QList<QQmlIncubator *> m_finishedIncubationTasks;
128 void incubateModelItem(QQmlDelegateModelItem *modelItem, QQmlIncubator::IncubationMode incubationMode);
129 void incubatorStatusChanged(QQmlTableInstanceModelIncubationTask *dmIncubationTask, QQmlIncubator::Status status);
130 void deleteIncubationTaskLater(QQmlIncubator *incubationTask);
131 void deleteAllFinishedIncubationTasks();
132 QQmlDelegateModelItem *resolveModelItem(
int index);
133 void destroyModelItem(QQmlDelegateModelItem *modelItem, DestructionMode mode);
135 void dataChangedCallback(
const QModelIndex &begin,
const QModelIndex &end,
const QList<
int> &roles);
136 void modelAboutToBeResetCallback();
137 void forceSetModel(
const QVariant &model);
139 static bool isDoneIncubating(QQmlDelegateModelItem *modelItem);
140 static void deleteModelItemLater(QQmlDelegateModelItem *modelItem);
142 friend class QQmlTableInstanceModelIncubationTask;