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

📄 mmitextinput.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                    {
                        sprintf(spareNum, "%3d", 0);
                    }
                    /* 2004/04/22 sunsj modify */
                    displayTitle( 15, data->editor_data.TextString, spareNum, TITLE_WITH_NUMBER, 0, 0);
                }

                if( data->editor_data.edtInPbk == 1 )
                {
                    //return MFW_EVENT_CONSUMED;
                }
                OldBackgroundColor = dspl_GetBkgColor();
                dspl_SetBkgColor(TEXT_CANDIDATE_BACKGROUND);
                OldForegroundColor = dspl_GetFrgColor();
                dspl_SetFrgColor(TEXT_CANDIDATE_FOREGROUND);

                switch( data->Ime.InputScreenType )
                {
                case TEXT_DISPLAY_SCREEN:
                    {
                        if( data->editor_data.edtInPbk == 1 )
                        {
                            dspl_SetBkgColor(OldBackgroundColor);
                            dspl_SetFrgColor(OldForegroundColor);
                        }
                        else
                        {
                            dspl_SetFrgColor(OldForegroundColor);
                            dspl_SetBkgColor(OldBackgroundColor);
                        }
                    }
                    break;
                case STROKE_INPUT_SCREEN:
                    {
                        if( data->wcCandidates[0] == 0x00 )
                        {
                            break;
                        }
                        /* 20004/01/04 sunsj modify for different lcd size */
                        dspl_Clear(0, (USHORT)(ELEMENT_LINE-1), SCREEN_SIZE_X, (USHORT)(CANDIDATES_LINE+fontHeight) );
                        dspl_TextOut(1, ELEMENT_LINE,DSPL_TXTATTR_UNICODE|DSPL_TXTATTR_TRANSPARENT, (char*)data->DisplayElementBuffer);
                        dspl_TextOut_Blk(LEFT_INDENTATION, CANDIDATES_LINE, SCREEN_SIZE_X, DSPL_TXTATTR_UNICODE|DSPL_TXTATTR_TRANSPARENT, (char*)data->wcCandidates);
                        CandidateHighlightDisplayContorl(&data->Ime, data->HighlightedCandidate);

                        dspl_SetBkgColor(OldBackgroundColor);
                        dspl_SetFrgColor(OldForegroundColor);

#if (MAIN_LCD_SIZE==3)//jhxu720				
				        DRAW_ICON(ICON_TEXTINPUT_EDITBAR);
#elif ( MAIN_LCD_SIZE==4 )
                        /* 2004/01/04 sunsj modify for different lcd size */
                        dspl_DrawRect(0, ELEMENT_LINE-2, SCREEN_SIZE_X-1, CANDIDATES_LINE+fontHeight+2);
                        dspl_DrawLine(0, ELEMENT_LINE+fontHeight+1 , SCREEN_SIZE_X-1, ELEMENT_LINE+fontHeight+1);
#elif ( MAIN_LCD_SIZE==2 )
                        //dspl_DrawRect(0, ELEMENT_LINE-1, SCREEN_SIZE_X-1, CANDIDATES_LINE+fontHeight+1);
#endif
                    }
                    break;
                case PINYIN_INPUT_SCREEN:
                    {
                        if( data->wcCandidates[0] == 0x00 )
                        {
                            break;
                        }

                        /* 2004/01/04 sunsj modify for different lcd size */
                        dspl_Clear(0, (USHORT)(ELEMENT_LINE-1), SCREEN_SIZE_X, (USHORT)(CANDIDATES_LINE+fontHeight) );
#if (MAIN_LCD_SIZE==3)//jhxu720		
						DRAW_ICON(ICON_TEXTINPUT_EDITBAR);
#endif
                        DisplayPinyinElement(&data->Ime);
                        dspl_TextOut_Blk(LEFT_INDENTATION, CANDIDATES_LINE, SCREEN_SIZE_X, DSPL_TXTATTR_UNICODE|DSPL_TXTATTR_TRANSPARENT, (char*)data->wcCandidates);
                        CandidateHighlightDisplayContorl(&data->Ime, data->HighlightedCandidate);

                        dspl_SetBkgColor(OldBackgroundColor);
                        dspl_SetFrgColor(OldForegroundColor);
                        /* 2004/01/04 sunsj modify for 102x80 screen type */
#if ( MAIN_LCD_SIZE==4 )
                        /* 2004/01/04 sunsj modify for different lcd size */
                        dspl_DrawRect(0, ELEMENT_LINE-2, SCREEN_SIZE_X-1, CANDIDATES_LINE+fontHeight+2);
                        dspl_DrawLine(0, ELEMENT_LINE+fontHeight+1 , SCREEN_SIZE_X-1, ELEMENT_LINE+fontHeight+1);
#endif
#if ( MAIN_LCD_SIZE==2)
                        //dspl_DrawRect(0, ELEMENT_LINE-1, SCREEN_SIZE_X-1, CANDIDATES_LINE+fontHeight+1);
#endif
                    }
                    break;
                case WORD_ASSOCIATION_SCREEN:
                    {
                        if( data->wcCandidates[0] == 0x00 )
                        {
                            break;
                        }

                        /* 20004/01/04 sunsj modify for different lcd size */
                        dspl_Clear(0, (USHORT)(ELEMENT_LINE-1), SCREEN_SIZE_X, (USHORT)(CANDIDATES_LINE+fontHeight) );
#if (MAIN_LCD_SIZE==3)//jhxu720
						DRAW_ICON(ICON_TEXTINPUT_EDITBAR);
#elif ( MAIN_LCD_SIZE==2 )
                        dspl_BitBlt(0, 39, 102, 26, 0, (void *) Edit_bar_bmp, 0);
#endif
                        /* 2003/12/29 sunsj modify buffer size */
                        memset(DisplayCandidateBufLine1, 0x00, (CANDIDATES_PER_GROUP*2+3));
                        memset(DisplayCandidateBufLine2, 0x00, (CANDIDATES_PER_GROUP*2+3));

                        if( (data->Ime.EditorMode == PINYIN_INPUT_MODE) || (data->Ime.EditorMode == STROKE_INPUT_MODE) )
                        {
                            if( data->wcCandidates[0] != 0x00 )
                            {
                                DisplayCandidateBufLine1[0] = 0x80;
                                memcpy(&DisplayCandidateBufLine1[1], (char *)data->wcCandidates, CANDIDATES_PER_GROUP*2 );
                            }
                            if( data->wcCandidates[7] != 0x00 )
                            {
                                DisplayCandidateBufLine2[0] = 0x80;
                                memcpy(&DisplayCandidateBufLine2[1], (char *)data->wcCandidates+CANDIDATES_PER_GROUP*2, CANDIDATES_PER_GROUP*2 );
                            }
                        }
                        /* 2003/12/15 sunsj modify coordinate */
                        dspl_TextOut_NoNewline(LEFT_INDENTATION, ELEMENT_LINE, DSPL_TXTATTR_TRANSPARENT, DisplayCandidateBufLine1);
                        dspl_TextOut_NoNewline(LEFT_INDENTATION, CANDIDATES_LINE, DSPL_TXTATTR_TRANSPARENT, DisplayCandidateBufLine2);
                        CandidateHighlightDisplayContorl(&data->Ime, data->HighlightedCandidate);

                        dspl_SetBkgColor(OldBackgroundColor);
                        dspl_SetFrgColor(OldForegroundColor);
#if ( MAIN_LCD_SIZE==4 )
                        /* 20004/01/04 sunsj modify for different lcd size */
                        dspl_DrawRect(0, ELEMENT_LINE-2, SCREEN_SIZE_X-1, CANDIDATES_LINE+fontHeight+2);
                        dspl_DrawLine(0, ELEMENT_LINE+fontHeight+1 , SCREEN_SIZE_X-1, ELEMENT_LINE+fontHeight+1);
#endif
#if ( MAIN_LCD_SIZE==2)
                        //dspl_DrawRect(0, ELEMENT_LINE-1, SCREEN_SIZE_X-1, CANDIDATES_LINE+fontHeight+1);
#endif
                    }
                    break;
                default:
                    break;
                }

                /* Draw the other area */
                DisplayOtherArea( data );
            }
        }
        break;
    default:
        return MFW_EVENT_PASSED;
    }
    return MFW_EVENT_CONSUMED;  
}

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

 $Function:    	text_input_kbd_cb

 $Description:	Keyboard event handler

 $Returns:		status int

 $Arguments:	window handle event, keyboard control block

 $History:      

