⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmieditor.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    default:
        return MFW_EVENT_PASSED;
    }
    return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:     editor_kbd_cb

 $Description:  Editor keyboard event handler

 $Returns:    None.

 $Arguments:  None.

*******************************************************************************/
static int editor_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
{
    T_MFW_HND       win        = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data   = ((T_MFW_HDR *)win)->data;
    T_EDITOR_INFO *  data       = (T_EDITOR_INFO *)win_data->user;
    //T_CHINESE_DATA  chinese_data;       /* 2003/12/04 sunsj */

    T_MFW_HND       parent_win = data->parent;  //zgz add,2002.9.3
    USHORT          Identifier = data->editor_data.Identifier;   //zgz add,2002.9.3
    T_EDIT_CB       Callback   = data->editor_data.Callback;  //zgz add,2002.9.3
    MfwHdr *edit_hdr=(MfwHdr *)data->edt_edt;
    MfwEdt *edit_controll=(MfwEdt *)edit_hdr->data;
    MfwEdtAttr* edtattr=&data->editor_data.editor_attr;

    char* PredText = data->editor_data.editor_attr.predText;
    unsigned int editMode;
    char debug[25];

    unsigned int  cur_ecinput_mode;   //zgz,2002.7.9
    UINT32           oldFontColor;
    UBYTE old_mode;
    TRACE_EVENT("editor_kbd_cb");
    //old_mode=dspl_Enable(0);

    /* subpress unwanted longpresses (mfw throws more than one long press event for one long press on a key)*/
    if( !( event & KEY_LONG ) )
        DoNextLongPress = TRUE;         /* next Key_long event is correct */
    else if( DoNextLongPress )
        DoNextLongPress = FALSE;        /* mark Key_long event as consumed but do current long press */
    else if( !DoNextLongPress )
        return MFW_EVENT_CONSUMED;      /* don't do current long press */


    // c015 rsa
    if( data->edt_tim NEQ NULL )
    {
        /* restart the timer for no response */
        tim_stop  (data->edt_tim);
        tim_start (data->edt_tim);
    }
    // end c015 rsa

    /*  RM T9 integration 24-08
     *
     */
    editMode = data->edt_mode;
#ifdef EASY_TEXT_ENABLED
    if( FFS_flashData.PredTextSelected == FALSE || data->editor_data.mode != ALPHA_MODE )
#else
    if( 1 )
#endif
    {
        //TRACE_EVENT("Not in predictive mode");
        //sprintf(debug, "Key: %d", keyboard->code);
        //TRACE_EVENT(debug);
        switch( editMode )
        {
        case E_MOBILEINNOVATION_MODE:
            cur_ecinput_mode = get_ecinput_mode();
            if( event & KEY_LONG )
            {
                switch( keyboard->code )
                {
                case KCD_CALL:
                    //SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL);                        	
                    break;
                case KCD_LEFT:
                    break;
                case KCD_MNUUP:
                    if( cur_ecinput_mode NEQ ONLYREAD_MODE &&
                        !data->editor_data.hide )
                        //GW Removed T9 code.
                        break;
                case KCD_RIGHT:
#ifndef _M188_	/* 2004/06/29 sunsj modify for m288b */
				case KCD_CLEAR:
#endif
                    if( data->editor_data.editor_attr.text[0] NEQ '\0' )
                    {
                        if( data->editor_data.hide )
                            editor_hideClearAll(data);
                        else
                        {
                            /* clear the whole buffer */
                            //data->editor_data.editor_attr.text[0] = '\0';
                            memset(data->editor_data.editor_attr.text, 0, sizeof(data->editor_data.editor_attr.text));
                            //edtHide(data->edt_edt);	// zgz added, 2002.04.29
                            //       edtSymbol(data->edt_edt,ecTop); //zgz, 2002.7.2 edtChar(data->edt_edt,ecTop);
                            //edtClear(data->edt_edt);
                            // edtUnhide(data->edt_edt);	// zgz added, 2002.04.29


                            win_show(data->edt_win); /* in order to update the Softkeys */
                        }
                    }
                    else
                    {
                        /* leave editor if buffer already empty */
                        TRACE_EVENT("yq:event for long right");
                        SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL);
                    }
                    break;

                case KCD_0: /* '+' key */
                    /* 2003/12/04 sunsj modify for new editor */
                    if( (cur_ecinput_mode NEQ ONLYREAD_MODE) /*&& (cur_ecinput_mode NEQ PARADISE_MODE)*/ ) /* ignore normal keys if in read-only mode */
                    {
                        if( data->editor_data.hide )

                            editor_hideClear(data); /* remove the '0' */

                        else
                        {
                            edtSymbol(data->edt_edt,ecBack);  //zgz,2002.7.2 edtChar(data->edt_edt,ecBack); /* remove the '0' */
                            edtSymbol(data->edt_edt,'+');  //zgz,2002.7.2 edtChar(data->edt_edt,'+');    /* insert the '+' */
                            displayedtsoftkey(win);//       win_show(data->edt_win); /* in order to update the Softkeys */
                        }
                    }
                    break;
                case KCD_HASH:
                    if( (cur_ecinput_mode EQ PHONENUMONLY_MODE) || (cur_ecinput_mode EQ SHUZI_MODE) )
                    {
                        edtSymbol(data->edt_edt,ecBack);  //zgz,2002.7.2 edtChar(data->edt_edt,ecBack); /* remove the '0' */
                        edtSymbol(data->edt_edt,'p');  //zgz,2002.7.2 edtChar(data->edt_edt,'+');    /* insert the '+' */
                        displayedtsoftkey(win);//        win_show(data->edt_win); /* in order to update the Softkeys */

                    }
                    break;

                default:

                    return MFW_EVENT_CONSUMED; /* we don't handle other long presses here */


                }
            }
            else
            {
                switch( keyboard->code )
                {
                case KCD_CALL:
                    //SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL);                        	
                    break;
                    //zgz, 2002.5.15  add the up or down one line key process
                case KCD_VOLUP:
                case KCD_MNUUP:
                    TRACE_EVENT("haha,yanqing pressed the up");
                    if( data->editor_data.edtInPbk )
                    {
                        SEND_EVENT (win, E_EDITOR_DEINIT, INFO_TOPREV_EDT, NULL);
                    }
                    else if( !data->editor_data.hide )
                        edtSymbol(data->edt_edt,ecUp);
                    break;

                case KCD_VOLDOWN:
                case KCD_MNUDOWN:
                    TRACE_EVENT("yanqing,you pressed the down");
                    if( data->editor_data.edtInPbk )
                    {
                        SEND_EVENT (win, E_EDITOR_DEINIT, INFO_TONEXT_EDT, NULL);
                    }
                    else if( !data->editor_data.hide )
                        edtSymbol(data->edt_edt,ecDown);
                    break;

                case KCD_MNULEFT:
                    if( cur_ecinput_mode EQ ONLYREAD_MODE )
                        edtSymbol(data->edt_edt,ecUp);
                    else if( cur_ecinput_mode EQ IPADDRESS_MODE )
                    {
                        if( findprechar()=='.' )
                        {
                            edtSymbol(data->edt_edt,ecLeft);
                            edtSymbol(data->edt_edt,ecLeft);
                        }
                        else edtSymbol(data->edt_edt,ecLeft);
                    }
                    else if( !data->editor_data.hide )
                        edtSymbol(data->edt_edt,ecLeft);
                    break;

                case KCD_MNURIGHT:
                    if( cur_ecinput_mode EQ ONLYREAD_MODE )
                        edtSymbol(data->edt_edt,ecDown);
                    else if( cur_ecinput_mode EQ IPADDRESS_MODE )
                    {
                        if( findnextchar()=='.' )
                        {
                            edtSymbol(data->edt_edt,ecRight);
                            edtSymbol(data->edt_edt,ecRight);
                        }
                        else edtSymbol(data->edt_edt,ecRight);
                    }
                    else if( !data->editor_data.hide )
                        edtSymbol(data->edt_edt,ecRight);
                    break;

                case KCD_OK:
#ifdef QQFUNC//hxl add for qq func switch,2003-3-24
                    if( In_QQ )
                    {//hxl add for qq,2003-3-2
                        SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_OK, NULL);
                        break;
                    }
#endif
                case KCD_LEFT:
                    /* 2004/04/13 sunsj add for password editor */
                    if( data->editor_data.hide == 1 )
                    {
                        memcpy(data->editor_data.editor_attr.text, data->tmpBuf, data->editor_data.editor_attr.size);
                    }

                    if( wstrlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter )
                    {
                        /* entered less than the required number of chars */
                        if( data->editor_data.AlternateLeftSoftKey NEQ TxtNull )
                        {
                            /* an alternate softkey were defined: execute it*/
                            SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_ALTERNATELEFT, NULL);
                        }
                        else
                        {  //zgz add,2002.9.3 this else sentence only for phbk editing
                            if( data->editor_data.edtInPbk )
                                SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL);
                        }
                    }
                    else if( data->editor_data.LeftSoftKey NEQ TxtNull )
                    {
                        /* 2003/11/10 sunsj */
                        edit_controll->cp_curr_x=15;
                        /* left Softkey is enabled (and entered sufficient number of chars): execute it */
                        SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL);
                    }
                    else
                    {
                        /* NOP */
                        /* entered less than the required number of chars */
                        if( data->editor_data.AlternateLeftSoftKey NEQ TxtNull )
                        {
                            /* an alternate softkey were defined: execute it*/
                            SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_ALTERNATELEFT, NULL);
                        }
                        else
                        {  //zgz add,2002.9.3 this else sentence only for phbk editing
                            if( data->editor_data.edtInPbk )
                                SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_LEFT, NULL);
                        }
                    }

                    break;

                case KCD_HUP:
                    if( data->editor_data.RightSoftKey NEQ TxtNull )
                    {
                        /* Right softkey is enabled: execute it */
                        SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_HUP, NULL);
                    }
                    break;

                case KCD_RIGHT:
