From cc9e1326792835c846cd129b683db5af6ac931bb Mon Sep 17 00:00:00 2001 From: Yulong Bai Date: Fri, 17 Jan 2020 14:58:11 +0100 Subject: QQuickTableView: make syncView/syncDirection/model private implementation virtual For usage in HeaderView, moving getters/setters/sych-ers in private implementation virtual, keep public APIs clean and also make private implementations overridable. Change-Id: I4ad04665b7268354a49dc9711944ee0c6fd2738f Reviewed-by: Richard Moe Gustavsen --- src/quick/items/qquicktableview.cpp | 25 +++++++++++++++++-------- src/quick/items/qquicktableview_p.h | 4 ++-- src/quick/items/qquicktableview_p_p.h | 10 ++++++---- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/quick/items/qquicktableview.cpp b/src/quick/items/qquicktableview.cpp index 28a0cddb8f..09d74d939e 100644 --- a/src/quick/items/qquicktableview.cpp +++ b/src/quick/items/qquicktableview.cpp @@ -2241,6 +2241,21 @@ void QQuickTableViewPrivate::syncDelegate() tableModel->setDelegate(assignedDelegate); } +QVariant QQuickTableViewPrivate::modelImpl() const +{ + return assignedModel; +} + +void QQuickTableViewPrivate::setModelImpl(const QVariant &newModel) +{ + if (newModel == assignedModel) + return; + + assignedModel = newModel; + scheduleRebuildTable(QQuickTableViewPrivate::RebuildOption::All); + emit q_func()->modelChanged(); +} + void QQuickTableViewPrivate::syncModel() { if (modelVariant == assignedModel) @@ -2662,18 +2677,12 @@ void QQuickTableView::setColumnWidthProvider(const QJSValue &provider) QVariant QQuickTableView::model() const { - return d_func()->assignedModel; + return d_func()->modelImpl(); } void QQuickTableView::setModel(const QVariant &newModel) { - Q_D(QQuickTableView); - if (newModel == d->assignedModel) - return; - - d->assignedModel = newModel; - d->scheduleRebuildTable(QQuickTableViewPrivate::RebuildOption::All); - emit modelChanged(); + return d_func()->setModelImpl(newModel); } QQmlComponent *QQuickTableView::delegate() const diff --git a/src/quick/items/qquicktableview_p.h b/src/quick/items/qquicktableview_p.h index 5ef73a816f..d549aaddf7 100644 --- a/src/quick/items/qquicktableview_p.h +++ b/src/quick/items/qquicktableview_p.h @@ -104,8 +104,8 @@ public: QJSValue columnWidthProvider() const; void setColumnWidthProvider(const QJSValue &provider); - virtual QVariant model() const; - virtual void setModel(const QVariant &newModel); + QVariant model() const; + void setModel(const QVariant &newModel); QQmlComponent *delegate() const; void setDelegate(QQmlComponent *); diff --git a/src/quick/items/qquicktableview_p_p.h b/src/quick/items/qquicktableview_p_p.h index ec043f5e7e..bf4bd0b511 100644 --- a/src/quick/items/qquicktableview_p_p.h +++ b/src/quick/items/qquicktableview_p_p.h @@ -403,11 +403,13 @@ public: void itemReusedCallback(int modelIndex, QObject *object); void modelUpdated(const QQmlChangeSet &changeSet, bool reset); - inline void syncWithPendingChanges(); - inline void syncDelegate(); - inline void syncModel(); + virtual void syncWithPendingChanges(); + virtual void syncDelegate(); + virtual QVariant modelImpl() const; + virtual void setModelImpl(const QVariant &newModel); + virtual void syncModel(); inline void syncRebuildOptions(); - inline void syncSyncView(); + virtual void syncSyncView(); void connectToModel(); void disconnectFromModel(); -- cgit v1.2.3