欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

lfj_native_input_mode.c

This is a resource based on j2me embedded,if you dont understand,you can connection with me .
C
字号:
/* * * * 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. */#include <kni.h>#include <midpUtilKni.h>#include <sni.h>#include <string.h>#include <midpError.h>#include <pcsl_string.h>#include <commonKNIMacros.h>#include <nim.h>#ifdef WINCE#include <sipapi.h>#endif#define numElems(x) sizeof(x)/sizeof(x[0])#ifdef __cplusplusextern "C" {#endif#ifdef WINCEextern jboolean bVirtualModeEnabled;extern int midpPaintAllowed;#endif/* Macro to retrieve C structure representation of an Object */typedef struct Java_com_sun_midp_chameleon_input_NativeInputMode _NativeInputMode;#define getNativeInputModePtr(handle) (unhand(_NativeInputMode,(handle)))/* the pair of values that identifies a NativeInputMethod instance */#define NIM_IDENTITY(thisObject)  getNativeInputModePtr(thisObject)->id, &getNativeInputModePtr(thisObject)->instanceDataKNIEXPORT KNI_RETURNTYPE_INTKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_initialize) {    int rc = 0;    jint id = KNI_GetParameterAsInt(1);    KNI_StartHandles(3);    KNI_DeclareHandle(thisObject);    KNI_DeclareHandle(flags2D);    KNI_DeclareHandle(flags1D);    KNI_GetThisPointer(thisObject);    getNativeInputModePtr(thisObject)->id = id;    if(0 != (rc = nim_initialize(NIM_IDENTITY(thisObject) ))) {        KNI_ReturnInt(rc);    } else {        constraint_map* flags = nim_get_constraint_map(NIM_IDENTITY(thisObject));        int j,i;        /* store the array object address into the handle */        *((jobject_array**)flags2D) =(jobject_array*) 	  (getNativeInputModePtr(thisObject)->isMap);        for(j=0; j<NIM_CONSTRAINT_MAP_NROWS; j++) {            KNI_GetObjectArrayElement(flags2D,j,flags1D);            for (i = 0; i < NIM_CONSTRAINT_MAP_NCOLS; i++) {                KNI_SetBooleanArrayElement(flags1D, (jint)i, (*flags)[j][i]);            }        }    }    KNI_EndHandles();    KNI_ReturnInt(0); /* return zero for ok, non-zero if bad id */}KNIEXPORT KNI_RETURNTYPE_VOIDKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_finalize) {    KNI_StartHandles(1);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    nim_finalize(NIM_IDENTITY(thisObject));    KNI_EndHandles();    KNI_ReturnVoid();}KNIEXPORT KNI_RETURNTYPE_BOOLEANKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_supportsConstraints) {    jboolean res = KNI_FALSE;    jint constraints = KNI_GetParameterAsInt(1);    KNI_StartHandles(1);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    res = nim_supports_constraints(NIM_IDENTITY(thisObject), constraints);    KNI_EndHandles();    KNI_ReturnBoolean(res);}KNIEXPORT KNI_RETURNTYPE_OBJECTKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_getName) {    pcsl_string xname = PCSL_STRING_NULL_INITIALIZER;    pcsl_string* name = &xname;    pcsl_string_status errc;    KNI_StartHandles(2);    KNI_DeclareHandle(tempHandle);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    errc = nim_get_name(NIM_IDENTITY(thisObject), name);    if (PCSL_STRING_OK != errc) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);    } else {        GET_PCSL_STRING_DATA_AND_LENGTH(name)        if (PCSL_STRING_PARAMETER_ERROR(name)) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);        } else {            KNI_NewString(name_data, name_len, tempHandle);        }        RELEASE_PCSL_STRING_DATA_AND_LENGTH        pcsl_string_free(name);    }    KNI_EndHandlesAndReturnObject(tempHandle);}KNIEXPORT KNI_RETURNTYPE_OBJECTKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_getCommandName) {    pcsl_string xname = PCSL_STRING_NULL_INITIALIZER;    pcsl_string* name = &xname;    pcsl_string_status errc;    KNI_StartHandles(2);    KNI_DeclareHandle(tempHandle);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    errc = nim_get_command_name(NIM_IDENTITY(thisObject), name);    if (PCSL_STRING_OK != errc) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);    } else {        GET_PCSL_STRING_DATA_AND_LENGTH(name)        if (PCSL_STRING_PARAMETER_ERROR(name)) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);        } else {            KNI_NewString(name_data, name_len, tempHandle);        }        RELEASE_PCSL_STRING_DATA_AND_LENGTH    }    KNI_EndHandlesAndReturnObject(tempHandle);}KNIEXPORT KNI_RETURNTYPE_VOID KNIDECL(com_sun_midp_chameleon_input_NativeInputMode_beginInput0) {    KNI_StartHandles(2);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    GET_PARAMETER_AS_PCSL_STRING(2, inputSubset)    {        jint constraints = KNI_GetParameterAsInt(3);        nim_begin_input(NIM_IDENTITY(thisObject),&inputSubset,constraints);    }    RELEASE_PCSL_STRING_PARAMETER    KNI_EndHandles();    KNI_ReturnVoid();}KNIEXPORT KNI_RETURNTYPE_OBJECTKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_processKey0) {    jint key = KNI_GetParameterAsInt(1);    jboolean longPress = KNI_GetParameterAsBoolean(2);    jint isClearKey = KNI_GetParameterAsInt(3);    jint res = 0;    state_data stateData;    pcsl_string xstringParam = PCSL_STRING_NULL_INITIALIZER;    pcsl_string * stringParam = &xstringParam;    KNI_StartHandles(3);    KNI_DeclareHandle(stringRes);    KNI_DeclareHandle(stateArr);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    KNI_GetParameterAsObject(4, stateArr);    KNI_GetRawArrayRegion(stateArr,0,STATE_DATA_ARRAY_SIZE*sizeof(jint),(jbyte*)stateData);    res = nim_process_key(NIM_IDENTITY(thisObject), key, longPress, isClearKey, &stateData, stringParam);    KNI_SetRawArrayRegion(stateArr,0,STATE_DATA_ARRAY_SIZE*sizeof(jint),(jbyte*)stateData);    if (-1 == res) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);    } else if (1 == res){        GET_PCSL_STRING_DATA_AND_LENGTH(stringParam)        if (PCSL_STRING_PARAMETER_ERROR(stringParam)) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);        } else {            KNI_NewString(stringParam_data, stringParam_len, stringRes);        }        RELEASE_PCSL_STRING_DATA_AND_LENGTH    } /* else no string, do nothing */    KNI_EndHandlesAndReturnObject(stringRes);}KNIEXPORT KNI_RETURNTYPE_CHARKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_getPendingChar) {    jint res = 0;    KNI_StartHandles(1);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    res = nim_get_pending_char(NIM_IDENTITY(thisObject));    KNI_EndHandles();    KNI_ReturnChar(res);}KNIEXPORT KNI_RETURNTYPE_OBJECTKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_getNextMatch) {    pcsl_string xname = PCSL_STRING_NULL_INITIALIZER;    pcsl_string* name = &xname;    pcsl_string_status errc;    KNI_StartHandles(2);    KNI_DeclareHandle(tempHandle);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    errc = nim_get_next_match(NIM_IDENTITY(thisObject), name);    if (PCSL_STRING_OK != errc) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);    } else {        GET_PCSL_STRING_DATA_AND_LENGTH(name)        if (PCSL_STRING_PARAMETER_ERROR(name)) {            KNI_ThrowNew(midpOutOfMemoryError, NULL);        } else {            KNI_NewString(name_data, name_len, tempHandle);        }        RELEASE_PCSL_STRING_DATA_AND_LENGTH    }    KNI_EndHandlesAndReturnObject(tempHandle);}KNIEXPORT KNI_RETURNTYPE_BOOLEANKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_hasMoreMatches) {    jboolean res;    KNI_StartHandles(1);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    res = nim_has_more_matches(NIM_IDENTITY(thisObject));    KNI_EndHandles();    KNI_ReturnBoolean(res);}KNIEXPORT KNI_RETURNTYPE_OBJECTKNIDECL(com_sun_midp_chameleon_input_NativeInputMode_getMatchList) {    int n;    int error=0;    pcsl_string *matches;    KNI_StartHandles(3);    KNI_DeclareHandle(matchListObj);    KNI_DeclareHandle(stringObj);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    error = PCSL_STRING_OK != nim_get_match_list(NIM_IDENTITY(thisObject), &matches,&n);    do {        int i;        if (error) {            break;        }        SNI_NewArray(SNI_STRING_ARRAY, n, matchListObj);        if (KNI_IsNullHandle(matchListObj)) {            break;        }        for (i = 0; i < n; i++) {            const pcsl_string* const apath = &matches[i];            GET_PCSL_STRING_DATA_AND_LENGTH(apath)            if (PCSL_STRING_PARAMETER_ERROR(apath)) {                error = 1;            } else {                KNI_NewString(apath_data, (jsize)apath_len, stringObj);            }            RELEASE_PCSL_STRING_DATA_AND_LENGTH            if (error) {                break;            }            KNI_SetObjectArrayElement(matchListObj, (jint)i, stringObj);        }    } while(0);    if (error) {        KNI_ThrowNew(midpOutOfMemoryError, NULL);    }    KNI_EndHandlesAndReturnObject(matchListObj);}KNIEXPORT KNI_RETURNTYPE_VOID KNIDECL(com_sun_midp_chameleon_input_NativeInputMode_endInput0) {    KNI_StartHandles(1);    KNI_DeclareHandle(thisObject);    KNI_GetThisPointer(thisObject);    nim_end_input(NIM_IDENTITY(thisObject));    KNI_EndHandles();    KNI_ReturnVoid();}/* an example how to return an array of stringsstatic char* java_input_mode_names[] ={        "KeyboardInputMode",        "NumericInputMode",        "AlphaNumericInputMode",        "PredictiveTextInputMode",        "SymbolInputMode",};KNIEXPORT KNI_RETURNTYPE_OBJECTKNIDECL(com_sun_midp_chameleon_input_InputModeFactory_getJavaInputModeClassNames) {    int error=0;    KNI_StartHandles(2);    KNI_DeclareHandle(nameListObj);    KNI_DeclareHandle(stringObj);    do {        unsigned int i;        SNI_NewArray(SNI_STRING_ARRAY, numElems(java_input_mode_names), nameListObj);        if (KNI_IsNullHandle(nameListObj)) {            break;        }        for (i = 0; i < numElems(java_input_mode_names); i++) {            pcsl_string xname = PCSL_STRING_NULL_INITIALIZER;            pcsl_string * name = &xname;            pcsl_string_from_chars(java_input_mode_names[i],name);            GET_PCSL_STRING_DATA_AND_LENGTH(name)            if (PCSL_STRING_PARAMETER_ERROR(name)) {                error = 1;            } else {                KNI_NewString(name_data, (jsize)name_len, stringObj);            }            RELEASE_PCSL_STRING_DATA_AND_LENGTH            if (error) {                break;            }            KNI_SetObjectArrayElement(nameListObj, (jint)i, stringObj);        }    } while(0);    if (error) {        KNI_ThrowNew(midpOutOfMemoryError, NULL);    }    KNI_EndHandlesAndReturnObject(nameListObj);}*/KNIEXPORT KNI_RETURNTYPE_OBJECTKNIDECL(com_sun_midp_chameleon_input_InputModeFactory_getInputModeIds) {    int error=0;    KNI_StartHandles(2);    KNI_DeclareHandle(idListObj);    jint n;    jint* input_mode_ids = nim_get_input_mode_ids(&n);    do {        int i;        SNI_NewArray(SNI_INT_ARRAY, n, idListObj);        if (KNI_IsNullHandle(idListObj)) {            break;        }        for (i = 0; i < n; i++) {            KNI_SetIntArrayElement(idListObj, (jint)i, input_mode_ids[i]);        }    } while(0);    if (error) {        KNI_ThrowNew(midpOutOfMemoryError, NULL);    }    KNI_EndHandlesAndReturnObject(idListObj);}#ifdef WINCEKNIEXPORT KNI_RETURNTYPE_VOIDKNIDECL(com_sun_midp_chameleon_input_VirtualKeyboardInputMode_showNativeKeyboard) {    bVirtualModeEnabled = KNI_TRUE;    midpPaintAllowed = 0;    SipShowIM(SIPF_ON);    KNI_ReturnVoid();}KNIEXPORT KNI_RETURNTYPE_VOIDKNIDECL(com_sun_midp_chameleon_input_VirtualKeyboardInputMode_hideNativeKeyboard) {    bVirtualModeEnabled = KNI_FALSE;    midpPaintAllowed = 0;    SipShowIM(SIPF_OFF);    KNI_ReturnVoid();}#endif#ifdef __cplusplus}#endif

⌨️ 快捷键说明

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