lfpport_qte_command.cpp

来自「This is a resource based on j2me embedde」· C++ 代码 · 共 245 行

CPP
245
字号
/* *   * * 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. *  * This source file is specific for Qt-based configurations. *//** * @file * Command manager for Qt. */#include "lfpport_qte_command.h"#include <moc_lfpport_qte_command.cpp>#include "lfpport_qte_util.h"#include "lfpport_qte_mscreen.h"#include "lfpport_qte_mainwindow.h"#include <qmessagebox.h>#include <qlayout.h>#include <midpUtilKni.h>int QPopupMenuExt::insertItemTrunc( const QString & text0, int id) {    QString text(text0);    truncateQString(text,       font(),       qteapp_get_application()->mainWidget()->width()-16);/*magic number*/    return insertItem(text,id);}/** * Constructor of CommandManager. * * @param parent parent widget */CommandManager::CommandManager(QWidget *parent)    : QMenuBar(parent){    actionMenu = new QPopupMenuExt(parent);    goMenu = new QPopupMenuExt(parent);    helpMenu = new QPopupMenuExt(parent);    // Listen on menu item selection    connect(actionMenu, SIGNAL(activated(int)), SLOT(commandActivated(int)));    connect(goMenu, SIGNAL(activated(int)), SLOT(commandActivated(int)));    connect(helpMenu, SIGNAL(activated(int)), SLOT(commandActivated(int)));    #ifndef QT_NO_ACCEL    QAccel* focusAccel = new QAccel(this, "focus-change accelerator");    focusAccel->connectItem(focusAccel->insertItem(MOVE_FOCUS, 0),         this, SLOT(moveFocus()));#endif}/** * Notify Java peer that a Menu item is selected. * * @param commandId Id of the selected abstract command */void CommandManager::commandActivated(int commandId) {    // Fire a Java abstract command event    MidpCommandSelected(commandId);}/** * Move focus for menu label. Set focus to the first item in menu bar * if menu is still not in focus otherwise move focus out   */void CommandManager::moveFocus() {    activateItemAt(hasFocus() ? -1 : 0);}/** * Add an item to the menu. It will be inserted into the  * proper popup menu basing on its type. * * @param cmds new abstract commands * @param numOfCmds number of new abstract commands * @return status of this call */MidpError CommandManager::setCommands(MidpCommand* cmds, int numOfCmds) {    MidpError err = KNI_OK;    int i = count()-1;    // Remove any popup menu    for (; i >= 0; i--) {	    removeItemAt(0);    }    // Clear existing popup menu content    actionMenu->clear();    goMenu->clear();    helpMenu->clear();    // reset state of menu bar when item is active    actItem = -1;    // Insert each command to each popup menu basing on its type    for (i = 0; i < numOfCmds; i++) {        QString text;        pcsl_string* short_label = &cmds[i].shortLabel_str;        GET_PCSL_STRING_DATA_AND_LENGTH(short_label) {            if(PCSL_STRING_PARAMETER_ERROR(short_label)) {                REPORT_ERROR(LC_HIGHUI, "out-of-memory error"                             " in CommandManager::setCommands");            } else {                text.setUnicodeCodes(short_label_data,                                     short_label_len);            }        } RELEASE_PCSL_STRING_DATA_AND_LENGTH        if (cmds[i].type == COMMAND_TYPE_HELP) {            helpMenu->insertItemTrunc(text, cmds[i].id);        } else if (cmds[i].type == COMMAND_TYPE_BACK            || cmds[i].type == COMMAND_TYPE_OK            || cmds[i].type == COMMAND_TYPE_CANCEL            || cmds[i].type == COMMAND_TYPE_STOP) {            goMenu->insertItemTrunc(text, cmds[i].id);        } else {            actionMenu->insertItemTrunc(text, cmds[i].id);        }    }    // Only add non-empty popup menus    if (goMenu->count() > 0) {	    insertItem(GO_MENUITEM_TEXT, goMenu, -1, 0);    }    if (actionMenu->count() > 0) {	    insertItem(ACTION_MENUITEM_TEXT, actionMenu, -1, 0);    }    if (helpMenu->count() > 0) {        insertItem(HELP_MENUITEM_TEXT, helpMenu, -1, 0);    }    return err;}/** * Dismiss any popup menu that is opening. */void CommandManager::dismissMenu() {    // Hide any popup menu    actionMenu->hide();    goMenu->hide();    helpMenu->hide();}/** * Show the menu upon Java's request. * Not supported in Qt port since user triggers menu popup through Qt. * Do nothing here. * * @param cmPtr pointer to menu native peer * @return status of this call */extern "C" MidpErrorcmdmanager_show(MidpFrame *cmPtr) {    /* Suppress unused-parameter warning */    (void)cmPtr;    return KNI_OK;}/** * Hide and delete resource function pointer. * This function should notify its Items to hide as well. * * @param cmPtr pointer to menu native peer * @param onExit  true if this is called during VM exit. * 		  All native resource must be deleted in this case. * @return status of this call */extern "C" MidpErrorcmdmanager_hide_and_delete(MidpFrame* cmPtr, jboolean onExit) {    CommandManager *cmdMgr = (CommandManager *)cmPtr->widgetPtr;    if (onExit) {	// Delete Command Manager and its children popup menus	delete cmdMgr;    } else {	// Hide any popup menu	cmdMgr->dismissMenu();    }    return KNI_OK;}/** * Create the menubar. * @param cmPtr pointer to pre-allocated MidpFrame structure whose fields *		should be set properly upon return. * @return status of this call */extern "C"MidpError cmdmanager_create(MidpFrame* cmPtr){    cmPtr->widgetPtr 		=       PlatformMIDPMainWindow::getMainWindow()->getMenu();    cmPtr->show 		= cmdmanager_show;    cmPtr->hideAndDelete	= cmdmanager_hide_and_delete;    cmPtr->handleEvent		= NULL; // Qt uses SIGNAL/SLOT instead    if (cmPtr->widgetPtr == NULL) {	return KNI_ENOMEM;    } else {	return KNI_OK;    }}/** * Update content of the menu. * * @param cmPtr pointer to menu native peer * @param cmds array of commands the menu should contain * @param numCmds size of the array * @return status of this call */MidpError cmdmanager_set_commands(MidpFrame* cmPtr,				  MidpCommand* cmds, int numCmds){    return ((CommandManager *)cmPtr->widgetPtr)->setCommands(cmds, numCmds);}

⌨️ 快捷键说明

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