From 28ce8a2241f2d4becc102bcb1301e52c30f00ef2 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 19 Dec 2016 13:38:23 +0100 Subject: Pimplify support classes Change-Id: Idf7d58d67e1c8b5956f3bcc54929629b1b9ca16d Reviewed-by: J-P Nurmi --- .../v4/widget/qnativeandroiddrawerlayout.cpp | 4 +- .../v4/widget/qnativeandroiddrawerlayoutparams.cpp | 25 ++++++++--- .../v4/widget/qnativeandroiddrawerlayoutparams_p.h | 5 ++- .../v4/widget/qnativeandroidswiperefreshlayout.cpp | 25 ++++++++--- .../v4/widget/qnativeandroidswiperefreshlayout_p.h | 6 ++- .../v7/app/qnativeandroidactionbardrawertoggle.cpp | 4 +- .../support/v7/widget/qnativeandroidcardview.cpp | 4 +- .../v7/widget/qnativeandroidrecycleradapter.cpp | 52 ++++++++++++++-------- .../v7/widget/qnativeandroidrecycleradapter_p.h | 6 +-- .../v7/widget/qnativeandroidrecyclerview.cpp | 46 ++++++++++++------- .../v7/widget/qnativeandroidrecyclerview_p.h | 5 ++- 11 files changed, 119 insertions(+), 63 deletions(-) diff --git a/src/android/support/v4/widget/qnativeandroiddrawerlayout.cpp b/src/android/support/v4/widget/qnativeandroiddrawerlayout.cpp index d0f35c3..6059889 100644 --- a/src/android/support/v4/widget/qnativeandroiddrawerlayout.cpp +++ b/src/android/support/v4/widget/qnativeandroiddrawerlayout.cpp @@ -40,8 +40,8 @@ QT_BEGIN_NAMESPACE -QNativeAndroidDrawerLayout::QNativeAndroidDrawerLayout(QNativeAndroidContext *context) : - QNativeAndroidViewGroup(context) +QNativeAndroidDrawerLayout::QNativeAndroidDrawerLayout(QNativeAndroidContext *context) + : QNativeAndroidViewGroup(context) { } diff --git a/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams.cpp b/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams.cpp index 9f79f1e..229934f 100644 --- a/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams.cpp +++ b/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams.cpp @@ -35,25 +35,34 @@ ****************************************************************************/ #include "qnativeandroiddrawerlayoutparams_p.h" +#include "qnativeandroidmarginlayoutparams_p_p.h" #include "qnativeandroiddrawerlayout_p.h" #include "qnativeandroidview_p.h" QT_BEGIN_NAMESPACE -QNativeAndroidDrawerLayoutParams::QNativeAndroidDrawerLayoutParams(QNativeAndroidView *view) : - QNativeAndroidMarginLayoutParams(view), m_gravity(0) +class QNativeAndroidDrawerLayoutParamsPrivate : public QNativeAndroidMarginLayoutParamsPrivate +{ +public: + int gravity = 0; +}; + +QNativeAndroidDrawerLayoutParams::QNativeAndroidDrawerLayoutParams(QNativeAndroidView *view) + : QNativeAndroidMarginLayoutParams(*(new QNativeAndroidDrawerLayoutParamsPrivate), view) { } int QNativeAndroidDrawerLayoutParams::gravity() const { - return m_gravity; + Q_D(const QNativeAndroidDrawerLayoutParams); + return d->gravity; } void QNativeAndroidDrawerLayoutParams::setGravity(int value) { - if (m_gravity != value) { - m_gravity = value; + Q_D(QNativeAndroidDrawerLayoutParams); + if (d->gravity != value) { + d->gravity = value; invalidate(); emit gravityChanged(); } @@ -61,16 +70,18 @@ void QNativeAndroidDrawerLayoutParams::setGravity(int value) QAndroidJniObject QNativeAndroidDrawerLayoutParams::onCreate() { + Q_D(QNativeAndroidDrawerLayoutParams); return QAndroidJniObject("android/support/v4/widget/DrawerLayout$LayoutParams", "(III)V", - MATCH_PARENT, MATCH_PARENT, m_gravity); + MATCH_PARENT, MATCH_PARENT, d->gravity); } void QNativeAndroidDrawerLayoutParams::onInflate(QAndroidJniObject &instance) { + Q_D(QNativeAndroidDrawerLayoutParams); QNativeAndroidMarginLayoutParams::onInflate(instance); - instance.setField("gravity", m_gravity); + instance.setField("gravity", d->gravity); } QT_END_NAMESPACE diff --git a/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams_p.h b/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams_p.h index 96e65ca..935c750 100644 --- a/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams_p.h +++ b/src/android/support/v4/widget/qnativeandroiddrawerlayoutparams_p.h @@ -52,6 +52,8 @@ QT_BEGIN_NAMESPACE +class QNativeAndroidDrawerLayoutParamsPrivate; + class Q_NATIVEANDROID_EXPORT QNativeAndroidDrawerLayoutParams : public QNativeAndroidMarginLayoutParams { Q_OBJECT @@ -71,7 +73,8 @@ protected: void onInflate(QAndroidJniObject &instance) override; private: - int m_gravity; + Q_DISABLE_COPY(QNativeAndroidDrawerLayoutParams) + Q_DECLARE_PRIVATE(QNativeAndroidDrawerLayoutParams) }; QT_END_NAMESPACE diff --git a/src/android/support/v4/widget/qnativeandroidswiperefreshlayout.cpp b/src/android/support/v4/widget/qnativeandroidswiperefreshlayout.cpp index 26f376d..55739c1 100644 --- a/src/android/support/v4/widget/qnativeandroidswiperefreshlayout.cpp +++ b/src/android/support/v4/widget/qnativeandroidswiperefreshlayout.cpp @@ -35,18 +35,27 @@ ****************************************************************************/ #include "qnativeandroidswiperefreshlayout_p.h" +#include "qnativeandroidviewgroup_p_p.h" #include "qtnativeandroidfunctions_p.h" QT_BEGIN_NAMESPACE -QNativeAndroidSwipeRefreshLayout::QNativeAndroidSwipeRefreshLayout(QNativeAndroidContext *context) : - QNativeAndroidViewGroup(context), m_refreshing(false) +class QNativeAndroidSwipeRefreshLayoutPrivate : public QNativeAndroidViewGroupPrivate +{ +public: + bool refreshing = false; + QAndroidJniObject listener; +}; + +QNativeAndroidSwipeRefreshLayout::QNativeAndroidSwipeRefreshLayout(QNativeAndroidContext *context) + : QNativeAndroidViewGroup(*(new QNativeAndroidSwipeRefreshLayoutPrivate), context) { } bool QNativeAndroidSwipeRefreshLayout::isRefreshing() const { - return m_refreshing; + Q_D(const QNativeAndroidSwipeRefreshLayout); + return d->refreshing; } void QNativeAndroidSwipeRefreshLayout::setRefreshing(bool refreshing) @@ -57,8 +66,9 @@ void QNativeAndroidSwipeRefreshLayout::setRefreshing(bool refreshing) bool QNativeAndroidSwipeRefreshLayout::updateRefreshing(bool refreshing) { - if (m_refreshing != refreshing) { - m_refreshing = refreshing; + Q_D(QNativeAndroidSwipeRefreshLayout); + if (d->refreshing != refreshing) { + d->refreshing = refreshing; emit refreshingChanged(); return true; } @@ -74,16 +84,17 @@ QAndroidJniObject QNativeAndroidSwipeRefreshLayout::onCreate() void QNativeAndroidSwipeRefreshLayout::onInflate(QAndroidJniObject &instance) { + Q_D(QNativeAndroidSwipeRefreshLayout); QNativeAndroidViewGroup::onInflate(instance); - m_listener = QAndroidJniObject("org/qtproject/qt5/android/bindings/support/v4/widget/QtNativeSwipeRefreshLayoutListener", + d->listener = QAndroidJniObject("org/qtproject/qt5/android/bindings/support/v4/widget/QtNativeSwipeRefreshLayoutListener", "(Landroid/support/v4/widget/SwipeRefreshLayout;J)V", instance.object(), reinterpret_cast(this)); static bool nativeMethodsRegistered = false; if (!nativeMethodsRegistered) { - onRegisterNativeMethods(m_listener.object()); + onRegisterNativeMethods(d->listener.object()); nativeMethodsRegistered = true; } } diff --git a/src/android/support/v4/widget/qnativeandroidswiperefreshlayout_p.h b/src/android/support/v4/widget/qnativeandroidswiperefreshlayout_p.h index 1130c62..17ed50c 100644 --- a/src/android/support/v4/widget/qnativeandroidswiperefreshlayout_p.h +++ b/src/android/support/v4/widget/qnativeandroidswiperefreshlayout_p.h @@ -52,6 +52,8 @@ QT_BEGIN_NAMESPACE +class QNativeAndroidSwipeRefreshLayoutPrivate; + class Q_NATIVEANDROID_EXPORT QNativeAndroidSwipeRefreshLayout : public QNativeAndroidViewGroup { Q_OBJECT @@ -77,8 +79,8 @@ private Q_SLOTS: bool updateRefreshing(bool refreshing); private: - bool m_refreshing; - QAndroidJniObject m_listener; + Q_DISABLE_COPY(QNativeAndroidSwipeRefreshLayout) + Q_DECLARE_PRIVATE(QNativeAndroidSwipeRefreshLayout) }; QT_END_NAMESPACE diff --git a/src/android/support/v7/app/qnativeandroidactionbardrawertoggle.cpp b/src/android/support/v7/app/qnativeandroidactionbardrawertoggle.cpp index 52446c2..a09c0e0 100644 --- a/src/android/support/v7/app/qnativeandroidactionbardrawertoggle.cpp +++ b/src/android/support/v7/app/qnativeandroidactionbardrawertoggle.cpp @@ -38,8 +38,8 @@ QT_BEGIN_NAMESPACE -QNativeAndroidActionBarDrawerToggle::QNativeAndroidActionBarDrawerToggle(QObject *parent) : - QNativeAndroidObject(parent) +QNativeAndroidActionBarDrawerToggle::QNativeAndroidActionBarDrawerToggle(QObject *parent) + : QNativeAndroidObject(parent) { } diff --git a/src/android/support/v7/widget/qnativeandroidcardview.cpp b/src/android/support/v7/widget/qnativeandroidcardview.cpp index 1e57a17..58feadc 100644 --- a/src/android/support/v7/widget/qnativeandroidcardview.cpp +++ b/src/android/support/v7/widget/qnativeandroidcardview.cpp @@ -38,8 +38,8 @@ QT_BEGIN_NAMESPACE -QNativeAndroidCardView::QNativeAndroidCardView(QNativeAndroidContext *context) : - QNativeAndroidFrameLayout(context) +QNativeAndroidCardView::QNativeAndroidCardView(QNativeAndroidContext *context) + : QNativeAndroidFrameLayout(context) { } diff --git a/src/android/support/v7/widget/qnativeandroidrecycleradapter.cpp b/src/android/support/v7/widget/qnativeandroidrecycleradapter.cpp index bf2e2b8..f4a147a 100644 --- a/src/android/support/v7/widget/qnativeandroidrecycleradapter.cpp +++ b/src/android/support/v7/widget/qnativeandroidrecycleradapter.cpp @@ -35,6 +35,7 @@ ****************************************************************************/ #include "qnativeandroidrecycleradapter_p.h" +#include "qnativeandroidcontextual_p_p.h" #include "qtnativeandroidfunctions_p.h" #include "qnativeandroidview_p.h" #include @@ -42,20 +43,30 @@ QT_BEGIN_NAMESPACE -QNativeAndroidRecyclerAdapter::QNativeAndroidRecyclerAdapter(QObject *parent) : - QNativeAndroidContextual(parent), m_count(0), m_delegate(0) +class QNativeAndroidRecyclerAdapterPrivate : public QNativeAndroidContextualPrivate +{ +public: + int count = 0; + QQmlComponent *delegate = nullptr; + QList holders; +}; + +QNativeAndroidRecyclerAdapter::QNativeAndroidRecyclerAdapter(QObject *parent) + : QNativeAndroidContextual(*(new QNativeAndroidRecyclerAdapterPrivate), parent) { } int QNativeAndroidRecyclerAdapter::count() const { - return m_count; + Q_D(const QNativeAndroidRecyclerAdapter); + return d->count; } void QNativeAndroidRecyclerAdapter::setCount(int count) { - if (m_count != count) { - m_count = count; + Q_D(QNativeAndroidRecyclerAdapter); + if (d->count != count) { + d->count = count; QtNativeAndroid::callIntMethod(instance(), "setItemCount", count); emit countChanged(); } @@ -63,13 +74,15 @@ void QNativeAndroidRecyclerAdapter::setCount(int count) QQmlComponent *QNativeAndroidRecyclerAdapter::delegate() const { - return m_delegate; + Q_D(const QNativeAndroidRecyclerAdapter); + return d->delegate; } void QNativeAndroidRecyclerAdapter::setDelegate(QQmlComponent *delegate) { - if (m_delegate != delegate) { - m_delegate = delegate; + Q_D(QNativeAndroidRecyclerAdapter); + if (d->delegate != delegate) { + d->delegate = delegate; QtNativeAndroid::callVoidMethod(instance(), "notifyDataSetChanged"); emit delegateChanged(); } @@ -77,14 +90,16 @@ void QNativeAndroidRecyclerAdapter::setDelegate(QQmlComponent *delegate) QAndroidJniObject QNativeAndroidRecyclerAdapter::onCreate() { + Q_D(QNativeAndroidRecyclerAdapter); return QAndroidJniObject("org/qtproject/qt5/android/bindings/support/v7/widget/QtNativeRecyclerAdapter", "(IJ)V", - m_count, + d->count, reinterpret_cast(this)); } void QNativeAndroidRecyclerAdapter::onInflate(QAndroidJniObject &instance) { + Q_D(QNativeAndroidRecyclerAdapter); QNativeAndroidContextual::onInflate(instance); static bool nativeMethodsRegistered = false; @@ -93,8 +108,8 @@ void QNativeAndroidRecyclerAdapter::onInflate(QAndroidJniObject &instance) nativeMethodsRegistered = true; } - if (m_count > 0) - instance.callMethod("setItemCount", "(I)V", m_count); + if (d->count > 0) + instance.callMethod("setItemCount", "(I)V", d->count); } void QNativeAndroidRecyclerAdapter::onRegisterNativeMethods(jobject adapter) @@ -119,11 +134,11 @@ jobject QNativeAndroidRecyclerAdapter::onCreateViewHolder(JNIEnv *env, jobject o QNativeAndroidView *item = nullptr; QMetaObject::invokeMethod(adapter, "createItem", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QNativeAndroidView *, item)); item->construct(); - adapter->m_holders += QAndroidJniObject("org/qtproject/qt5/android/bindings/support/v7/widget/QtNativeRecyclerAdapter$ViewHolder", + adapter->d_func()->holders += QAndroidJniObject("org/qtproject/qt5/android/bindings/support/v7/widget/QtNativeRecyclerAdapter$ViewHolder", "(Landroid/view/View;J)V", item->instance().object(), reinterpret_cast(item)); - return adapter->m_holders.last().object(); + return adapter->d_func()->holders.last().object(); } return 0; } @@ -143,11 +158,12 @@ void QNativeAndroidRecyclerAdapter::onBindViewHolder(JNIEnv *env, jobject object QNativeAndroidView *QNativeAndroidRecyclerAdapter::createItem() { + Q_D(QNativeAndroidRecyclerAdapter); QNativeAndroidView *item = nullptr; - if (m_delegate) { - QQmlContext *creationContext = m_delegate->creationContext(); + if (d->delegate) { + QQmlContext *creationContext = d->delegate->creationContext(); QQmlContext *context = new QQmlContext(creationContext ? creationContext : qmlContext(this)); - QObject *object = m_delegate->beginCreate(context); + QObject *object = d->delegate->beginCreate(context); if (object) { context->setParent(object); item = qobject_cast(object); @@ -164,8 +180,8 @@ QNativeAndroidView *QNativeAndroidRecyclerAdapter::createItem() item->setParentView(qobject_cast(parent())); // TODO setItemPosition(item, -1); } - if (m_delegate) - m_delegate->completeCreate(); + if (d->delegate) + d->delegate->completeCreate(); return item; } diff --git a/src/android/support/v7/widget/qnativeandroidrecycleradapter_p.h b/src/android/support/v7/widget/qnativeandroidrecycleradapter_p.h index fbb4584..fdc6f27 100644 --- a/src/android/support/v7/widget/qnativeandroidrecycleradapter_p.h +++ b/src/android/support/v7/widget/qnativeandroidrecycleradapter_p.h @@ -54,6 +54,7 @@ QT_BEGIN_NAMESPACE class QQmlComponent; class QNativeAndroidView; +class QNativeAndroidRecyclerAdapterPrivate; class Q_NATIVEANDROID_EXPORT QNativeAndroidRecyclerAdapter : public QNativeAndroidContextual { @@ -87,9 +88,8 @@ private Q_SLOTS: void setItemPosition(QNativeAndroidView *item, int position); private: - int m_count; - QQmlComponent *m_delegate; - QList m_holders; + Q_DISABLE_COPY(QNativeAndroidRecyclerAdapter) + Q_DECLARE_PRIVATE(QNativeAndroidRecyclerAdapter) }; QT_END_NAMESPACE diff --git a/src/android/support/v7/widget/qnativeandroidrecyclerview.cpp b/src/android/support/v7/widget/qnativeandroidrecyclerview.cpp index 4f38fcf..6bffa43 100644 --- a/src/android/support/v7/widget/qnativeandroidrecyclerview.cpp +++ b/src/android/support/v7/widget/qnativeandroidrecyclerview.cpp @@ -35,35 +35,45 @@ ****************************************************************************/ #include "qnativeandroidrecyclerview_p.h" +#include "qnativeandroidviewgroup_p_p.h" #include "qnativeandroidrecycleradapter_p.h" #include "qtnativeandroidfunctions_p.h" QT_BEGIN_NAMESPACE -QNativeAndroidRecyclerView::QNativeAndroidRecyclerView(QNativeAndroidContext *context) : - QNativeAndroidViewGroup(context), m_adapter(0) +class QNativeAndroidRecyclerViewPrivate : public QNativeAndroidViewGroupPrivate +{ +public: + QNativeAndroidRecyclerAdapter *adapter = nullptr; + QAndroidJniObject layoutManager; +}; + +QNativeAndroidRecyclerView::QNativeAndroidRecyclerView(QNativeAndroidContext *context) + : QNativeAndroidViewGroup(*(new QNativeAndroidRecyclerViewPrivate), context) { } QNativeAndroidRecyclerAdapter *QNativeAndroidRecyclerView::adapter() const { - return m_adapter; + Q_D(const QNativeAndroidRecyclerView); + return d->adapter; } void QNativeAndroidRecyclerView::setAdapter(QNativeAndroidRecyclerAdapter *adapter) { - if (m_adapter != adapter) { - if (m_adapter) { - m_adapter->setContext(0); - disconnect(m_adapter, &QNativeAndroidObject::instanceChanged, this, &QNativeAndroidRecyclerView::updateAdapter); - m_adapter->destruct(); + Q_D(QNativeAndroidRecyclerView); + if (d->adapter != adapter) { + if (d->adapter) { + d->adapter->setContext(0); + disconnect(d->adapter, &QNativeAndroidObject::instanceChanged, this, &QNativeAndroidRecyclerView::updateAdapter); + d->adapter->destruct(); } - m_adapter = adapter; - if (m_adapter) { - m_adapter->setContext(context()); - connect(m_adapter, &QNativeAndroidObject::instanceChanged, this, &QNativeAndroidRecyclerView::updateAdapter); + d->adapter = adapter; + if (d->adapter) { + d->adapter->setContext(context()); + connect(d->adapter, &QNativeAndroidObject::instanceChanged, this, &QNativeAndroidRecyclerView::updateAdapter); if (isValid()) - m_adapter->construct(); + d->adapter->construct(); } emit adapterChanged(); }} @@ -77,13 +87,14 @@ QAndroidJniObject QNativeAndroidRecyclerView::onCreate() void QNativeAndroidRecyclerView::onInflate(QAndroidJniObject& instance) { - m_layoutManager = QAndroidJniObject("android/support/v7/widget/LinearLayoutManager", + Q_D(QNativeAndroidRecyclerView); + d->layoutManager = QAndroidJniObject("android/support/v7/widget/LinearLayoutManager", "(Landroid/content/Context;)V", ctx().object()); instance.callMethod("setLayoutManager", "(Landroid/support/v7/widget/RecyclerView$LayoutManager;)V", - m_layoutManager.object()); + d->layoutManager.object()); QNativeAndroidViewGroup::onInflate(instance); } @@ -97,11 +108,12 @@ void QNativeAndroidRecyclerView::objectChange(ObjectChange change) void QNativeAndroidRecyclerView::updateAdapter() { - if (!isValid() || !m_adapter) + Q_D(QNativeAndroidRecyclerView); + if (!isValid() || !d->adapter) return; QAndroidJniObject view = instance(); - QAndroidJniObject adapter = m_adapter->instance(); + QAndroidJniObject adapter = d->adapter->instance(); QtNativeAndroid::callFunction([=]() { view.callMethod("setAdapter", "(Landroid/support/v7/widget/RecyclerView$Adapter;)V", adapter.object()); }); diff --git a/src/android/support/v7/widget/qnativeandroidrecyclerview_p.h b/src/android/support/v7/widget/qnativeandroidrecyclerview_p.h index 7270741..6b4d8a0 100644 --- a/src/android/support/v7/widget/qnativeandroidrecyclerview_p.h +++ b/src/android/support/v7/widget/qnativeandroidrecyclerview_p.h @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE class QNativeAndroidRecyclerAdapter; +class QNativeAndroidRecyclerViewPrivate; class Q_NATIVEANDROID_EXPORT QNativeAndroidRecyclerView : public QNativeAndroidViewGroup { @@ -78,8 +79,8 @@ private Q_SLOTS: void updateAdapter(); private: - QNativeAndroidRecyclerAdapter *m_adapter; - QAndroidJniObject m_layoutManager; + Q_DISABLE_COPY(QNativeAndroidRecyclerView) + Q_DECLARE_PRIVATE(QNativeAndroidRecyclerView) }; QT_END_NAMESPACE -- cgit v1.2.3