javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/utils.h
branchRCL_3
changeset 26 2455ef1f5bbc
equal deleted inserted replaced
25:ae942d28ec0e 26:2455ef1f5bbc
       
     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     return ConvertString16LC(aJniEnv, aString);
       
   131 }
       
   132 
       
   133 
       
   134 /**
       
   135  * Converts a Java String object to a Symbian descriptor.
       
   136  *
       
   137  * The returned TPtr points to a newly allocated buffer which
       
   138  * must be freed using FreeString() when not needed any longer.
       
   139  *
       
   140  * @sa ConvertStringLC()
       
   141  * @sa ConvertString16L()
       
   142  */
       
   143 inline HBufC* ConvertStringL(JNIEnv* aJniEnv, const jstring aString)
       
   144 {
       
   145     HBufC* result = ConvertStringLC(aJniEnv, aString);
       
   146     if (result != NULL)
       
   147         CleanupStack::Pop(result);
       
   148     return result;
       
   149 }
       
   150 
       
   151 
       
   152 /**
       
   153  * Creates a Java String object
       
   154  */
       
   155 inline jstring NewJavaString(JNIEnv* aJniEnv, const TDesC16& aString)
       
   156 {
       
   157     return aJniEnv->NewString(aString.Ptr(), aString.Length());
       
   158 }
       
   159 
       
   160 
       
   161 /**
       
   162  * Converts a device handle to a display pointer
       
   163  */
       
   164 inline CSwtDisplay* DisplayFromDevice(jint aDeviceHandle)
       
   165 {
       
   166     // Must pass the device handle.
       
   167     // Using display from TLS won't work unless we are in the UI thread.
       
   168     // E.g. GC can be used from a non-UI thread.
       
   169     ASSERT(aDeviceHandle != 0);
       
   170 
       
   171     return static_cast<CSwtDisplay*>(reinterpret_cast<MSwtDevice*>(aDeviceHandle));
       
   172 }
       
   173 
       
   174 
       
   175 // Signature generating macros
       
   176 //#define OBJECT_SIGNATURE( aArgList, aReturnType) "(" aArgList ")" aReturnType
       
   177 
       
   178 
       
   179 #endif // UTILS_H