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

📄 mmichineseinput.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:

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

 $Function:    	chinese_input_kbd_cb

 $Description:	Keyboard event handler

 $Returns:		status int

 $Arguments:	window handle event, keyboard control block

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

static int chinese_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_chinese_input	* 	data 		= (T_chinese_input *)win_data->user;
  	T_MFW_HND       	parent_win 	= data->parent_win;
  	USHORT          	Identifier 	= data->Identifier;
  	int					temp = 0;
  	char debug[30];
//  	void (* Callback)() = data->Callback;

  	TRACE_EVENT("chinese_input_kbd_cb");
sprintf(debug, "Counters %d:%d:%d:%d:%d:%d",  Counter[0],  Counter[1],  Counter[2],  Counter[3],
	 Counter[4],  Counter[5]);
TRACE_EVENT(debug);

  	switch (keyboard->code)
  	{
    	case KCD_LEFT:
    		switch(data->Ime.EditorMode)
    		{
    			case STROKE_INPUT_MODE:
		    		switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				//access to the option list.
						SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_LEFT, NULL);
		       				break;
		       			case STROKE_INPUT_SCREEN:
		       			case WORD_ASSOCIATION_SCREEN:
		       				IMESelectCandidate(&data->Ime, data->wszElementBuffer);
		       				data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		       				break;
			    		default:
			       			break;
		    		}
		    		winShow(win);
		    		break;
		    	
		    	case PINYIN_INPUT_MODE:
		    		switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_LEFT, NULL);
		    				//access to the option list.
		       				break;
		       			case PINYIN_INPUT_SCREEN:
		       			case WORD_ASSOCIATION_SCREEN:
		       				memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
		       				IMESelectCandidate(&data->Ime, data->wszElementBuffer);
		       				data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];

		       				break;
			    		default:
			       			break;
		    		}
		    		winShow(win);
		    	default:
			       	break;
    		}

       		break;
	    case KCD_RIGHT:
	    	switch(data->Ime.EditorMode)
    		{
    			case STROKE_INPUT_MODE:
			    	switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				if(data->Ime.TextBufferCount == 0)
							{	/* When there is no stored data, return back to the menu*/
								//GW-SPR-#1068-Destroy using event - execute callback of the function that created the editor	
								SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_RIGHT, NULL);
							}
		    				else
		    				{
		    					IMEClear(&data->Ime, data->wszElementBuffer);
		    				}
		       				break;
		       			case STROKE_INPUT_SCREEN:
		       				IMEClear(&data->Ime, data->wszElementBuffer);
		       				data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		       				break;
		       			case WORD_ASSOCIATION_SCREEN:
		       				data->Ime.InputScreenType = TEXT_DISPLAY_SCREEN;
		       				break;
			    		default:
			       			break;
			  		}
			    	winShow(win);
			    	break;
		    	case PINYIN_INPUT_MODE:
		    		switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				if(data->Ime.TextBufferCount == 0)
							{	/* When there is no stored data, return back to the menu*/
								//GW-SPR-#1068-Destroy using event - execute callback of the function that created the editor	
								SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_RIGHT, NULL);
							}
		    				else
		    				{
		    					IMEClear(&data->Ime, data->wszElementBuffer);
		    					data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		    				}
		       				break;
		       			case PINYIN_INPUT_SCREEN:
		       				memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
		       				IMEClear(&data->Ime, data->wszElementBuffer);
		       				data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		       				break;
		       			case WORD_ASSOCIATION_SCREEN:
		       				data->Ime.InputScreenType = TEXT_DISPLAY_SCREEN;
		       				break;
			    		default:
			       			break;
		    		}
		    		winShow(win);
		    		break;
	
		    	default:
			       	break;
    		}	
	       	break;
	    case KCD_HUP:
			//GW-SPR-#1068-Destroy using event - execute callback of the function that created the editor	
			SEND_EVENT(win, CHINESE_INPUT_DEINIT/*SPR 1752*/, INFO_KCD_HUP, NULL);
	       	break;
	    case KCD_MNUUP:
	    	switch(data->Ime.EditorMode)
    		{
    			case STROKE_INPUT_MODE:
			    	switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				//update the text cursor
		    				if(data->Ime.TextCursor > 0 && data->Ime.TextCursor <= data->Ime.TextBufferCount)
		    				{
		    					data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor - 1];
		    					data->Ime.TextCursor--;
		    				}
		    #ifdef LSCREEN /*SPR 1319 move left along editor*/
		    /* SPR#1428 - SH - New Editor changes */
		 	#ifdef NEW_EDITOR
		 					ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);
		 	#else /* NEW_EDITOR */
		    				edtChar(data->editor, ecLeft);
		    #endif /* NEW_EDITOR */
		    #endif
		    				break;
		       			case STROKE_INPUT_SCREEN:
		       			case WORD_ASSOCIATION_SCREEN:
		       				IMECursorLeft(&data->Ime);
							data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		       				break;
			    		default:
			       			break;
			  		}
			    	winShow(win);
			        break;
		
			  	case PINYIN_INPUT_MODE:
			  		switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				//update the text cursor
		    				if(data->Ime.TextCursor > 0 && data->Ime.TextCursor <= data->Ime.TextBufferCount)
		    				{
		    					data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor - 1];
		    					data->Ime.TextCursor--;
	   
		    				}
		#ifdef LSCREEN/*SPR 1319 move left along editor*/
		/* SPR#1428 - SH - New Editor changes */
		#ifdef NEW_EDITOR
							ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE);
		#else /* NEW_EDITOR */
		    				edtCharUnicode(data->editor, ecLeft);
		#endif /* NEW_EDITOR */
		#endif
		       				break;
		       			case PINYIN_INPUT_SCREEN:
		       			case WORD_ASSOCIATION_SCREEN:
		       				memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
		       				IMECursorLeft(&data->Ime);
							data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		       				break;
			    		default:
			       			break;
		    		}
			  		winShow(win);
		    		break;
		    	default:
			       	break;
    		}	
	       	break;
	    case KCD_MNUDOWN:
	    	switch(data->Ime.EditorMode)
    		{
    			case STROKE_INPUT_MODE:
					switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				//update the text cursor 
		    				if(data->Ime.TextCursor < data->Ime.TextBufferCount)
		    				{
		    					data->Ime.TextCursor++;
		    					data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor];
		    					
		    				}
