00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef JAVAQXQSWING_H
00010 #define JAVAQXQSWING_H
00011
00019
00020
00021
00022
00023 #include <QtGui>
00024
00025 #include "JavaQxCore.h"
00026
00027 #include "JNIQSwingWrapper.h"
00028 #include "QSwingString.h"
00029 #include "QColorAdapter.h"
00030 #include "DimensionObject.h"
00031 #include "RectangleObject.h"
00032 #include "QFontAdapter.h"
00033 #include "QEventsAdapter.h"
00034 #include "QSwingMetaObject.h"
00035 #include "QSwingUtilitiesBridge.h"
00036
00037
00038
00039
00040
00041 template<typename T>
00042 inline T invokeMember(QObject *obj, const char *method, const char *type,
00043 QGenericArgument val0 = QGenericArgument(),
00044 QGenericArgument val1 = QGenericArgument(),
00045 QGenericArgument val2 = QGenericArgument(),
00046 QGenericArgument val3 = QGenericArgument(),
00047 QGenericArgument val4 = QGenericArgument(),
00048 QGenericArgument val5 = QGenericArgument(),
00049 QGenericArgument val6 = QGenericArgument(),
00050 QGenericArgument val7 = QGenericArgument(),
00051 QGenericArgument val8 = QGenericArgument(),
00052 QGenericArgument val9 = QGenericArgument())
00053 {
00054 T t;
00055 #ifdef JAVAQX_DEBUG
00056 bool memberInvoked =
00057 #endif // JAVAQX_DEBUG
00058 QSwingMetaObject::invokeMember(obj, method, type, static_cast<void *>(&t),
00059 &val0, &val1, &val2, &val3, &val4, &val5,
00060 &val6, &val7, &val8, &val9);
00061 #ifdef JAVAQX_DEBUG
00062 Q_ASSERT(memberInvoked);
00063 #endif // JAVAQX_DEBUG
00064 return t;
00065 }
00066
00067 template<typename T>
00068 inline T invokeStaticMember(int classID, int methodID, const char *type,
00069 QGenericArgument val0 = QGenericArgument(),
00070 QGenericArgument val1 = QGenericArgument(),
00071 QGenericArgument val2 = QGenericArgument(),
00072 QGenericArgument val3 = QGenericArgument(),
00073 QGenericArgument val4 = QGenericArgument(),
00074 QGenericArgument val5 = QGenericArgument(),
00075 QGenericArgument val6 = QGenericArgument(),
00076 QGenericArgument val7 = QGenericArgument(),
00077 QGenericArgument val8 = QGenericArgument(),
00078 QGenericArgument val9 = QGenericArgument())
00079 {
00080 T t;
00081 #ifdef JAVAQX_DEBUG
00082 bool memberInvoked =
00083 #endif // JAVAQX_DEBUG
00084 QSwingMetaObject::invokeStaticMember(classID, methodID, type,
00085 static_cast<void *>(&t), &val0,
00086 &val1, &val2, &val3, &val4, &val5,
00087 &val6, &val7, &val8, &val9);
00088 #ifdef JAVAQX_DEBUG
00089 Q_ASSERT(memberInvoked);
00090 #endif // JAVAQX_DEBUG
00091 return t;
00092 }
00093
00094
00095
00096
00097
00098 template inline jobject invokeMember<jobject>(
00099 QObject *, const char *, const char *,
00100 QGenericArgument, QGenericArgument, QGenericArgument,
00101 QGenericArgument, QGenericArgument, QGenericArgument,
00102 QGenericArgument, QGenericArgument, QGenericArgument,
00103 QGenericArgument);
00104 template inline jstring invokeMember<jstring>(
00105 QObject *, const char *, const char *,
00106 QGenericArgument, QGenericArgument, QGenericArgument,
00107 QGenericArgument, QGenericArgument, QGenericArgument,
00108 QGenericArgument, QGenericArgument, QGenericArgument,
00109 QGenericArgument);
00110 template inline jint invokeMember<jint>(
00111 QObject *, const char *, const char *,
00112 QGenericArgument, QGenericArgument, QGenericArgument,
00113 QGenericArgument, QGenericArgument, QGenericArgument,
00114 QGenericArgument, QGenericArgument, QGenericArgument,
00115 QGenericArgument);
00116 template inline jboolean invokeMember<jboolean>(
00117 QObject *, const char *, const char *,
00118 QGenericArgument, QGenericArgument, QGenericArgument,
00119 QGenericArgument, QGenericArgument, QGenericArgument,
00120 QGenericArgument, QGenericArgument, QGenericArgument,
00121 QGenericArgument);
00122
00123 template inline jobject invokeStaticMember<jobject>(
00124 int, int, const char *, QGenericArgument,
00125 QGenericArgument, QGenericArgument, QGenericArgument,
00126 QGenericArgument, QGenericArgument, QGenericArgument,
00127 QGenericArgument, QGenericArgument, QGenericArgument);
00128 template inline jstring invokeStaticMember<jstring>(
00129 int, int, const char *, QGenericArgument,
00130 QGenericArgument, QGenericArgument, QGenericArgument,
00131 QGenericArgument, QGenericArgument, QGenericArgument,
00132 QGenericArgument, QGenericArgument, QGenericArgument);
00133 template inline jobjectArray invokeStaticMember<jobjectArray>(
00134 int, int, const char *, QGenericArgument,
00135 QGenericArgument, QGenericArgument, QGenericArgument,
00136 QGenericArgument, QGenericArgument, QGenericArgument,
00137 QGenericArgument, QGenericArgument, QGenericArgument);
00138 template inline jint invokeStaticMember<jint>(
00139 int, int, const char *, QGenericArgument,
00140 QGenericArgument, QGenericArgument, QGenericArgument,
00141 QGenericArgument, QGenericArgument, QGenericArgument,
00142 QGenericArgument, QGenericArgument, QGenericArgument);
00143 template inline jboolean invokeStaticMember<jboolean>(
00144 int, int, const char *, QGenericArgument,
00145 QGenericArgument, QGenericArgument, QGenericArgument,
00146 QGenericArgument, QGenericArgument, QGenericArgument,
00147 QGenericArgument, QGenericArgument, QGenericArgument);
00148
00149
00150
00151
00152
00153 #define JBOOLEAN_ARG(boolean) Q_ARG(jboolean, boolean)
00154 #define JCHAR_ARG(char) Q_ARG(jchar, char)
00155 #define JSHORT_ARG(short) Q_ARG(jshort, short)
00156 #define JINT_ARG(int) Q_ARG(jint, int)
00157 #define JLONG_ARG(long) Q_ARG(jlong, long)
00158 #define JFLOAT_ARG(float) Q_ARG(jfloat, float)
00159 #define JDOUBLE_ARG(double) Q_ARG(jdouble, double)
00160 #define JOBJECT_ARG(object) Q_ARG(jobject, GlobalJObject(env, object).ref())
00161 #define JSTRING_ARG(string) Q_ARG(jstring, GlobalJString(env, string).ref())
00162 #define JCLASS_ARG(class) Q_ARG(jclass, GlobalJClass(env, class).ref())
00163 #define JBYTEARRAY_ARG(byteArray) \
00164 Q_ARG(jbyteArray, GlobalJByteArray(env, byteArray).ref())
00165 #define QSWING_ENV_ARG Q_ARG(JNIEnv *, QSWING_ENV)
00166
00167 #ifndef JAVAQX_DEBUG
00168 #define QSWING_REENTRANT(method, ...) \
00169 if (!JNIQSwingWrapper::isQSwingThread(env)) { \
00170 QMetaObject::invokeMethod(this, #method, \
00171 Qt::BlockingQueuedConnection, \
00172 QGenericReturnArgument(), __VA_ARGS__); \
00173 return; \
00174 }
00175 #endif // JAVAQX_DEBUG
00176
00177 #ifndef JAVAQX_DEBUG
00178 #define QSWING_STATIC_REENTRANT(class, method, ...) \
00179 if (!JNIQSwingWrapper::isQSwingThread(env)) { \
00180 QSwingMetaObject::invokeStaticMember( \
00181 QSwingMetaObject::class##_classID, \
00182 QSwingMetaObject::class##_##method##_methodID, \
00183 __VA_ARGS__); \
00184 return; \
00185 }
00186 #endif // JAVAQX_DEBUG
00187
00188 #ifdef JAVAQX_DEBUG
00189 #define QSWING_REENTRANT(method, ...) \
00190 if (!JNIQSwingWrapper::isQSwingThread(env)) { \
00191 bool methodInvoked = \
00192 QMetaObject::invokeMethod(this, #method, \
00193 Qt::BlockingQueuedConnection, \
00194 QGenericReturnArgument(), __VA_ARGS__); \
00195 Q_ASSERT(methodInvoked); \
00196 return; \
00197 }
00198 #endif // JAVAQX_DEBUG
00199
00200 #ifdef JAVAQX_DEBUG
00201 #define QSWING_STATIC_REENTRANT(class, method, ...) \
00202 if (!JNIQSwingWrapper::isQSwingThread(env)) { \
00203 bool methodInvoked = \
00204 QSwingMetaObject::invokeStaticMember( \
00205 QSwingMetaObject::class##_classID, \
00206 QSwingMetaObject::class##_##method##_methodID, \
00207 __VA_ARGS__); \
00208 Q_ASSERT(methodInvoked); \
00209 return; \
00210 }
00211 #endif // JAVAQX_DEBUG
00212
00213 #define QSWING_REENTRANT_RETURN(method, type, ...) \
00214 if (!JNIQSwingWrapper::isQSwingThread(env)) { \
00215 return invokeMember<type>(this, #method, #type, __VA_ARGS__); \
00216 }
00217
00218 #define QSWING_STATIC_REENTRANT_RETURN(class, method, type, ...) \
00219 if (!JNIQSwingWrapper::isQSwingThread(env)) { \
00220 return invokeStaticMember<type>( \
00221 QSwingMetaObject::class##_classID, \
00222 QSwingMetaObject::class##_##method##_methodID, \
00223 #type, __VA_ARGS__); \
00224 }
00225
00226 #endif // JAVAQX_QSWING_H
00227
00228
00229
00230
00231
00232
00233
00234