mmihz.c

来自「是一个手机功能的模拟程序」· C语言 代码 · 共 1,669 行 · 第 1/5 页

C
1,669
字号

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

 $Function:     hz_exec_cb

 $Description:  Dialog function for  chinese win.

 $Returns:    None.

 $Arguments:  None.

*******************************************************************************/
static void hz_exec_cb(T_MFW_HND win, USHORT event, SHORT value, T_MFW_KBD *kc)
{
    T_MFW_WIN      * win_data  = ((T_MFW_HDR *)win)->data;
    T_HZ_INFO  * data      = (T_HZ_INFO *)win_data->user;
    
    T_MFW_HND       parent_win = data->parent;
    T_MFW_WIN     *parentwin_data =((T_MFW_HDR *)parent_win)->data;
    T_EDITOR_INFO  *parentdata   =(T_EDITOR_INFO *)parentwin_data->user;
    MfwHdr *edit_hdr=(MfwHdr *)parentdata->edt_edt;
    MfwEdt *edit_controll=(MfwEdt *)edit_hdr->data;
   // MfwEdtAttr  * edtattr=&parentdata->editor_data.editor_attr;
    T_MFW_HND      * l_parent;
    char msg[100];

    TRACE_EVENT("hz_exec_cb()");
    sprintf(msg,"win:%d",(int *)win);
    TRACE_EVENT(msg);
    switch(event)
    	{    
    	case HZINIT:
    		
    		data->InitPx=56;    		
    		data->InitPy=98;
    		data->CurPx=data->InitPx;
            data->CurPy=data->InitPy;
            data->memoryPx=0;
            data->memoryPy=0;
            memset(data->memoryBuf,0,sizeof(data->memoryBuf));
           
            InitializeForChineseInput(&data->chineseData);            
            if((int)kc->code==KCD_0||(int)kc->code==KCD_OK||(int)kc->code==KCD_ABC
            	||getSymbolNumSpare(edit_controll)<1)
            	{ 
            	  hz_destroy(data->hz_win);
                  return;
            	}

        
    		data->l_intimelong = timCreate(data->hz_win, TIM_TAKE_OVERLONG, (MfwCb)TimerEH);
    		timStart(data->l_intimelong);
            data->l_intime = timCreate(data->hz_win, TIM_TAKE_OVER, (MfwCb)TimerEH); 
            timStart(data->l_intime);
            
    		Input_one_key(win,(int) kc->code);    		
    		
            data->hz_kbd = kbdCreate(data->hz_win, KEY_ALL, (MfwCb) hzEventKbd);
    		sprintf(msg,"zxp beforeinput:%s",(char *)data->chineseData.ConditionStr);
    		TRACE_EVENT(msg);
            //Input_one_key(win,(int) kc->code);
           
    	    break;
        case HZEXIT:          	
    		hz_destroy(data->hz_win);
    		break;
    	}
}

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

 $Function:     hz_destroy

 $Description:  Destroy the hz_win.

 $Returns:    None.

 $Arguments:  None.

*******************************************************************************/
void hz_destroy (T_MFW_HND window)
{
    T_MFW_WIN     * win  = ((T_MFW_HDR *)window)->data;
    T_HZ_INFO * data = (T_HZ_INFO *)win->user;
    T_MFW_HND  parent_win   =data->parent;
    T_MFW_WIN     *parentwin_data =((T_MFW_HDR *)parent_win)->data;
    T_EDITOR_INFO  *parentdata   =(T_EDITOR_INFO *)parentwin_data->user;
 //   MfwHdr *edit_hdr=(MfwHdr *)parentdata->edt_edt;
 //   MfwEdt *edit_controll=(MfwEdt *)edit_hdr->data;
    TRACE_EVENT ("hz_destroy()");

    if (data)
        {
            g_norejectkeyflag=0;
            if((!editForChineseInput)&&(!(parentdata->editor_data.edtInPbk)))
               editForChineseInput=1;
            parentdata->hz_input=NULL;
           // kbd_delete (data->hz_kbd);
            win_delete (data->hz_win);
        //    edit_controll->cp_curr_x=0;//reset the flag.we set it in editorkeycb before hz_start.
            /*
             * Free Memory
             */
            FREE_MEMORY ((void *)data, sizeof (T_HZ_INFO));
            
        } 
    else
        {
            return ;
        }
}


