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

📄 mmichineseinput.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
							IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][0]);
							 Counter[keyboard->code]++; //increment counter
							tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
						}
						else /*if counter is less than MAX for that key*/
						{	ZI8WCHAR last_element; 

							if ( Counter[keyboard->code] <ZiPinYinKeyMap[(keyboard->code)-1][5])
							{	tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
								//if last element is the previous char for this key
								last_element = data->Ime.pGetParam->pElements[data->Ime.pGetParam->ElementCount -1];
								//should put in check
								if (last_element== ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]-1])
								{	//MC e.g. if we're trying to enter 'I' and the last char was 'H'
									IMEClear(&data->Ime, data->Ime.pGetParam->pElements);/*remove last char from elements*/
									data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;/*this prevents display problems*/
								}
								/*so we can add the next char for this key*/
								IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]]);
								 Counter[keyboard->code]++; //increment counter
								tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
							}
						}
						
						data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
						winShow(win);
			    		break;
			    	default:
				       	break;
	    		}
			}
	       	break;
		case KCD_1:
		case KCD_2:
		case KCD_3:
		case KCD_4:
		case KCD_5:
		case KCD_6:
		case KCD_7:
		case KCD_9:	
			switch(data->Ime.EditorMode)
    		{
    			case STROKE_INPUT_MODE:
    				if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
					{	data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
						IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiStrokeKeyMap[keyboard->code][1] + ZI8_BASE_STROKES);
						data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
						winShow(win);
    				}
					break;
					
				case PINYIN_INPUT_MODE:
					if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
					{
						data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
						/*MC, multitap handling*/
						sprintf(debug, "Keypad Counter : %d",  Counter[keyboard->code]);
						TRACE_EVENT(debug);
						
						/*if time out or new key pressed*/		
						if ( Counter[keyboard->code] == 0)
						{	tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
							memset( Counter, 0, sizeof(char)*KCD_STAR);/*reset all key counters*/
							IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][0]);
							 Counter[keyboard->code]++; //increment counter
							tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
						}
						else /*if counter is less than MAX for that key*/
						{	ZI8WCHAR last_element; 

							if ( Counter[keyboard->code] <ZiPinYinKeyMap[(keyboard->code)-1][5])
							{	tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
								last_element = data->Ime.pGetParam->pElements[data->Ime.pGetParam->ElementCount -1];
								//should put in check
								//e.g. if last char was 'a' and we're entering 'b'
								if (last_element== ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]-1])
								{	IMEClear(&data->Ime, data->Ime.pGetParam->pElements);/*remove last char from elements*/
									data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;/*this prevents display problems*/
								}
								/*so we can add the next char for this key*/
								IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][ Counter[keyboard->code]]);
								 Counter[keyboard->code]++; //increment counter
								tim_start(data->KeyPad_Timer_Handle);/*restart timer*/
							}
						}
						//IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][/*0*/2]);
						data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
						winShow(win);
						}
					break;
		
		    	default:
			       	break;
			}
			break;
		case KCD_STAR:
			if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
			{
				switch(data->Ime.EditorMode)
	    		{
	    			case STROKE_INPUT_MODE:
	    			/* SPR#1428 - SH - New Editor uses new symbol selector */
#ifdef NEW_EDITOR
						AUI_symbol_Start(win, ADD_SYMBOL);
#else /* NEW_EDITOR */
	    				SymbolScreenstart(win, NULL);
#endif /* NEW_EDITOR */
						break;
					case PINYIN_INPUT_MODE:
						memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
					/* SPR#1428 - SH - New Editor uses new symbol selector */
#ifdef NEW_EDITOR
						AUI_symbol_Start(win, ADD_SYMBOL);
#else /* NEW_EDITOR */
	    				SymbolScreenstart(win, NULL);
#endif /* NEW_EDITOR */
						break;
			    	default:
				       	break;
				}
			}
			
			break;
	    case KCD_HASH:
	    if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
		{
	    	switch(data->Ime.EditorMode)
    		{
    		/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
				T_AUI_EDITOR_DATA	editor_data;
#else /* NEW_EDITOR */
    			T_EDITOR_DATA  editor_data;
#endif /* NEW_EDITOR */
    			case STROKE_INPUT_MODE:
    				data->Ime.EditorMode = PINYIN_INPUT_MODE;
					break;
				case PINYIN_INPUT_MODE:
					memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
					/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
					AUI_edit_SetDefault(&editor_data);
#else /* NEW_EDITOR */
					editor_attr_init(&editor_data.editor_attr, NULL, edtCurBar1, 0, 0, 0, 0);
					editor_data.hide									= FALSE;
					editor_data.TextId               = '\0';  
					editor_data.TextString           = NULL;  
					editor_data.timeout			  = FOREVER;  // Avoid to return empty strings
#endif /* NEW_EDITOR */			
					//set mode to stroke input when Latin editor exited
					data->Ime.EditorMode = STROKE_INPUT_MODE;
					/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
					AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT);
					AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, (UBYTE *)data->Callback_Data.TextString, data->Callback_Data.EditorSize*2 + 3);
					AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_BAR);
					AUI_edit_SetTextStr(&editor_data, TxtChinese, TxtDelete, TxtNull, NULL);
					AUI_edit_SetEvents(&editor_data, LATIN_INPUT, TRUE, FOREVER, (T_AUI_EDIT_CB)chinese_input_exec);
					AUI_edit_Start(data->input_win, &editor_data);
