56 QQmlTableInstanceModel(QQmlContext *qmlContext, QObject *parent =
nullptr);
57 ~QQmlTableInstanceModel() override;
59 void useImportVersion(QTypeRevision version);
61 int count()
const override {
return m_adaptorModel.count(); }
62 int rows()
const {
return m_adaptorModel.rowCount(); }
63 int columns()
const {
return m_adaptorModel.columnCount(); }
65 bool isValid()
const override {
return true; }
67 bool canFetchMore()
const {
return m_adaptorModel.canFetchMore(); }
68 void fetchMore() { m_adaptorModel.fetchMore(); }
70 QVariant model()
const;
71 void setModel(
const QVariant &model);
73 QQmlComponent *delegate()
const;
74 void setDelegate(QQmlComponent *);
76 QQmlDelegateModel::DelegateModelAccess delegateModelAccess()
const
78 return m_adaptorModel.delegateModelAccess;
80 void setDelegateModelAccess(QQmlDelegateModel::DelegateModelAccess delegateModelAccess)
82 m_adaptorModel.delegateModelAccess = delegateModelAccess;
85 const QAbstractItemModel *abstractItemModel()
const override;
87 QObject *object(
int index, QQmlIncubator::IncubationMode incubationMode = QQmlIncubator::AsynchronousIfNested) override;
88 ReleaseFlags release(QObject *object, ReusableFlag reusable = NotReusable) override;
89 void dispose(QObject *object);
90 void cancel(
int) override;
92 void drainReusableItemsPool(
int maxPoolTime) override;
93 int poolSize() override {
return m_reusableItemsPool.size(); }
94 void reuseItem(QQmlDelegateModelItem *item,
int newModelIndex);
96 QQmlIncubator::Status incubationStatus(
int index) override;
98 bool setRequiredProperty(
int index,
const QString &name,
const QVariant &value) final;
100 QVariant variantValue(
int,
const QString &) override { Q_UNREACHABLE_RETURN(QVariant()); }
101 void setWatchedRoles(
const QList<QByteArray> &) override { Q_UNREACHABLE(); }
102 int indexOf(QObject *, QObject *)
const override { Q_UNREACHABLE_RETURN(0); }
104 QQmlDelegateModelItem *getModelItem(
int index);
110 enum DestructionMode {
115 QQmlComponent *resolveDelegate(
int index);
117 QQmlAdaptorModel m_adaptorModel;
118 QQmlAbstractDelegateComponent *m_delegateChooser =
nullptr;
119 QQmlComponent *m_delegate =
nullptr;
120 QPointer<QQmlContext> m_qmlContext;
121 QQmlRefPointer<QQmlDelegateModelItemMetaType> m_metaType;
123 QHash<
int, QQmlDelegateModelItem *> m_modelItems;
124 QQmlReusableDelegateModelItemsPool m_reusableItemsPool;
125 QList<QQmlIncubator *> m_finishedIncubationTasks;
127 void incubateModelItem(QQmlDelegateModelItem *modelItem, QQmlIncubator::IncubationMode incubationMode);
128 void incubatorStatusChanged(QQmlTableInstanceModelIncubationTask *dmIncubationTask, QQmlIncubator::Status status);
129 void deleteIncubationTaskLater(QQmlIncubator *incubationTask);
130 void deleteAllFinishedIncubationTasks();
131 QQmlDelegateModelItem *resolveModelItem(
int index);
132 void destroyModelItem(QQmlDelegateModelItem *modelItem, DestructionMode mode);
134 void dataChangedCallback(
const QModelIndex &begin,
const QModelIndex &end,
const QVector<
int> &roles);
135 void modelAboutToBeResetCallback();
136 void forceSetModel(
const QVariant &model);
138 static bool isDoneIncubating(QQmlDelegateModelItem *modelItem);
139 static void deleteModelItemLater(QQmlDelegateModelItem *modelItem);
141 friend class QQmlTableInstanceModelIncubationTask;