00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef QSWINGUTILITIESBRIDGE_H
00010 #define QSWINGUTILITIESBRIDGE_H
00011
00012 #include "JavaQxCore.h"
00013
00014
00015
00016
00017
00024 class JAVAQX_EXPORT QSwingUtilitiesBridge : public QObject
00025 {
00026 Q_OBJECT
00027 private:
00028 QSwingUtilitiesBridge();
00029 QSwingUtilitiesBridge(const QSwingUtilitiesBridge &);
00030 ~QSwingUtilitiesBridge();
00031 public:
00032 static void invokeLater(JNIEnv *env, jclass cls, jobject target);
00033 static void invokeAndWait(JNIEnv *env, jclass cls, jobject target);
00034 static void invokeSafeAndWait(JNIEnv *env, jclass cls, jobject safeTarget);
00035 public:
00036 static void initialize(JNIEnv *env, jclass runnableClass, jclass iteClass);
00037 static jint invokeIntAndWait(JNIEnv *env, jobject obj, jmethodID mid, ...);
00038 static jlong invokeLongAndWait(JNIEnv *env, jobject obj, jmethodID mid, ...);
00039 private:
00040 struct TargetFrame {
00041 jobject target;
00042 jthrowable exception;
00043 };
00044 struct MethodFrame {
00045 jobject obj;
00046 jmethodID mid;
00047 va_list args;
00048 };
00049 struct IntMethodFrame : MethodFrame {
00050 jint result;
00051 };
00052 struct LongMethodFrame : MethodFrame {
00053 jlong result;
00054 };
00055 private:
00056 void invokeLater(jobject target);
00057 void invokeAndWait(TargetFrame *targetFrame);
00058 void invokeSafeAndWait(jobject safeTarget);
00059 void invokeIntAndWait(IntMethodFrame *methodFrame);
00060 void invokeLongAndWait(LongMethodFrame *methodFrame);
00061 private slots:
00062 void invokeLaterSlot(jobject target);
00063 void invokeAndWaitSlot(TargetFrame *targetFrame);
00064 void invokeIntAndWaitSlot(IntMethodFrame *methodFrame);
00065 void invokeLongAndWaitSlot(LongMethodFrame *methodFrame);
00066 signals:
00067 void invokeLaterSignal(jobject target);
00068 void invokeAndWaitSignal(TargetFrame *targetFrame);
00069 void invokeSafeAndWaitSignal(jobject safeTarget);
00070 void invokeIntAndWaitSignal(IntMethodFrame *methodFrame);
00071 void invokeLongAndWaitSignal(LongMethodFrame *methodFrame);
00072 private:
00073 static jmethodID sm_runMID;
00074 static jmethodID sm_iteConstructorMID;
00075 static QSwingUtilitiesBridge *qSwingUtilitiesBridge;
00076 };
00077
00078 #endif //QSWINGUTILITIESBRIDGE_H
00079
00080
00081
00082
00083
00084
00085
00086