static void DispPromptBuf(T_MFW_HND win) 
{   
    T_MFW_WIN     * win_data   = ((T_MFW_HDR *)win)->data;
    T_HZ_INFO *  data       = (T_HZ_INFO *)win_data->user;
    char* ConditionStr =(char*)data->chineseData.ConditionStr;
    unsigned short* ConditionHz=(unsigned short*)data->chineseData.ConditionHz;
    
    unsigned short Word,memoryWord,TempBuf[20];
    char Ch[5],memoryCh[5],HzTempbuf[8],CharTempBuf[20],CharPromptBuf[200];
    char msg[100];    
    USHORT px;
    UINT32 oldColor,oldFontColor;
    U8 mode;
    
    TRACE_EVENT("DispPromptBuf");

    mode=dspl_Enable(0);
   
    if(wordstrcmp(data->chineseData.PromptBuf, data->memoryBuf)!=0/*||dsplflag==0*/||flagForNewWin==1)/*&&InTheTime==0*/    	 
       dspl_Clear(0, 82, 120, 131); 
         
    memset(TempBuf,0,sizeof(TempBuf));
    memset(HzTempbuf,0,sizeof(HzTempbuf));
    memset(CharTempBuf,0,sizeof(CharTempBuf));
    memset(CharPromptBuf,0,sizeof(CharPromptBuf));
    
			
    if(wordstrlen(ConditionHz))   
    
      strcpy(CharTempBuf,"");      
    	
	else if(strlen(ConditionStr)&&(ConditionStr[5]!=':')){
		if(data->chineseData.InTheTime)
			sprintf(CharTempBuf," %s          ",ConditionStr);
		else sprintf(CharTempBuf," %s_         ",ConditionStr);	
		}
	else if(strlen(ConditionStr)&&(ConditionStr[5]==':')){
		sprintf(CharTempBuf," %s          ",ConditionStr);
	
		}		
	
    if(data->chineseData.PageNum)
	{	CharTempBuf[11]='<';
	    CharTempBuf[12]='-';
	    CharTempBuf[13]=' ';
	}
	if(data->chineseData.SatisfyNum>data->chineseData.MAX_Satisfy)    
	{	
		CharTempBuf[12]='-';
		CharTempBuf[13]='>';
	}
	else {
	     	CharTempBuf[13]=' ';
		}
    CharTempBuf[14]='\0';
    
        //oldColor=dspl_GetBkgColor();
        //dspl_SetBkgColor(0xe6ffff);
    	dspl_TextOut(0 , 82, 0,CharTempBuf);
    	//dspl_SetBkgColor(oldColor);
   
	//else dspl_TextOut(0 , 78,0,CharTempBuf);
	while(data->chineseData.SatisfyNum<=(data->CurPy-data->InitPy)/16*5&&data->CurPy>data->InitPy)
		data->CurPy-=16;
	while(data->chineseData.SatisfyNum<((data->CurPy-data->InitPy)/16*5+data->CurPx/24+1)&&data->CurPx>8)
     	data->CurPx-=24;

	if((ConditionStr[5] != ':')/*&&(InTheTime==0)*/){//Chinese 

        if(wordstrcmp(data->chineseData.PromptBuf, data->memoryBuf)==0/*&&dsplflag==1&&(memoryBuf!=NULL)*/&&(!flagForNewWin))  
        	{
        	  TRACE_EVENT("buf not changed");
        	  memoryWord=data->memoryBuf[((data->memoryPy-data->InitPy)/16*5+data->memoryPx/24)*2+1];
              memoryCh[0]=0x80;
              memoryCh[1]=(char)(memoryWord>>8);
              memoryCh[2]=(char)memoryWord;
              memoryCh[3]='\0';
              memoryCh[4]='\0';
              dspl_TextOut(data->memoryPx, data->memoryPy, DSPL_TXTATTR_UNICODE, memoryCh);
        	}
        else {  
        	  TRACE_EVENT("buf  changed");
              Wbuf2Cbuf(CharPromptBuf,data->chineseData.PromptBuf);        
              
              CharPromptBuf[41] ='\0';
              CharPromptBuf[42] ='\0';     
      
              set_font_type(CHNINPUT_FONT);       
        	
              dspl_TextOut(0 , data->InitPy, DSPL_TXTATTR_UNICODE,CharPromptBuf);
            //  dsplflag=1;
        	}        	
                      
        Word=(unsigned short)data->chineseData.PromptBuf[((data->CurPy-data->InitPy)/16*5+data->CurPx/24)*2+1];
        Ch[0]=0x80;
        Ch[1]=(char)(Word>>8);
        Ch[2]=(char)Word;
        Ch[3]='\0';
        Ch[4]='\0';
       
        	
        dspl_colorTextOut(data->CurPx, data->CurPy, DSPL_TXTATTR_INVERS|DSPL_TXTATTR_UNICODE, Ch,0x008080);
        
            
     
    }
else /*if(InTheTime==0)*/{ //Label
       if(wordstrcmp(data->chineseData.PromptBuf, data->memoryBuf)==0/*&&dsplflag==1&&(memoryBuf!=NULL)*/&&(!flagForNewWin))  
       	{
       	  TRACE_EVENT("buf not changed");
       	  if(data->chineseData.PageNum==0)
        	{ if(data->memoryPy==data->InitPy&&data->memoryPx<=data->InitPx)
        	    memoryWord=data->memoryBuf[(data->memoryPx/24)*2+1];
              else if(data->memoryPy==data->InitPy&&data->memoryPx>=80)
              	memoryWord=data->memoryBuf[7+(data->memoryPx-80)/24*2+1];
              else memoryWord=data->memoryBuf[11+(data->memoryPx/24)*3+1];
        	}
        else memoryWord=data->memoryBuf[(data->memoryPy-data->InitPy)/16*15+(data->memoryPx/24)*3+1];
        Sprintf(msg,"memoryword:%d",memoryWord);
        TRACE_EVENT(msg);
        memoryCh[0]=0x80;
        memoryCh[1]=(char)(memoryWord>>8);
        memoryCh[2]=(char)memoryWord;
        memoryCh[3]='\0';
        memoryCh[4]='\0';       
        	
            dspl_TextOut(data->memoryPx, data->memoryPy, DSPL_TXTATTR_UNICODE, memoryCh);
            
       	}
       else{
       	TRACE_EVENT("buf changed");
        Wbuf2Cbuf(CharPromptBuf,data->chineseData.PromptBuf);        
        
      
     //   TraceMMI(CharPromptBuf);
     
        if(data->chineseData.PageNum==0)
        	{ CharPromptBuf[52]='\0';
              CharPromptBuf[53]='\0';
        	}
        else {CharPromptBuf[60]='\0';
              CharPromptBuf[61]='\0';
        	}
     
        //	oldColor=dspl_GetBkgColor();
            //dspl_SetBkgColor(0xffe1e1);
            dspl_TextOut(0 , data->InitPy, DSPL_TXTATTR_UNICODE,CharPromptBuf);
         //   dspl_SetBkgColor(oldColor);
       //  dsplflag=1;
       	}   
        if(data->chineseData.PageNum==0)
        	{ if(data->CurPy==data->InitPy&&data->CurPx<=data->InitPx)
        	    Word=data->chineseData.PromptBuf[(data->CurPx/24)*2+1];
              else if(data->CurPy==data->InitPy&&data->CurPx>=80)
              	Word=data->chineseData.PromptBuf[7+(data->CurPx-80)/24*2+1];
              else Word=data->chineseData.PromptBuf[11+(data->CurPx/24)*3+1];
        	}
        else Word=data->chineseData.PromptBuf[(data->CurPy-data->InitPy)/16*15+(data->CurPx/24)*3+1];
        
        Ch[0]=0x80;
        Ch[1]=(char)(Word>>8);
        Ch[2]=(char)Word;
        Ch[3]='\0';
        Ch[4]='\0';
       
        	//oldColor=dspl_GetBkgColor();
            //dspl_SetBkgColor(0xffe1e1);
            dspl_colorTextOut(data->CurPx, data->CurPy, DSPL_TXTATTR_INVERS|DSPL_TXTATTR_UNICODE, Ch,0x008080);
            //dspl_SetBkgColor(oldColor);
        
     
     //   displaySoftKeys(TxtSoftSelect, TxtSoftBack); 
     
        
    }
    data->memoryPx=data->CurPx;
    data->memoryPy=data->CurPy;
    memset(data->memoryBuf, 0, sizeof(data->memoryBuf));
    wordstrcat(data->memoryBuf, data->chineseData.PromptBuf);
    /*
    oldColor=dspl_GetBkgColor();
	dspl_SetBkgColor(GetPreDefinedColor(ColorSoftKeyBG));
	oldFontColor=dspl_GetFrgColor();
	dspl_SetFrgColor(GetPreDefinedColor(ColorSoftKeyFont));
	*/
    if(wordstrlen(ConditionHz)||(strlen(ConditionStr)&&(ConditionStr[5]==':')))
     	displaySoftKeys(TxtSoftSelect, TxtSoftBack);
    else if(strlen(ConditionStr)&&(ConditionStr[5]!=':'))
     	displaySoftKeys(TxtSoftOK, TxtDelete);
    /*
     dspl_SetBkgColor(oldColor);
	 dspl_SetFrgColor(oldFontColor); 
	 */
	 	
	 	//dspl_SetFrgColor(0x0000ff);
	    dspl_DrawRect(0, 82, 119, 131);
	    //dspl_SetFrgColor(oldFontColor);
	    
	 dspl_Enable(mode);
	 
     
} 

#if 0
static int    PinYinCode(char * ConditionStr,char CheckChar)
{   int Loop;
   // char g_str[10];
    
    for(Loop=0;Loop<MaxPinYin;Loop++)
    {   if ( strncmp(Table[Loop],ConditionStr,strlen(ConditionStr))==0 &&
             Table[Loop][strlen(ConditionStr)]==CheckChar )
            return 1;
    }
    return 0;
}

static void SetOtherMightChar(chinese_Data* pchinese_Data,int KeyCode)
{   unsigned int Position;
    Position=0;
    memset(pchinese_Data->OtherMightChar,0,sizeof(pchinese_Data->OtherMightChar));
    while(KeyCode>1 && strlen(InputMethodOtherChar[KeyCode-2])!=Position)

⌨️ 快捷键说明

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