Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qandroiditemmodelproxy_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QANDROIDITEMMODELPROXY_P_H
5#define QANDROIDITEMMODELPROXY_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16
17#include <QtQuick/private/qandroidmodelindexproxy_p.h>
18#include <QtQuick/private/qandroidtypes_p.h>
19#include <QtQuick/private/qtquickglobal_p.h>
20
21#include <QtCore/qabstractitemmodel.h>
22#include <QtCore/qjniobject.h>
23#include <QtCore/qjnienvironment.h>
24#include <QtCore/qjnitypes.h>
25
27
28class Q_QUICK_EXPORT QAndroidItemModelProxy : public QAbstractItemModel
29{
31
32public:
33 explicit QAndroidItemModelProxy(QtJniTypes::JQtAbstractItemModel jInstance)
34 : jInstance(jInstance)
35 {
36 }
37
38 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
39 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
40 QModelIndex index(int row, int column,
41 const QModelIndex &parent = QModelIndex()) const override;
42 QModelIndex parent(const QModelIndex &index) const override;
43 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
44
45 bool canFetchMore(const QModelIndex &parent) const override;
46 bool canFetchMoreDefault(const QModelIndex &parent) const;
47 QHash<int, QByteArray> roleNames() const override;
48 QHash<int, QByteArray> defaultRoleNames() const;
49 void fetchMore(const QModelIndex &parent) override;
50 void fetchMoreDefault(const QModelIndex &parent);
51 bool hasChildren(const QModelIndex &parent) const override;
52 bool hasChildrenDefault(const QModelIndex &parent) const;
53 QModelIndex sibling(int row, int column, const QModelIndex &parent) const override;
54 QModelIndex siblingDefault(int row, int column, const QModelIndex &parent);
55
57 nativeInstance(QtJniTypes::JQtAbstractItemModel itemModel);
58 Q_REQUIRED_RESULT static QAbstractItemModel *createNativeProxy(QJniObject itemModel);
59 static QJniObject createProxy(QAbstractItemModel *abstractClass);
60
61 template <typename Func, typename... Args>
62 static auto invokeNativeProxyMethod(JNIEnv */*env*/, jobject jvmObject, Func func, Args &&...args)
63 {
64 Q_ASSERT(jvmObject);
65 auto model = qobject_cast<QAndroidItemModelProxy *>(nativeInstance(jvmObject));
67 return std::invoke(func, model, std::forward<Args>(args)...);
68 }
69
70 template <typename Func, typename... Args>
71 static auto invokeNativeMethod(JNIEnv */*env*/, jobject jvmObject, Func func, Args &&...args)
72 {
73 Q_ASSERT(jvmObject);
74 auto model = nativeInstance(jvmObject);
76 return std::invoke(func, model, std::forward<Args>(args)...);
77 }
78
79 template <typename Func1, typename Func2, typename... Args>
80 static auto invokeNativeImpl(JNIEnv */*env*/, jobject jvmObject, Func1 defaultFunc, Func2 func,
81 Args &&...args)
82 {
83 Q_ASSERT(jvmObject);
84 auto nativeModel = nativeInstance(jvmObject);
85 auto nativeProxyModel = qobject_cast<QAndroidItemModelProxy *>(nativeModel);
86 if (nativeProxyModel)
87 return std::invoke(defaultFunc, nativeProxyModel, std::forward<Args>(args)...);
88 else
89 return std::invoke(func, nativeModel, std::forward<Args>(args)...);
90 }
91
92 static jint jni_columnCount(JNIEnv *env, jobject object, JQtModelIndex parent);
93 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_columnCount)
94
95 static jobject jni_data(JNIEnv *env, jobject object, JQtModelIndex index, jint role);
96 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_data)
97
98 static jobject jni_index(JNIEnv *env, jobject object, jint row, jint column,
99 JQtModelIndex parent);
100 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_index)
101
102 static jobject jni_parent(JNIEnv *env, jobject object, JQtModelIndex index);
103 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_parent)
104
105 static jint jni_rowCount(JNIEnv *env, jobject object, JQtModelIndex parent);
106 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_rowCount)
107
108 static jboolean jni_canFetchMore(JNIEnv *env, jobject object, JQtModelIndex parent);
109 QT_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE_2(jni_canFetchMore, canFetchMore)
110
111 static void jni_fetchMore(JNIEnv *env, jobject object, JQtModelIndex parent);
112 QT_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE_2(jni_fetchMore, fetchMore)
113
114 static jboolean jni_hasChildren(JNIEnv *env, jobject object, JQtModelIndex parent);
115 QT_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE_2(jni_hasChildren, hasChildren)
116
117 static jboolean jni_hasIndex(JNIEnv *env, jobject object, jint row, jint column,
118 JQtModelIndex parent);
119 QT_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE_2(jni_hasIndex, hasIndex)
120
121 static jobject jni_roleNames(JNIEnv *env, jobject object);
122 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_roleNames)
123
124 static void jni_beginInsertColumns(JNIEnv *env, jobject object, JQtModelIndex parent,
125 jint first, jint last);
126 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_beginInsertColumns)
127
128 static void jni_beginInsertRows(JNIEnv *env, jobject object, JQtModelIndex parent, jint first,
129 jint last);
130 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_beginInsertRows)
131
132 static jboolean jni_beginMoveColumns(JNIEnv *env, jobject object, JQtModelIndex sourceParent,
133 jint sourceFirst, jint sourceLast,
134 JQtModelIndex destinationParent, jint destinationChild);
135 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_beginMoveColumns)
136
137 static jboolean jni_beginMoveRows(JNIEnv *env, jobject object, JQtModelIndex sourceParent,
138 jint sourceFirst, jint sourceLast,
139 JQtModelIndex destinationParent, jint destinationChild);
140 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_beginMoveRows)
141
142 static void jni_beginRemoveColumns(JNIEnv *env, jobject object, JQtModelIndex parent,
143 jint first, jint last);
144 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_beginRemoveColumns)
145
146 static void jni_beginRemoveRows(JNIEnv *env, jobject object, JQtModelIndex parent, jint first,
147 jint last);
148 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_beginRemoveRows)
149
150 static void jni_beginResetModel(JNIEnv *env, jobject object);
151 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_beginResetModel)
152
153 static jobject jni_createIndex(JNIEnv *env, jobject object, jint row, jint column, jlong id);
154 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_createIndex)
155
156 static void jni_endInsertColumns(JNIEnv *env, jobject object);
157 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_endInsertColumns)
158
159 static void jni_endInsertRows(JNIEnv *env, jobject object);
160 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_endInsertRows)
161
162 static void jni_endMoveColumns(JNIEnv *env, jobject object);
163 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_endMoveColumns)
164
165 static void jni_endMoveRows(JNIEnv *env, jobject object);
166 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_endMoveRows)
167
168 static void jni_endRemoveColumns(JNIEnv *env, jobject object);
169 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_endRemoveColumns)
170
171 static void jni_endRemoveRows(JNIEnv *env, jobject object);
172 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_endRemoveRows)
173
174 static void jni_endResetModel(JNIEnv *env, jobject object);
175 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_endResetModel)
176
177 static jobject jni_sibling(JNIEnv *env, jobject object, jint row, jint column,
178 JQtModelIndex parent);
179 Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(jni_sibling)
180
181 static bool registerAbstractNatives(QJniEnvironment &env);
182 static bool registerProxyNatives(QJniEnvironment &env);
183
184private:
185 QJniObject jInstance;
187};
188
190
191#endif // QANDROIDITEMMODELPROXY_P_H
static auto invokeNativeMethod(JNIEnv *, jobject jvmObject, Func func, Args &&...args)
QAndroidItemModelProxy(QtJniTypes::JQtAbstractItemModel jInstance)
static auto invokeNativeProxyMethod(JNIEnv *, jobject jvmObject, Func func, Args &&...args)
static auto invokeNativeImpl(JNIEnv *, jobject jvmObject, Func1 defaultFunc, Func2 func, Args &&...args)
\inmodule QtCore
\inmodule QtCore
\inmodule QtCore
\inmodule QtCore
Definition qvariant.h:65
Combined button and popup list for selecting options.
@ DisplayRole
#define Q_REQUIRED_RESULT
GLuint index
[2]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint first
GLenum GLenum GLsizei void GLsizei void * column
GLenum func
Definition qopenglext.h:663
GLenum GLenum GLsizei void * row
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_OBJECT
QSqlQueryModel * model
[16]
QJSValueList args