#ifdef LSCREEN/*SPR 1319 move right along editor*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
							ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
#else /* NEW_EDITOR */
		    				edtCharUnicode(data->editor, ecRight);
#endif /* NEW_EDITOR */
#endif
		    				break;
		       			case STROKE_INPUT_SCREEN:
		       			case WORD_ASSOCIATION_SCREEN:
		       				IMECursorRight(&data->Ime);
			    			data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		       				break;
			    		default:
			       			break;
			  		}
			    	winShow(win);
			        break;
			  
	        	case PINYIN_INPUT_MODE:
	        		switch (data->Ime.InputScreenType)
					{
		    			case TEXT_DISPLAY_SCREEN:
		    				//update the text cursor 
		    				if(data->Ime.TextCursor < data->Ime.TextBufferCount)
		    				{
		    					data->Ime.TextCursor++;
		    					data->CursorPosition[0] = data->wszTextBuffer[data->Ime.TextCursor];		    					
		    				}
#ifdef LSCREEN	/*SPR 1319 move right  along editor*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
							ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
#else /* NEW_EDITOR */
		    				edtCharUnicode(data->editor, ecRight);
#endif /* NEW_EDITOR */
#endif
		       				break;
		       			case PINYIN_INPUT_SCREEN:
		       			case WORD_ASSOCIATION_SCREEN:
		       				memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
		       				IMECursorRight(&data->Ime);
			    			data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
		       				break;
			    		default:
			       			break;
		    		}
	        		winShow(win);
		    		break;
		    	default:
			       	break;
    		}	
	       	break;
	    case KCD_CALL:
			break;
		case KCD_0:
			if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
			{
				switch(data->Ime.EditorMode)
	    		{
	    			case STROKE_INPUT_MODE:
		        		data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
						IMEMore(&data->Ime);
						data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
						winShow(win);
			    		break;
			    	case PINYIN_INPUT_MODE:
			    		memset( Counter, 0, sizeof(char)*KCD_STAR);/*MC set counters to 0*/
			    		data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
			    		IMEMore(&data->Ime);
						data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
						winShow(win);
			    		break;
			 
			    	default:
				       	break;
	    		}
			}
	       	break;
		case KCD_8:
			if (data->Ime.TextBufferCount < TEXT_BUFFER_EDIT_SIZE)/*MC*/
			{
				switch(data->Ime.EditorMode)
	    		{
	    			case STROKE_INPUT_MODE:
		        		data->Ime.InputScreenType = STROKE_INPUT_SCREEN;
						IMEMore(&data->Ime);
						data->HighlightedCandidate[0] = data->wcCandidates[data->Ime.CandidateCursor];
						winShow(win);
			    		break;
			    	case PINYIN_INPUT_MODE:
						data->Ime.InputScreenType = PINYIN_INPUT_SCREEN;
						/* The unclear of eZiText document, it is assumed that multi-key press may required to get to the required letter */
						/* To do that a ZiPinYinKeyMap array is defined in ChineseInput.h header file.                                 */
						/* When number of keypress from the user is given from the keypad hadler, the key press count can then be    */
						/* used to work out the relevent code to insert into the element buffer for eZiText search. The variable          */
						/* data->NumberOfKeyPress is decleared to store the key press count. 								  */

						//temp = data->NumberOfKeyPress % ZiPinYinKeyMap[(keyboard->code)-1][5];
						//IMEKeyPress(&data->Ime, (ZI8WCHAR) ZiPinYinKeyMap[(keyboard->code)-1][temp - 1]);

						/* due to not able to receive key press count, it is assume the first letter assign to the key is selected when key */
						/* is pressed.	*/
						/*MC, multitap handling*/
						/*if time out or new key pressed*/
						sprintf(debug, "Keypad Counter : %d",  Counter[keyboard->code]);
						TRACE_EVENT(debug);
						if ( Counter[keyboard->code] == 0)
						{	tim_stop(data->KeyPad_Timer_Handle);/*stop timer*/
							memset( Counter, 0, sizeof(char)*KCD_STAR);/*reset all key counters*/

⌨️ 快捷键说明

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