#ifndef _M188_	/* 2004/06/29 sunsj modify for m288b */
				case KCD_CLEAR:
#endif
                    if( !((data->editor_data.LeftSoftKey == TxtNull)&&(data->editor_data.RightSoftKey == TxtNull)&&
                          ((data->editor_data.Identifier == SAT_SEND_SMS)||
                           (data->editor_data.Identifier == SAT_SEND_SS)||
                           (data->editor_data.Identifier == SAT_CALL_RESULT))) ) //zhaowm 2003.1.4
                    {
                        char unicode_head = 0x80;
                        if( cur_ecinput_mode NEQ ONLYREAD_MODE ) /* ignore clear key if in read-only mode */
                        {
                            /* 2003/11/1 sunsj modify */
                            if( (data->editor_data.editor_attr.text[0] == unicode_head && ((data->editor_data.editor_attr.text[1] NEQ '\0') || (data->editor_data.editor_attr.text[2] NEQ '\0'))) 
                                || data->editor_data.editor_attr.text[0] NEQ '\0' )
                            //if (data->editor_data.editor_attr.text[0] NEQ '\0' && ((data->editor_data.editor_attr.text[1] NEQ '\0') || (data->editor_data.editor_attr.text[2] NEQ '\0')))
                            {
                                /* buffer is not empty, delete the char before the cursor */
                                if( cur_ecinput_mode EQ IPADDRESS_MODE )
                                {
                                    if( findprechar()=='.'&&findnextchar()==0 )
                                    {
                                        edtSymbol(data->edt_edt, ecBack);
                                        edtSymbol(data->edt_edt, ecBack);
                                    }
                                    else if( findnextchar()==0 )
                                        edtSymbol(data->edt_edt, ecBack);

                                    break;

                                }
                                else edtSymbol(data->edt_edt, ecBack);
                                displayedtsoftkey(win);

                            }
                            else
                            {
                                /* leave editor if buffer already empty */
                                SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL);
                            }
                        }
                        else
                            SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_RIGHT, NULL);

                    }
                    break;                      


                case KCD_HASH:
                    if( (((MfwEdt *)((MfwHdr *)data->edt_edt)->data)->attr->titleMode == 1) ||(((MfwEdt *)((MfwHdr *)data->edt_edt)->data)->attr->titleMode == TITLE_TOP) )
                    {

                        if( (cur_ecinput_mode NEQ ONLYREAD_MODE) && (cur_ecinput_mode NEQ PHONENUMONLY_MODE) )
                        {
                            /* 2003/12/04 sunsj remove */
#if 0
                            switch_ecinput_mode();  // switch the input method
                            if( (get_ecinput_mode() == PARADISE_MODE)&&data->editor_data.hide )
                                switch_ecinput_mode();

                            if( get_ecinput_mode() == PARADISE_MODE )
                            {
                                if( getSymbolNumSpare(((MfwHdr *) data->edt_edt)->data) == -1 )
                       

⌨️ 快捷键说明

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