lfp_command.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 226 行
C
226 行
/* * * * 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 <lfp_registry.h>#include "lfp_intern_registry.h"#include <lfpport_command.h>#include <lfpport_alert.h>#include <lfpport_choicegroup.h>#include <midpMalloc.h>#include <midpEvents.h>#include <midpEventUtil.h>#include <midpError.h>/** * @file * Cross platform Abstract Commands related functions. *//** * The singleton abstract command manager resource. */static MidpFrame commandManager;/** * Free an abstract command list. * * @param commands pointer to the command list * @param length size of the list */static voidfreeCommandList(MidpCommand *commands, int length) { int i; if (commands != NULL) { /* Free all of the command strings */ for (i = 0; i < length; ++i) { pcsl_string_free(&commands[i].shortLabel_str); pcsl_string_free(&commands[i].longLabel_str); } midpFree(commands); }}/** * Called upon VM startup to allocate menu resource. */voidinitMenus() { cmdmanager_create(&commandManager);}/** * Called upon VM exit to release menu resource. */voidfinalizeMenus() { commandManager.hideAndDelete(&commandManager, KNI_TRUE);}/** * Re-populate contents of menu and soft buttons. * Upon return, the passed-in command list will be freed already. * * @param commands abstract command list that has been sorted by priority * @param length size of the list */static voidMidpCommandSetAll(MidpCommand *commands, int length) { if (MidpCurrentScreen != NULL && MidpCurrentScreen->component.type >= MIDP_NULL_ALERT_TYPE && MidpCurrentScreen->component.type <= MIDP_CONFIRMATION_ALERT_TYPE) { /* Delegate to alert to handle */ lfpport_alert_set_commands(MidpCurrentScreen, commands, length); } else { /* Delegate to ported command manager */ cmdmanager_set_commands(&commandManager, commands, length); } freeCommandList(commands, length);}/** * Set the current set of active Abstract Commands. * <p> * Java declaration: * <pre> * updateCommands([Ljavax/microedition/lcdui/Command;I * [Ljavax/microedition/lcdui/Command;I)V * </pre> * Java parameters: * <pre> * itemCommands The list of Item Commands that * should be active * numItemCommands The number of commands in the list * of Item Commands * commands The list of Commands that should be active * numCommands The number of commands in the list of * Commands * returns: void * </pre> */KNIEXPORT KNI_RETURNTYPE_VOIDJava_javax_microedition_lcdui_NativeMenu_updateCommands() { int numItemCmds = KNI_GetParameterAsInt(2); int numCmds = KNI_GetParameterAsInt(4); KNI_StartHandles(2); KNI_DeclareHandle(itemCmds); KNI_DeclareHandle(cmds); KNI_GetParameterAsObject(1, itemCmds); KNI_GetParameterAsObject(3, cmds); if (numItemCmds == 0 && numCmds == 0) { MidpCommandSetAll(NULL, 0); } else { MidpCommand *menuList = MidpCommandSortAll(itemCmds, numItemCmds, cmds, numCmds); if (menuList != NULL ) { MidpCommandSetAll(menuList, numItemCmds + numCmds); } else { MidpCommandSetAll(NULL, 0); KNI_ThrowNew(midpOutOfMemoryError, NULL); } } KNI_EndHandles(); KNI_ReturnVoid();}/** * Calls to platform specific function to draw the command menu on the screen. * <p> * Java declaration: * <pre> * showMenu()V * </pre> * Java parameters: * <pre> * parameters: none * returns: void * </pre> */KNIEXPORT KNI_RETURNTYPE_VOIDJava_javax_microedition_lcdui_NativeMenu_showMenu() { commandManager.show(&commandManager); KNI_ReturnVoid();}/** * Call to platform specific function to dismiss the current menu or * popup in the case of setCurrent() being called while the Display * is suspended by a system screen. * <p> * Java declaration: * <pre> * dismissMenuAndPopup()V * </pre> * Java parameters: * <pre> * parameters: none * returns: void * </pre> */KNIEXPORT KNI_RETURNTYPE_VOIDJava_javax_microedition_lcdui_NativeMenu_dismissMenuAndPopup() { // Static commandManager is shared across Displays, // following call should only dismiss but not delete // the platform widget. It should only be deleted in // finalizeMenus() function commandManager.hideAndDelete(&commandManager, KNI_FALSE); lfpport_choicegroup_dismiss_popup(); KNI_ReturnVoid();}/** * Java notification function for command activated either through menu or * soft button. * * This is NOT a platform dependent function and does NOT need to be ported. * * @param cmdId identifier of the selected command * * @return an indication of success or the reason for failure */MidpErrorMidpCommandSelected(int cmdId) { MidpEvent event; MIDP_EVENT_INITIALIZE(event); event.type = MIDP_COMMAND_EVENT; event.COMMAND = cmdId; midpStoreEventAndSignalForeground(event); return ALL_OK; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?