lfp_alert.c

来自「This is a resource based on j2me embedde」· C语言 代码 · 共 202 行

C
202
字号
/* *    * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. *//** * @file * Alert's cross platform functions and data structure. */#include <kni.h>#include <midpError.h>#include <midpMalloc.h>#include <lfpport_alert.h>#include <lfp_registry.h>#include "lfp_intern_registry.h"#include <midpUtilKni.h>#include <gxp_image.h>/** * KNI function to create native dialog for Alert. * CLASS: javax.microedition.lcdui.AlertLFImpl * PROTOTYPE: private native int createNativeResource0(String title, * 						       String tickerText, *						       int type) * RETURN: pointer to Alert's MidpDisplayable structure */KNIEXPORT KNI_RETURNTYPE_INTJava_javax_microedition_lcdui_AlertLFImpl_createNativeResource0() {    MidpDisplayable *alertPtr = NULL;    pcsl_string title = PCSL_STRING_NULL_INITIALIZER;    pcsl_string tickerText = PCSL_STRING_NULL_INITIALIZER;    MidpError err;    MidpComponentType type;    jboolean stringsObtained = 0;    /* Get parameters */    KNI_StartHandles(2);    KNI_DeclareHandle(titleJString);    KNI_DeclareHandle(tickerTextJString);    KNI_GetParameterAsObject(1, titleJString);    KNI_GetParameterAsObject(2, tickerTextJString);    type = KNI_GetParameterAsInt(3) + MIDP_NULL_ALERT_TYPE;    if(PCSL_STRING_OK == midp_jstring_to_pcsl_string(titleJString,&title)) {        if(PCSL_STRING_OK == midp_jstring_to_pcsl_string(tickerTextJString,&tickerText)) {            stringsObtained = 1;        }    }    KNI_EndHandles();    if (!stringsObtained) {	    err = KNI_ENOMEM;    } else {        /* Allocate MidpDisplayable structure */        alertPtr = MidpNewDisplayable(type);        if (alertPtr == NULL) {            err = KNI_ENOMEM;        } else {            /* Call platform dependent function to fill in             * MidpDisplayable structure */            err = lfpport_alert_create(alertPtr, &title, &tickerText, type);            /* Gauge pointer will be set later             * in setNativeContents0() function */        }    }    /*cleanup:*/    pcsl_string_free(&tickerText);    pcsl_string_free(&title);    if (err != KNI_OK) {	    MidpDeleteDisplayable(alertPtr); /* NULL is acceptable */	    KNI_ThrowNew(midpOutOfMemoryError, NULL);    }    KNI_ReturnInt(alertPtr);}/** * KNI function to show native dialog for Alert. * CLASS: javax.microedition.lcdui.AlertLFImpl * PROTOTYPE: private native void showNativeResource0(int nativeId) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_javax_microedition_lcdui_AlertLFImpl_showNativeResource0() {    MidpError err;    /* Get parameters */    MidpDisplayable *alertPtr = (MidpDisplayable *)KNI_GetParameterAsInt(1);    err = alertPtr->frame.show(&alertPtr->frame);    if (err == KNI_OK) {	/* Becomes the new screen that receives events */	MidpCurrentScreen = &alertPtr->frame;    } else {	KNI_ThrowNew(midpOutOfMemoryError, NULL);    }    KNI_ReturnVoid();}/** * KNI function to populate native Alert dialog with image, gauge and text. * CLASS: javax.microedition.lcdui.AlertLFImpl * PROTOTYPE: private native boolean setNativeContents0(int nativeId, *						       Image img, *						       int[] indicatorBounds, * 						       String text) * PARAM: indicatorBounds: a 4 integer array for indicator gauge *			   [0] : OUT x coordinate in alert dialog *			   [1] : OUT y coordinate in alert dialog *			   [2] : IN/OUT width of the gauge, in pixels *			   [3] : IN/OUT height of the gauge, in pixels * RETURN: true if content requires scrolling */KNIEXPORT KNI_RETURNTYPE_BOOLEANJava_javax_microedition_lcdui_AlertLFImpl_setNativeContents0() {    MidpDisplayable *alertPtr;    unsigned char* imgPtr;    jboolean isContentScroll;    int gaugeBounds[4];    int *bounds;    KNI_StartHandles(3);    KNI_DeclareHandle(gaugeBoundsJArray);    KNI_DeclareHandle(imageJObject);    /* Get parameters */    alertPtr = (MidpDisplayable *)KNI_GetParameterAsInt(1);    KNI_GetParameterAsObject(2, imageJObject);    KNI_GetParameterAsObject(3, gaugeBoundsJArray);    GET_PARAMETER_AS_PCSL_STRING(4, text) {        MidpError err;        if (KNI_IsNullHandle(gaugeBoundsJArray) == KNI_TRUE) {            bounds = NULL;        } else {            gaugeBounds[0] = KNI_GetIntArrayElement(gaugeBoundsJArray, 0);            gaugeBounds[1] = KNI_GetIntArrayElement(gaugeBoundsJArray, 1);            gaugeBounds[2] = KNI_GetIntArrayElement(gaugeBoundsJArray, 2);            gaugeBounds[3] = KNI_GetIntArrayElement(gaugeBoundsJArray, 3);            bounds = gaugeBounds;        }        if (KNI_IsNullHandle(imageJObject) == KNI_TRUE) {            imgPtr = NULL;        } else {            imgPtr = gxp_get_imagedata(imageJObject);        }        /* Call platform dependent setContent() function */        err = lfpport_alert_set_contents(alertPtr,                         imgPtr, bounds, &text);        if (err == KNI_OK) {            /* Update the gauge bounds array in Java */            if (KNI_IsNullHandle(gaugeBoundsJArray) == KNI_FALSE) {                KNI_SetIntArrayElement(gaugeBoundsJArray, 0, gaugeBounds[0]);                KNI_SetIntArrayElement(gaugeBoundsJArray, 1, gaugeBounds[1]);                KNI_SetIntArrayElement(gaugeBoundsJArray, 2, gaugeBounds[2]);                KNI_SetIntArrayElement(gaugeBoundsJArray, 3, gaugeBounds[3]);            }            /* query for scrolling */            err = lfpport_alert_need_scrolling(&isContentScroll,                               alertPtr);        }        if (err != KNI_OK) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);        }    } RELEASE_PCSL_STRING_PARAMETER    KNI_EndHandles();    KNI_ReturnBoolean(isContentScroll);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?