#else /* NEW_EDITOR */
					editor_data.editor_attr.text     = (char *)data->Callback_Data.TextString;  
					editor_data.editor_attr.size     = data->Callback_Data.EditorSize*2 + 3; 
					editor_data.min_enter						 = 0; 
	 				editor_data.mode = ALPHA_MODE;				
					editor_data.LeftSoftKey          = TxtChinese;
					editor_data.AlternateLeftSoftKey = TxtSoftBack;
					editor_data.RightSoftKey         = TxtDelete;
					editor_data.Identifier 			= LATIN_INPUT;
					editor_data.Callback             = (T_EDIT_CB)chinese_input_exec/*NULL*/;
					editor_data.destroyEditor 		 = TRUE;
					editor_start(data->input_win, &editor_data);
#endif /* NEW_EDITOR */
					break;
		    	default:
	    		
			       	break;
			}

	    	memset(&data->DisplayElementBuffer, 0,sizeof(data->DisplayElementBuffer));

	    	IMEChangeMode(&data->Ime,&data->GetParam);
	    	winShow(win);
	    }
			break;
	    default:
	       break;
	  }
	  return MFW_EVENT_CONSUMED;
}


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

 $Function:  	

 $Description:	
 $Returns:		

 $Arguments:	menu and menu item (neither used)
 
*******************************************************************************/
int chinese_input_menu(MfwMnu* m, MfwMnuItem* i)
{	
	T_MFW_HND       parent        = mfwParent( mfw_header() );
    chinese_input( parent, NULL );
    return MFW_EVENT_CONSUMED;
}


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

 $Function:    	IMEChangeMode

 $Description:	This function change some of the setting when user selected to use 
                different input method. E.g change from Stroke to Pin-yin input.

 $Returns:		void

 $Arguments:	

