lfp_textfield.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 269 行
C
269 行
/* * * * 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 * * Cross platform functions for TextField. */#include <kni.h>#include <ROMStructs.h>#include <commonKNIMacros.h>#include <midpError.h>#include <midpMalloc.h>#include <lfpport_textfield.h>#include "lfp_intern_registry.h"#include <midpUtilKni.h>/** Get a DynamicCharacterArray structure from the given <tt>jobject</tt> */#define getMidpDynamicCharacterArrayPtr(__handle) \(unhand(struct Java_com_sun_midp_lcdui_DynamicCharacterArray, __handle))#define BUFFER_JARRAY_HANDLE(__handle) \ hand(getMidpDynamicCharacterArrayPtr((__handle))->buffer)/** * KNI function that create native resource for current TextField. * Class: javax.microedition.lcdui.TextFieldLFImpl * Java prototype: * private native int createNativeResource0(int ownerId, * String label, int layout, * DynamicCharacterArray buffer, * int constraints, String initialInputMode) */KNIEXPORT KNI_RETURNTYPE_INTJava_javax_microedition_lcdui_TextFieldLFImpl_createNativeResource0() { MidpError err = KNI_OK; MidpItem *tfPtr = NULL; MidpDisplayable *ownerPtr; pcsl_string label = PCSL_STRING_NULL_INITIALIZER; pcsl_string text = PCSL_STRING_NULL_INITIALIZER; pcsl_string inputMode = PCSL_STRING_NULL_INITIALIZER; int maxSize, constraints, layout, textLength; KNI_StartHandles(4); KNI_DeclareHandle(labelJString); KNI_DeclareHandle(bufferJDCArray); KNI_DeclareHandle(bufferJCharArray); KNI_DeclareHandle(inputModeJString); ownerPtr = (MidpDisplayable *)KNI_GetParameterAsInt(1); KNI_GetParameterAsObject(2, labelJString); layout = KNI_GetParameterAsInt(3); KNI_GetParameterAsObject(4, bufferJDCArray); constraints = KNI_GetParameterAsInt(5); KNI_GetParameterAsObject(6, inputModeJString); /* take the buffer field out of the object */ bufferJCharArray = BUFFER_JARRAY_HANDLE(bufferJDCArray); maxSize = KNI_GetArrayLength(bufferJCharArray); textLength = getMidpDynamicCharacterArrayPtr(bufferJDCArray)->length; err = KNI_ENOMEM; if (PCSL_STRING_OK == midp_jchar_array_to_pcsl_string(bufferJCharArray, textLength, &text)) { if (PCSL_STRING_OK == midp_jstring_to_pcsl_string(labelJString, &label)) { if (PCSL_STRING_OK == midp_jstring_to_pcsl_string(inputModeJString, &inputMode)) { err = KNI_OK; } } } KNI_EndHandles(); if (KNI_OK == err) { tfPtr = MidpNewItem(ownerPtr, MIDP_TEXT_FIELD_TYPE); if (tfPtr == NULL) { err = KNI_ENOMEM; } else { err = lfpport_textfield_create(tfPtr, ownerPtr, &label, layout, &text, maxSize, constraints, &inputMode); } } /*cleanup:*/ pcsl_string_free(&inputMode); pcsl_string_free(&text); pcsl_string_free(&label); if (err != KNI_OK) { MidpDeleteItem(tfPtr); KNI_ThrowNew(midpOutOfMemoryError, NULL); } KNI_ReturnInt(tfPtr);}/** * KNI function that get updates of contents from native widget. * Class: javax.microedition.lcdui.TextFieldLFImpl * Java prototype: * private native boolean getString0(int nativeId, DynamicCharacterArray buffer) */KNIEXPORT KNI_RETURNTYPE_BOOLEANJava_javax_microedition_lcdui_TextFieldLFImpl_getString0() { pcsl_string v_text; pcsl_string *const text=&v_text; jboolean newChange; MidpItem *tfPtr = (MidpItem *)KNI_GetParameterAsInt(1); MidpError err = lfpport_textfield_get_string(text, &newChange, tfPtr); if (KNI_OK != err) { KNI_ThrowNew(midpOutOfMemoryError, NULL); } else { GET_PCSL_STRING_DATA_AND_LENGTH(text) KNI_StartHandles(2); KNI_DeclareHandle(bufferJDCArray); KNI_DeclareHandle(bufferJCharArray); KNI_GetParameterAsObject(2, bufferJDCArray); bufferJCharArray = BUFFER_JARRAY_HANDLE(bufferJDCArray); KNI_SetRawArrayRegion(bufferJCharArray, 0, text_len * sizeof(jchar), (jbyte *)text_data); getMidpDynamicCharacterArrayPtr(bufferJDCArray)->length = text_len; KNI_EndHandles(); RELEASE_PCSL_STRING_DATA_AND_LENGTH pcsl_string_free(text); } KNI_ReturnBoolean(newChange);}/** * KNI function that updates the content and caret position of the TextField's * native widget. * Class: javax.microedition.lcdui.TextFieldLFImpl * Java prototype: * private native void setString0(int nativeId, DynamicCharacterArray buffer) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_javax_microedition_lcdui_TextFieldLFImpl_setString0() { pcsl_string v_text; pcsl_string *const text=&v_text; MidpError err; pcsl_string_status perr; MidpItem *tfPtr = (MidpItem *)KNI_GetParameterAsInt(1); KNI_StartHandles(2); KNI_DeclareHandle(bufferJDCArray); KNI_DeclareHandle(bufferJCharArray); KNI_GetParameterAsObject(2, bufferJDCArray); bufferJCharArray = BUFFER_JARRAY_HANDLE(bufferJDCArray); perr = midp_jchar_array_to_pcsl_string(bufferJCharArray, getMidpDynamicCharacterArrayPtr(bufferJDCArray)->length, text); KNI_EndHandles(); if (PCSL_STRING_OK != perr) { err = KNI_ENOMEM; } else { err = lfpport_textfield_set_string(tfPtr, text); pcsl_string_free(text); } if (err != KNI_OK) { KNI_ThrowNew(midpOutOfMemoryError, NULL); } KNI_ReturnVoid();}/** * KNI function that updates the maximum size of the TextField's native widget. * Class: javax.microedition.lcdui.TextFieldLFImpl * Java prototype: * private native void setMaxSize0(int nativeId, int maxSize) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_javax_microedition_lcdui_TextFieldLFImpl_setMaxSize0() { MidpItem *tfPtr = (MidpItem *)KNI_GetParameterAsInt(1); int maxSize = KNI_GetParameterAsInt(2); MidpError err = lfpport_textfield_set_max_size(tfPtr, maxSize); if (err != KNI_OK) { KNI_ThrowNew(midpOutOfMemoryError, NULL); } KNI_ReturnVoid();}/** * KNI function that queries current insert cursor position. * Class: javax.microedition.lcdui.TextFieldLFImpl * Java prototype: * private native int getCaretPosition0(int nativeId) */KNIEXPORT KNI_RETURNTYPE_INTJava_javax_microedition_lcdui_TextFieldLFImpl_getCaretPosition0() { MidpItem *tfPtr = (MidpItem *)KNI_GetParameterAsInt(1); int caretPosition; MidpError err = lfpport_textfield_get_caret_position(&caretPosition, tfPtr); if (err != KNI_OK) { KNI_ThrowNew(midpOutOfMemoryError, NULL); } KNI_ReturnInt(caretPosition);}/** * KNI function that updates input constraints of the TextField's native widget. * Class: javax.microedition.lcdui.TextFieldLFImpl * Java prototype: * private native void setConstraints0(int nativeId, int constraints) */KNIEXPORT KNI_RETURNTYPE_VOIDJava_javax_microedition_lcdui_TextFieldLFImpl_setConstraints0() { MidpItem *tfPtr = (MidpItem *)KNI_GetParameterAsInt(1); int constraints = KNI_GetParameterAsInt(2); MidpError err = lfpport_textfield_set_constraints(tfPtr, constraints); if (err != KNI_OK) { KNI_ThrowNew(midpOutOfMemoryError, NULL); } KNI_ReturnVoid();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?