*******************************************************************************/
static int text_input_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_TEXT_INPUT   * data        = (T_TEXT_INPUT *)win_data->user;
    T_MFW_HND      parent_win    = data->parent_win;
    USHORT         Identifier    = data->Identifier;
    int            temp          = 0;
    PZI8WCHAR      temp_ZiKeyMap;
    int            asciiTextSize = data->editor_data.editor_attr.e_size?data->editor_data.editor_attr.e_size:data->editor_data.editor_attr.size;
    T_TEXT_INPUT   * testptr;

    MMI_TRACE_EVENT(("sunsj-----------text_input_kbd_cb()"));
    /* 2003/12/15 sunsj start input time if the editor has time limit */
    if( data->editor_data.timeout && (data->editor_data.timeout NEQ FOREVER) )
        tim_start (data->input_tim);

    /* 2004/05/08 sunsj modify */
    if( (data->editor_data.editor_attr.text[0]=='\0' )&&(data->editor_data.Identifier == SMSSEND_ID_TEXTEDIT) )
    {
        if( data->Ime.EditorMode == PINYIN_INPUT_MODE || data->Ime.EditorMode == STROKE_INPUT_MODE )
        {
            /* 2004/06/30 sunsj modify for m288b */
#ifdef _M188_
            data->editor_data.editor_attr.e_size = 73;
#endif
#if(MAIN_LCD_SIZE==4)
            data->editor_data.editor_attr.e_size = 503;
#elif(MAIN_LCD_SIZE==3)
			data->editor_data.editor_attr.e_size = 73;
#endif
        }
        else
        {
            /* 2004/06/30 sunsj modify for m288b */
#ifdef _M188_
            data->editor_data.editor_attr.e_size = 163;
#endif
#if(MAIN_LCD_SIZE==4)
            data->editor_data.editor_attr.e_size = 573;
#elif(MAIN_LCD_SIZE==3)
			data->editor_data.editor_attr.e_size = 163;
#endif
        }
    }
    else
    {
        if( data->Ime.EditorMode == PINYIN_INPUT_MODE || data->Ime.EditorMode == STROKE_INPUT_MODE )
        {
            if( (((data->editor_data.editor_attr.size - 3)/2)+3) >= 0 )
            {
                data->editor_data.editor_attr.e_size = (((data->editor_data.editor_attr.size - 3)/2)+3);
            }
            else
            {
                data->editor_data.editor_attr.e_size = 0;
            }
        }
        else
        {
            data->editor_data.editor_attr.e_size = data->editor_data.editor_attr.size;
        }
    }
    /*2003/12/24, wangyan modify*/

    if( event & KEY_LONG )
    {
        switch( keyboard->code )
        {
        case KCD_LEFT:
            break;
        case KCD_RIGHT:
            /* 2004/05/08 sunsj remove because of the key press problem maybe empty the text buffer */
            /*
            if( data->editor_data.editor_attr.text[0] NEQ '\0' )
            {
                /* clear the whole buffer 
                memset(data->editor_data.editor_attr.text, 0, sizeof(data->editor_data.editor_attr.text));
                win_show(data->input_win);
            }
            */
            /* 2004/04/02 sunsj modify */
            //else
            //{
            //    SEND_EVENT (win, TEXT_INPUT_DESTROY, INFO_KCD_RIGHT, NULL);
            //}
            break;
        case KCD_HUP:
            break;
        case KCD_MNUUP:
            break;
        case KCD_MNUDOWN:
            break;
        case KCD_MNULEFT:
            break;
        case KCD_MNURIGHT:
            break;
        case KCD_0:
        case KCD_1:
        case KCD_2:
        case KCD_3:
        case KCD_4:
        case KCD_5:
        case KCD_6:
        case KCD_7:
        case KCD_8:
        case KCD_9:
            break;
        case KCD_CALL:
            break;
        case KCD_STAR:
            break;
        case KCD_HASH:
            break;
        default:
            break;
        }
    }
    else
    {
        switch( keyboard->code )
        {
        case KCD_LEFT:
            {
                ZI8WCHAR HighByte;
                ZI8WCHAR Temp;
                ZI8WCHAR LowByte;

                /* convert current candidate which is selected by user to insert to text buffer */
                if( (data->Ime.EditorMode == PINYIN_INPUT_MODE) || (data->Ime.EditorMode == STROKE_INPUT_MODE) )
                {
                    Temp     = data->wcCandidates[data->Ime.CandidateCursor];
                    LowByte  = data->wcCandidates[data->Ime.CandidateCursor] & 0x00FF;
                    HighByte = data->wcCandidates[data->Ime.CandidateCursor] & 0xFF00;
                    Temp     = (LowByte << 8) & 0xFF00;
                    HighByte = (HighByte >> 8) & 0x00FF;
                    Temp     = Temp | HighByte;
                }

                switch( data->Ime.EditorMode )
                {
                case PINYIN_INPUT_MODE:
                    {
                        switch( data->Ime.InputScreenType )
                        {
                        case TEXT_DISPLAY_SCREEN:
                            {
                                if( strlen(data->editor_data.editor_attr.text) >= data->editor_data.min_enter )

⌨️ 快捷键说明

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