*******************************************************************************/
void IMEChangeMode(PIME_DATA pIME, PZI8GETPARAM pGetParam)
{
	/* First initialize the members that will be constant */
	switch(pIME->EditorMode)
    {
    	case STROKE_INPUT_MODE:
			pGetParam->Language			= ZI8_LANG_ZH;
			pGetParam->GetMode			= ZI8_GETMODE_STROKES;
			pGetParam->SubLanguage		= ZI8_SUBLANG_ZH;
			/*MC, check size of editor to work out context*/
			if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
				pGetParam->Context		= ZI8_GETCONTEXT_SURNAME;
			else
				pGetParam->Context		= ZI8_GETCONTEXT_SMS;
			pGetParam->GetOptions		= ZI8_GETOPTION_ALLCOMPONENTS;
			break;
		case PINYIN_INPUT_MODE:
			pGetParam->Language			= ZI8_LANG_ZH;
			pGetParam->GetMode			= ZI8_GETMODE_PINYIN;
			pGetParam->SubLanguage		= ZI8_SUBLANG_ZH/*ZI8_SUBLANG_ZH_ALL*/;
			/*MC, check size of editor to work out context*/
			if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
				pGetParam->Context		= ZI8_GETCONTEXT_SURNAME;
			else
				pGetParam->Context		= ZI8_GETCONTEXT_SMS;
			pGetParam->GetOptions		= ZI8_GETOPTION_NOCOMPONENTS/*ZI8_GETOPTION_SAMESOUND*/;
			break;
		case LATIN_INPUT_MODE:
			pIME->InputScreenType = TEXT_DISPLAY_SCREEN;
			break;
		default:
		   	break;
	}
	pIME->InputScreenType = TEXT_DISPLAY_SCREEN;
	memset(pGetParam->pElements, 0, sizeof(pGetParam->pElements));
	memset(pIME->pDisplayElementBuffer, 0,sizeof(pIME->pDisplayElementBuffer));
	/* save the pointer to the ZI8GETPARAM structure in the IME data */
	pIME->pGetParam				= pGetParam;
	/* now initialize the text buffer and element buffer */
	pIME->moreCount				= 0;
	pGetParam->ElementCount 	= 0;
	/* initilalize the WordCharacterCount to zero */
	pGetParam->WordCharacterCount = 0;
	/* initialize the saved number of candidates to zero */
	pIME->candidates = 0;
	/* initialize the candidate cursor to zero */
	pIME->CandidateCursor = 0;
}


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

 $Function:    	IMEInitialize

 $Description:	This function initializes the ZI8GETPARAM structure defined in the API 
 				and the various members of the IME_DATA structure defined in to keep 
 				track of the IME.

 $Returns:		void

 $Arguments:	

*******************************************************************************/
/*void IMEInitialize(PIME_DATA pIME, PZI8GETPARAM pGetParam, PZI8WCHAR wszTextBuffer, int TextBufferEditSize,
				 int TextBufferSize, PZI8WCHAR pCandidates)*/
void IMEInitialize(PIME_DATA pIME, PZI8GETPARAM pGetParam, PZI8WCHAR wszTextBuffer,
                  int TextBufferEditSize, int TextBufferSize, PZI8WCHAR pCandidates, 
                  PZI8WCHAR wszElementBuffer, PZI8WCHAR DisplayElementBuffer)
{
	pIME->EditorMode			= STROKE_INPUT_MODE;
	/* First initialize the members that will be constant */
	switch(pIME->EditorMode)
    {
    	case STROKE_INPUT_MODE:
			pGetParam->Language			= ZI8_LANG_ZH;
			pGetParam->GetMode			= ZI8_GETMODE_STROKES;
			pGetParam->SubLanguage		= ZI8_SUBLANG_ZH;
						/*MC, check size of editor to work out context*/
			if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
				pGetParam->Context		= ZI8_GETCONTEXT_SURNAME;
			else
				pGetParam->Context		= ZI8_GETCONTEXT_SMS;

			pGetParam->GetOptions		= ZI8_GETOPTION_ALLCOMPONENTS;
			break;
		case PINYIN_INPUT_MODE:
			pGetParam->Language			= ZI8_LANG_ZH;
			pGetParam->GetMode			= ZI8_GETMODE_PINYIN;
			pGetParam->SubLanguage		= ZI8_SUBLANG_ZH;
			if (TEXT_BUFFER_EDIT_SIZE <= MAX_PHONEBOOK_ENTRY_SIZE)
				pGetParam->Context		= ZI8_GETCONTEXT_SURNAME;
			else
				pGetParam->Context		= ZI8_GETCONTEXT_SMS;
			pGetParam->GetOptions		= ZI8_GETOPTION_NOCOMPONENTS/*ZI8_GETOPTION_SAMESOUND*/;
			break;
		case LATIN_INPUT_MODE:
			break;
		default:
		   	break;
	}
	/* save the pointer to the ZI8GETPARAM structure in the IME data */
	pIME->pGetParam				= pGetParam;
	/* now initialize the text buffer and element buffer */
	pIME->pTextBuffer			= wszTextBuffer;
	pIME->TextBufferEditSize	= TextBufferEditSize;
	pIME->TextBufferSize		= TextBufferSize;
	pIME->moreCount				= 0;
	pIME->TextBufferCount 		= Uni_strlen(wszTextBuffer);;
	pIME->TextCursor 			= pIME->TextBufferCount;
	pIME->pDisplayElementBuffer	= DisplayElementBuffer;
	pIME->InputScreenType

⌨️ 快捷键说明

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