javauis/lcdui_akn/javalcdui/src/Alert.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:23:59 +0300
branchRCL_3
changeset 83 26b2b12093af
parent 19 04becd199f91
permissions -rw-r--r--
Revision: v2.2.17 Kit: 201041

/*
* Copyright (c) 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_Alert.h"

struct TAlertCreate
{
    jweak iRef;
    jint  iDisplayable;
    jint  iType;
    TPtrC iText;
    jint  iImage;
};

struct TAlertAttribs
{
    jint    iHandle;
    TSize   iSize;
};

LOCAL_C void CreateAlertL(CMIDToolkit* aToolkit, TAlertCreate* aCreate, TAlertAttribs* aAttribs)
{
    MMIDComponentFactory& factory = *aToolkit->ComponentFactory();
    MMIDDisplayable* displayable = MIDUnhand<MMIDDisplayable>(aCreate->iDisplayable);
    MMIDImage* image = MIDUnhand<MMIDImage>(aCreate->iImage);
    MMIDAlert* alert = factory.CreateAlertL(*displayable, (MMIDAlert::TAlertType)aCreate->iType, aCreate->iText, image);
    CleanupDisposePushL(alert);
    aAttribs->iHandle = aToolkit->RegisterComponentL(alert, aCreate->iRef);
    CleanupPopComponent(alert);
    aCreate->iRef = 0;      // register takes ownership
    aAttribs->iSize = displayable->ContentSize();
}

JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1create
(
    JNIEnv* aJni,
    jobject aAlert,
    jint    aToolkit,
    jint    aDisplayable,
    jstring aString,
    jint    aImage,
    jint    aType,
    jintArray aCreateAlertReturn
)
{
    RJString string(*aJni,aString);

    TAlertCreate create;
    create.iDisplayable=aDisplayable;
    create.iType=aType;
    create.iText.Set(string);
    create.iImage=aImage;
    create.iRef=aJni->NewWeakGlobalRef(aAlert);

    TAlertAttribs attribs;
    attribs.iHandle=0;

    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    jint error;

    if (create.iRef)
    {
        error = toolkit->ExecuteTrap(CreateAlertL, toolkit, &create, &attribs);
    }
    else
    {
        error = KErrNoMemory;
    }

    if (create.iRef)   // should be cleared by CreateAlertL if successful
    {
        aJni->DeleteWeakGlobalRef(create.iRef);
    }

    jint arrayReturn[3];
    arrayReturn[0] = attribs.iHandle;
    arrayReturn[1] = attribs.iSize.iWidth;
    arrayReturn[2] = attribs.iSize.iHeight;
    aJni->SetIntArrayRegion(aCreateAlertReturn, 0, 3, arrayReturn);

    return error;
}

LOCAL_C void SetStringL(MMIDAlert* aAlert,const TDesC* aString)
{
    aAlert->SetStringL(*aString);
}

JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1setString
(JNIEnv* aJni,jobject,jint aAlert,jint aToolkit,jstring aString)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    RJString string(*aJni,aString);
    return toolkit->ExecuteTrap(&SetStringL,alert,(const TDesC*)&string);
}

LOCAL_C void SetImageL(MMIDAlert* aAlert,MMIDImage* aImage)
{
    aAlert->SetImageL(aImage);
}
JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1setImage
(JNIEnv*,jobject,jint aAlert,jint aToolkit,jint aImage)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    MMIDImage* image = MIDUnhandObject<MMIDImage>(aImage);
    return toolkit->ExecuteTrap(&SetImageL,alert,image);
}

LOCAL_C void SetIndicatorL(MMIDAlert* aAlert,MMIDGauge* aGauge)
{
    aAlert->SetIndicatorL(aGauge);
}
JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1setIndicator
(JNIEnv*,jobject,jint aAlert,jint aToolkit,jint aGauge)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    MMIDGauge* gauge = MIDUnhandObject<MMIDGauge>(aGauge);
    return toolkit->ExecuteTrap(&SetIndicatorL,alert,gauge);
}

LOCAL_C void SetTypeL(MMIDAlert* aAlert,TInt aType)
{
    aAlert->SetTypeL((MMIDAlert::TAlertType)aType);
}
JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1setType
(JNIEnv*,jobject,jint aAlert,jint aToolkit,jint aType)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    return toolkit->ExecuteTrap(&SetTypeL,alert,(TInt)aType);
}

LOCAL_C jint DefaultTimeout(MMIDAlert* aAlert)
{
    return aAlert->DefaultTimeout();
}
JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1getDefaultTimeout
(JNIEnv*,jobject,jint aAlert,jint aToolkit)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    return toolkit->Execute(&DefaultTimeout,alert);
}

LOCAL_C void SetTimeoutL(MMIDAlert* aAlert,TInt aTimeout)
{
    aAlert->SetTimeoutL(aTimeout);
}
JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1setTimeout
(JNIEnv*,jobject,jint aAlert,jint aToolkit,jint aTimeout)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    return toolkit->ExecuteTrap(&SetTimeoutL,alert,(TInt)aTimeout);
}

LOCAL_C void SetModalL(MMIDAlert* aAlert)
{
    aAlert->SetModalL();
}
JNIEXPORT jint JNICALL Java_javax_microedition_lcdui_Alert__1setModal
(JNIEnv*,jobject,jint aAlert,jint aToolkit)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    return toolkit->ExecuteTrap(&SetModalL,alert);
}

LOCAL_C jboolean IsModal(MMIDAlert* aAlert)
{
    return (jboolean)aAlert->IsModal();
}
JNIEXPORT jboolean JNICALL Java_javax_microedition_lcdui_Alert__1isModal(JNIEnv*, jobject,jint aAlert,jint aToolkit)
{
    CMIDToolkit* toolkit = JavaUnhand<CMIDToolkit>(aToolkit);
    MMIDAlert* alert = MIDUnhandObject<MMIDAlert>(aAlert);
    return toolkit->Execute(&IsModal,alert);
}