|
1 /******************************************************************************* |
|
2 * Copyright (c) 2005, 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. This program and the accompanying materials |
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
|
5 * which accompanies this distribution, and is available at |
|
6 * http://www.eclipse.org/legal/epl-v10.html |
|
7 * |
|
8 * Contributors: |
|
9 * Nokia Corporation - S60 implementation |
|
10 *******************************************************************************/ |
|
11 |
|
12 |
|
13 #ifndef UTILS_H |
|
14 #define UTILS_H |
|
15 |
|
16 |
|
17 #include "eswtmobileextensions.h" |
|
18 #include "swtdisplay.h" |
|
19 |
|
20 |
|
21 class CSwtListBoxItem; |
|
22 class MSwtImage; |
|
23 class MSwtImageData; |
|
24 class TRgb; |
|
25 |
|
26 |
|
27 /** |
|
28 * Deletes an object that was allocated by the UI native thread |
|
29 */ |
|
30 template<class C> |
|
31 inline void DeleteInUiHeap(C* aPtr) |
|
32 { |
|
33 delete aPtr; |
|
34 } |
|
35 |
|
36 |
|
37 |
|
38 // Error handling |
|
39 void Throw(TInt aError, JNIEnv* aJniEnv); |
|
40 void ThrowIfError(TInt aError, JNIEnv* aJniEnv); |
|
41 |
|
42 // Releasing a Java peer |
|
43 void ReleasePeer(JNIEnv* aJniEnv, TSwtPeer aPeer); |
|
44 |
|
45 // Method calling |
|
46 jmethodID GetJavaMethodId(JNIEnv* aJniEnv, jobject aObject, const char* aMethodName, const char* aMethodSignature); |
|
47 void CallVoidJavaMethod(TBool& aFailed, JNIEnv* aJniEnv, jobject aObject, const char* aMethodName, const char* aMethodSignature, ...); |
|
48 void CallStaticVoidJavaMethod(TBool& aFailed, JNIEnv* aJniEnv, const char* aClazz, const char* aMethodName, const char* aMethodSignature, ...); |
|
49 jboolean CallBooleanJavaMethod(TBool& aFailed, JNIEnv* aJniEnv, jobject aObject, const char* aMethodName, const char* aMethodSignature, ...); |
|
50 jobject CallObjectJavaMethod(TBool& aFailed, JNIEnv* aJniEnv, jobject aObject, const char* aMethodName, const char* aMethodSignature, ...); |
|
51 jobject CallStaticObjectJavaMethod(TBool& aFailed, JNIEnv* aJniEnv, const char* aClazz, const char* aMethodName, const char* aMethodSignature, ...); |
|
52 |
|
53 // Field retrieval |
|
54 jint GetIntField(JNIEnv* aJniEnv, jobject aObject, jclass aClass, const char* aName, TBool& aFailed); |
|
55 jboolean GetBooleanField(JNIEnv* aJniEnv, jobject aObject, jclass aClass, const char* aName, TBool& aFailed); |
|
56 jobject GetObjectField(JNIEnv* aJniEnv, jobject aObject, jclass aClass, const char* aName, const char* aSignature, TBool& aFailed); |
|
57 HBufC* GetStringFieldL(JNIEnv* aJniEnv, jobject aObject, jclass aClass, const char* aName, TBool& aFailed); |
|
58 HBufC8* GetByteArrayFieldL(JNIEnv* aJniEnv, jobject aObject, jclass aClass, const char* aName, TBool& aFailed); |
|
59 |
|
60 // Type conversion |
|
61 jboolean ConvertBoolean(TBool aBool); |
|
62 HBufC* ConvertStringL(JNIEnv* aJniEnv, const jstring aString); |
|
63 HBufC* ConvertStringLC(JNIEnv* aJniEnv, const jstring aString); |
|
64 HBufC16* ConvertString16LC(JNIEnv* aJniEnv, const jstring aString); |
|
65 TInt JavaIntsToPoints(JNIEnv* aJniEnv, jintArray aIntArray, TPoint*& aPoints); |
|
66 TInt JavaIntsToInts(JNIEnv* aJniEnv, jintArray aIntArray, TInt*& aInts); |
|
67 TInt* JavaIntRegionToInts(JNIEnv* aJniEnv, jintArray aIntArray, const jsize& aStart, const jsize& aCount); |
|
68 void ConvertIntegerArrayL(JNIEnv* aJniEnv, jintArray aIntArray, RArray<TInt>& aResultArray); |
|
69 HBufC8* ConvertByteArrayL(JNIEnv* aJniEnv, jbyteArray aByteArray); |
|
70 CDesCArray* ConvertStringArrayL(JNIEnv* aJniEnv, jobjectArray aStringArray); |
|
71 CSwtListBoxItem* ConvertListBoxItemL(JNIEnv* aJniEnv, const jobject aJavaItem); |
|
72 RSwtListBoxItemsArray ConvertListBoxItemArrayL(JNIEnv* aJniEnv, const jobjectArray aDataModelArray, TBool& aFailed); |
|
73 |
|
74 // Creating Java objects |
|
75 jbyteArray NewJavaByteArray(JNIEnv* aJniEnv, const TDesC8& aArray); |
|
76 jbyteArray NewJavaByteArray(JNIEnv* aJniEnv, const TDesC8* aArray, TBool& aFailed); |
|
77 jintArray NewJavaIntArray(JNIEnv* aJniEnv, const TInt* aArray, TInt aCount); |
|
78 jobject NewJavaPoint(JNIEnv* aJniEnv, const TPoint& aPoint); |
|
79 jobject NewJavaRectangle(JNIEnv* aJniEnv, const TRect& aRect); |
|
80 jobject NewJavaRgb(JNIEnv* aJniEnv, const TRgb& aRgb); |
|
81 jstring NewJavaString(JNIEnv* aJniEnv, const TDesC16& aString); |
|
82 jobject NewJavaImageData(JNIEnv* aJniEnv, const MSwtImageData& aData); |
|
83 jobjectArray NewJavaImageDataArray(JNIEnv* aJniEnv, const CSwtImageDataArray* aArray); |
|
84 jobjectArray NewJavaControlArray(JNIEnv* aJniEnv, const CSwtPeerArray* aArray); |
|
85 jobjectArray NewJavaObjectArray(JNIEnv* aJniEnv, const CSwtPeerArray* aArray, const char* aClassname); |
|
86 |
|
87 TBool IsDefaultDisplayDisposed(TBool& aFailed, JNIEnv* aJniEnv); |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 /** |
|
93 * Converts a Symbian Leave error code into a Java Exception |
|
94 * |
|
95 * @param aError Can be any Symbian error code or SWT error code; if it is 0 |
|
96 * nothing is thrown. |
|
97 * @param aJniEnv The JNI environment |
|
98 */ |
|
99 inline void ThrowIfError(TInt aError, JNIEnv* aJniEnv) |
|
100 { |
|
101 if (aError) |
|
102 Throw(aError, aJniEnv); |
|
103 } |
|
104 |
|
105 |
|
106 /** |
|
107 * Converts a Symbian boolean to a Java boolean |
|
108 * |
|
109 * Java booleans are 8-bit values whereas Symbian ones are 32-bit values, |
|
110 * truncation may occur which could lead to unexpected results. This function |
|
111 * prevents truncation. |
|
112 */ |
|
113 inline jboolean ConvertBoolean(TBool aBool) |
|
114 { |
|
115 return (aBool) ? static_cast<jboolean>(JNI_TRUE) : static_cast<jboolean>(JNI_FALSE); |
|
116 } |
|
117 |
|
118 |
|
119 /** |
|
120 * Converts a Java String object to a Symbian descriptor. |
|
121 * |
|
122 * Same as ConvertStringL() except the return value is placed onto |
|
123 * the cleanup stack. |
|
124 * |
|
125 * @sa ConvertStringL() |
|
126 * @sa ConvertString16LC() |
|
127 */ |
|
128 inline HBufC* ConvertStringLC(JNIEnv* aJniEnv, const jstring aString) |
|
129 { |
|
130 #ifdef _UNICODE |
|
131 return ConvertString16LC(aJniEnv, aString); |
|
132 #else |
|
133 // code needs to be written |
|
134 #endif |
|
135 } |
|
136 |
|
137 |
|
138 /** |
|
139 * Converts a Java String object to a Symbian descriptor. |
|
140 * |
|
141 * The returned TPtr points to a newly allocated buffer which |
|
142 * must be freed using FreeString() when not needed any longer. |
|
143 * |
|
144 * @sa ConvertStringLC() |
|
145 * @sa ConvertString16L() |
|
146 */ |
|
147 inline HBufC* ConvertStringL(JNIEnv* aJniEnv, const jstring aString) |
|
148 { |
|
149 HBufC* result = ConvertStringLC(aJniEnv, aString); |
|
150 if (result != NULL) |
|
151 CleanupStack::Pop(result); |
|
152 return result; |
|
153 } |
|
154 |
|
155 |
|
156 /** |
|
157 * Creates a Java String object |
|
158 */ |
|
159 inline jstring NewJavaString(JNIEnv* aJniEnv, const TDesC16& aString) |
|
160 { |
|
161 return aJniEnv->NewString(aString.Ptr(), aString.Length()); |
|
162 } |
|
163 |
|
164 |
|
165 /** |
|
166 * Converts a device handle to a display pointer |
|
167 */ |
|
168 inline CSwtDisplay* DisplayFromDevice(jint aDeviceHandle) |
|
169 { |
|
170 // Must pass the device handle. |
|
171 // Using display from TLS won't work unless we are in the UI thread. |
|
172 // E.g. GC can be used from a non-UI thread. |
|
173 ASSERT(aDeviceHandle != 0); |
|
174 |
|
175 return static_cast<CSwtDisplay*>(reinterpret_cast<MSwtDevice*>(aDeviceHandle)); |
|
176 } |
|
177 |
|
178 |
|
179 // Signature generating macros |
|
180 //#define OBJECT_SIGNATURE( aArgList, aReturnType) "(" aArgList ")" aReturnType |
|
181 |
|
182 |
|
183 #endif // UTILS_H |