JavaQxQSwing.h

00001 /*
00002  * @(#)JavaQxQSwing.h  0.2.0 / 2007-04-13
00003  *
00004  * Copyright (c) 2007, ETF and contributors. All rights reserved.
00005  *
00006  * The contents of this file are subject to the LGPL, version 2.1, license
00007  * distributed with the source code in the file LICENSE.txt
00008  */
00009 #ifndef JAVAQXQSWING_H
00010 #define JAVAQXQSWING_H
00011 
00019 /*^**************************************************************************^*/
00020 /*- JavaQxQSwing :: Includes.                                                -*/
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 /*- JavaQxQSwing :: Global Functions.                                        -*/
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 /*- JavaQxQSwing :: Explicit Function Template Instantiations.               -*/
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 /*- JavaQxQSwing :: Macro Definitions.                                       -*/
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   File History:
00230 
00231  - 2007-04-13 16:21:36 Slobodan
00232    Initial version
00233 
00234 *****************************************************************************^*/

Copyright © 2007 ETF and contributors. All Rights Reserved.