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();
23 Q_ASSERT(privateData.size() == 4);
24 if (privateData.size() != 4) {
25 qCritical(
"QtModelIndex has %lld private data entries, expected 4",
26 qlonglong(privateData.size()));
30 const jlong modelReference = privateData[3];
34 const jint row = privateData[0];
35 const jint column = privateData[1];
36 QAbstractItemModel *model =
reinterpret_cast<QAbstractItemModel *>(modelReference);
37 QAndroidItemModelProxy *proxyModel = qobject_cast<QAndroidItemModelProxy *>(model);
43 const jint internalId = privateData[2];
44 return proxyModel->createIndex(row, column, internalId);
46 const JQtModelIndex parent = jModelIndex.getField<JQtModelIndex>(
"m_parent");
48 return model->index(row, column, QAndroidModelIndexProxy::qInstance(parent));
53JQtModelIndex QAndroidModelIndexProxy::jInstance(QModelIndex modelIndex)
55 if (!modelIndex.isValid())
56 return JQtModelIndex();
57 bool isModelProxy = qobject_cast<
const QAndroidItemModelProxy *>(modelIndex.model());
59 return JQtModelIndex(modelIndex.row(), modelIndex.column(), jlong(modelIndex.internalId()),
60 reinterpret_cast<jlong>(modelIndex.model()));
62 return JQtModelIndex(modelIndex.row(), modelIndex.column(),
63 QAndroidModelIndexProxy::jInstance(modelIndex.parent()),
64 reinterpret_cast<jlong>(modelIndex.model()));
67jobject QAndroidModelIndexProxy::data(JNIEnv *env, jobject object,
int role)
72 QModelIndex modelIndex = qInstance(object);
73 if (!modelIndex.isValid())
76 return QAndroidTypeConverter::toJavaObject(modelIndex.model()->data(modelIndex, role), env);
100bool QAndroidModelIndexProxy::registerNatives(QJniEnvironment &env)
102 return env.registerNativeMethods(
103 Traits<JQtModelIndex>::className(),
104 { Q_JNI_NATIVE_SCOPED_METHOD(data, QAndroidModelIndexProxy),
105 Q_JNI_NATIVE_SCOPED_METHOD(internalId, QAndroidModelIndexProxy),
106 Q_JNI_NATIVE_SCOPED_METHOD(isValid, QAndroidModelIndexProxy),
107 Q_JNI_NATIVE_SCOPED_METHOD(parent, QAndroidModelIndexProxy) });