diff -r f5050f1da672 -r 04becd199f91 javauis/lcdui_akn/javalcdui/src/Form.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/lcdui_akn/javalcdui/src/Form.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,230 @@ +/* +* Copyright (c) 1999-2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "CMIDToolkit.h" +#include "MIDUtils.h" +#include "javax_microedition_lcdui_Form.h" + +struct TFormCreate +{ + jweak iRef; + jint iDisplayable; +}; + +struct TFormAttribs +{ + jint iHandle; + TSize iSize; +}; + +LOCAL_C void CreateFormL(CMIDToolkit* aToolkit, TFormCreate* aCreate, TFormAttribs* aAttribs) +{ + MMIDDisplayable* displayable = MIDUnhand(aCreate->iDisplayable); + MMIDForm* form = aToolkit->ComponentFactory()->CreateFormL(*displayable); + CleanupDisposePushL(form); + aAttribs->iHandle = aToolkit->RegisterComponentL(form, aCreate->iRef); + CleanupPopComponent(form); + aCreate->iRef = 0; + aAttribs->iSize.iWidth = form->Width(); + aAttribs->iSize.iHeight = form->Height(); +} + +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1create +( + JNIEnv* aJni, + jobject aForm, + jint aToolkit, + jint aDisplayable, + jintArray aFormAttribReturn +) +{ + TFormCreate create; + TFormAttribs attribs; + + create.iDisplayable = aDisplayable; + create.iRef = aJni->NewWeakGlobalRef(aForm); + attribs.iHandle = 0; + + jint error; + if (create.iRef) + { + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + error = toolkit->ExecuteTrap(&CreateFormL, toolkit, &create, &attribs); + } + else + { + error = KErrNoMemory; + } + + if (create.iRef) + { + // CreateFormL clears if successful + aJni->DeleteWeakGlobalRef(create.iRef); + } + + jint attribArray[3]; + attribArray[0]=attribs.iHandle; + attribArray[1]=attribs.iSize.iWidth; + attribArray[2]=attribs.iSize.iHeight; + aJni->SetIntArrayRegion(aFormAttribReturn, 0, 3, attribArray); + + return error; +} + +LOCAL_C void RefreshItemL(MMIDForm* aForm,TInt aIndex) +{ + aForm->RefreshItemL(aIndex); +} +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1refresh +(JNIEnv*,jobject,jint aForm,jint aToolkit,jint aIndex) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + return toolkit->ExecuteTrap(&RefreshItemL,form,(TInt)aIndex); +} + +LOCAL_C TBool IsVisible(MMIDForm* aForm,TInt aIndex) +{ + return aForm->IsItemVisible(aIndex); +} +JNIEXPORT jboolean JNICALL Java_javax_microedition_lcdui_Form__1isVisible +(JNIEnv*,jobject,jint aForm,jint aToolkit,jint aIndex) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + return (jboolean)toolkit->Execute(&IsVisible,form,(TInt)aIndex); +} + +LOCAL_C void InsertItemL(MMIDForm* aForm,MMIDItem* aItem,TInt aIndex) +{ + aForm->InsertItemL(*aItem,aIndex); +} +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1insert +(JNIEnv*,jobject,jint aForm,jint aToolkit,jint aIndex,jint aItem) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + MMIDItem* item = MIDUnhandObject(aItem); + return toolkit->ExecuteTrap(&InsertItemL,form,item,(TInt)aIndex); +} + +LOCAL_C void SetItemL(MMIDForm* aForm,MMIDItem* aItem,TInt aIndex) +{ + aForm->SetItemL(*aItem,aIndex); +} +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1set +(JNIEnv*,jobject,jint aForm,jint aToolkit,jint aIndex,jint aItem) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + MMIDItem* item = MIDUnhandObject(aItem); + return toolkit->ExecuteTrap(&SetItemL,form,item,(TInt)aIndex); +} + +LOCAL_C void SetAllItemsL(MMIDForm* aForm,RArray* aItems) +{ + aForm->SetAllItemsL(*aItems); +} +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1setAll +(JNIEnv* aJni,jobject,jint aForm,jint aToolkit,jintArray aItems) +{ + jint* items = aJni->GetIntArrayElements(aItems,0); + TInt count = aJni->GetArrayLength(aItems); + RArray MIDItems(count); + TInt ret = KErrNone; + for (TInt i=0; i(items[i])); + aJni->ReleaseIntArrayElements(aItems,items,JNI_ABORT); + if (ret == KErrNone) + { + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + ret = toolkit->ExecuteTrap(&SetAllItemsL,form,&MIDItems); + } + MIDItems.Close(); + return ret; +} + +LOCAL_C void DeleteItemL(MMIDForm* aForm,TInt aIndex) +{ + aForm->DeleteItemL(aIndex); +} +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1delete +(JNIEnv*,jobject,jint aForm,jint aToolkit,jint aIndex) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + return toolkit->ExecuteTrap(&DeleteItemL,form,(TInt)aIndex); +} + +LOCAL_C void DeleteAllItemsL(MMIDForm* aForm) +{ + aForm->DeleteAllItemsL(); +} +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1deleteAll +(JNIEnv*,jobject,jint aForm,jint aToolkit) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + return toolkit->ExecuteTrap(&DeleteAllItemsL,form); +} + +LOCAL_C void NotifyStateChanged(MMIDEnv* aEnv,MMIDForm* aForm,TInt aIndex) +{ + aEnv->PostJavaEvent(*aForm,EDisplayable,aIndex); +} +JNIEXPORT void JNICALL Java_javax_microedition_lcdui_Form__1notifyStateChanged +(JNIEnv*,jobject,jint aForm,jint aToolkit,jint aIndex) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + toolkit->ExecuteV(&NotifyStateChanged,toolkit->Env(),form,(TInt)aIndex); +} + +LOCAL_C void SetCurrentItemL(MMIDForm* aForm,TInt aIndex) +{ + aForm->SetCurrentItemL(aIndex); +} +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1setCurrentItem +(JNIEnv*,jobject,jint aForm,jint aToolkit,jint aIndex) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + MMIDForm* form = MIDUnhandObject(aForm); + return toolkit->ExecuteTrap(&SetCurrentItemL,form,(TInt)aIndex); +} + +LOCAL_C void GetFormSize(MMIDForm* aForm, TSize* aSize) +{ + aSize->iWidth = aForm->Width(); + aSize->iHeight = aForm->Height(); +} + +JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Form__1getFormSize +(JNIEnv*,jobject,jint aForm,jint aToolkit) +{ + CMIDToolkit* toolkit = JavaUnhand(aToolkit); + if (!toolkit) + { + return KErrGeneral; + } + + MMIDForm* form = MIDUnhandObject(aForm); + TSize size; + toolkit->ExecuteV(&GetFormSize, form, &size); + return (size.iWidth << 16) | (size.iHeight & 0x0000ffff); +}