15QModelIndex QAndroidModelIndexProxy::qInstance(JQtModelIndex jModelIndex)
17 if (!jModelIndex.isValid())
20 const QJniArray<jlong> jPrivateArray = jModelIndex.getField<jlong[]>(
"m_privateData");
21 const auto privateData = jPrivateArray.toContainer();
22 Q_ASSERT(privateData.size() == 4);
24 const jlong modelReference = privateData[3];
28 const jint row = privateData[0];
29 const jint column = privateData[1];
30 QAbstractItemModel *model =
reinterpret_cast<QAbstractItemModel *>(modelReference);
31 QAndroidItemModelProxy *proxyModel = qobject_cast<QAndroidItemModelProxy *>(model);
37 const jint internalId = privateData[2];
38 return proxyModel->createIndex(row, column, internalId);
40 const JQtModelIndex parent = jModelIndex.getField<JQtModelIndex>(
"m_parent");
42 return model->index(row, column, QAndroidModelIndexProxy::qInstance(parent));
47JQtModelIndex QAndroidModelIndexProxy::jInstance(QModelIndex modelIndex)
49 if (!modelIndex.isValid())
50 return JQtModelIndex();
51 bool isModelProxy = qobject_cast<
const QAndroidItemModelProxy *>(modelIndex.model());
53 return JQtModelIndex(modelIndex.row(), modelIndex.column(), jlong(modelIndex.internalId()),
54 reinterpret_cast<jlong>(modelIndex.model()));
56 return JQtModelIndex(modelIndex.row(), modelIndex.column(),
57 QAndroidModelIndexProxy::jInstance(modelIndex.parent()),
58 reinterpret_cast<jlong>(modelIndex.model()));
61jobject QAndroidModelIndexProxy::data(JNIEnv *env, jobject object,
int role)
66 QModelIndex modelIndex = qInstance(object);
67 if (!modelIndex.isValid())
70 return QAndroidTypeConverter::toJavaObject(modelIndex.model()->data(modelIndex, role), env);
94bool QAndroidModelIndexProxy::registerNatives(QJniEnvironment &env)
96 return env.registerNativeMethods(
97 Traits<JQtModelIndex>::className(),
98 { Q_JNI_NATIVE_SCOPED_METHOD(data, QAndroidModelIndexProxy),
99 Q_JNI_NATIVE_SCOPED_METHOD(internalId, QAndroidModelIndexProxy),
100 Q_JNI_NATIVE_SCOPED_METHOD(isValid, QAndroidModelIndexProxy),
101 Q_JNI_NATIVE_SCOPED_METHOD(parent, QAndroidModelIndexProxy) });