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

📄 mmieditor.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                    break;                                     /* editor mode                                         */
                case DIGITS_MODE:
                    if ( data->editor_data.hide )              /* if hide is set, show '*' instead of numbers.        */
                        editor_hideInit(data);                 /* initialize editor for hide                          */
                    data->edt_mode          = E_NORMAL_MODE;   /* if editor is not called in T9 mode, set the normal  */
                win_show(data->edt_win);
                edtChar(data->edt_edt,ecBottom);              /* in read-only mode set cursor to begin               */
                    break;                    /* editor mode                                         */
                case CALC_MODE:
                    data->editor_data.hide  = FALSE;           /* don't allow hide for other modes than DIGITS_MODE.  */
                    data->edt_mode          = E_NORMAL_MODE;   /* if editor is not called in T9 mode, set the normal  */
                win_show(data->edt_win);
                edtChar(data->edt_edt,ecBottom);
                    break;
        case PIN_SECURITY:
                    if ( data->editor_data.hide )              /* if hide is set, show '*' instead of numbers.        */
                        editor_hideInit(data);                 /* initialize editor for hide                          */
                    data->edt_mode          = E_PIN_SECURITY;   /* spec. handling for PIN entering  */
          data->emergency_call = FALSE;
          data->ss_string = FALSE;
                win_show(data->edt_win);
                edtChar(data->edt_edt,ecBottom);
                    break;
        case FORMAT_MODE:
          if ( data->editor_data.hide )              /* if hide is set, show '*' instead of numbers.        */
                    {
                        editor_hideInit(data);                 /* initialize editor for hide                          */
                        editHiddenActivate(data->tmpBuf);   /* initialise multi-tap for hide */
                    }
          data->editor_data.editor_attr.mode |= edtModOverWr; // Must be overwrite mode
          data->edt_mode    = E_NORMAL_MODE;
          win_show(data->edt_win);
          edtChar(data->edt_edt,ecTop);         // Cursor is at start of string
          data->editor_data.formatIndex = -1;         // Current format character.  -1; increased to 0 in editCharFindNext below.
          data->editor_data.fieldIndex = 0;

          // Skip over any fixed characters that may be at start
          setFormatPointers (data->editor_data.FormatString, &(data->editor_data.formatIndex), &(data->editor_data.fieldIndex));
          TRACE_EVENT("Starting format mode");
          editCharFindNext(NULL);
          break;
                }
            // end KGT

            // c015 rsa
            /* create the timer handler */
            if ( data->editor_data.timeout && (data->editor_data.timeout NEQ FOREVER))
                {
                    data->edt_tim      = tim_create (data->edt_win, data->editor_data.timeout, (T_MFW_CB)editor_tim_cb);
                    tim_start (data->edt_tim);
                }
            else
                {
                    data->edt_tim      = NULL;
                }
            
            //GW-SPR#1035-Added SAT changes from 33x build.
			/*NM, 090702 
			  why ? : for SAT application
			  this checks does the label fit on the first screen line ( <14chars) ;
			  if not so open a second editor and show up the whole
			  label (in Read_only_mode).
			  Pressing any key returns back to the main editor
			*/
      		if ( strlen(data->LabelText) >= MAX_LINE )
      		{
      			/* need this flag later in the callback of key_handler */
				over_length_label = TRUE;
				
				editor_attr_init(&editor_label.editor_attr, NULL, edtCurBar1, 0, (char *)data->LabelText, strlen(data->LabelText), COLOUR_EDITOR);
				editor_data_init(&editor_label, NULL, TxtNull, TxtNull, 0, 1, READ_ONLY_MODE, FOREVER);

				editor_start(win,&editor_label);  /* start the editor */
       		}
       		/*NM, 090702 END */

            break;

        case E_EDITOR_DEINIT:
            /* on DEINIT => selfdestroy; sendevent <value> */

          if (Callback)
            (Callback) (parent_win, Identifier, value);

			over_length_label =  FALSE; //GW-SPR#1035

      // MZ Destroy the text edit window after creating the number editor.
      if(data->destroyEditor == TRUE)
              	editor_destroy (data->edt_win);
      break;
      
#ifdef EASY_TEXT_ENABLED
    case E_EDITOR_UPDATE:
        if (SymbolChar != '\0')
            { 
                edtShow(data->edt_edt);
                edtChar(data->edt_edt, SymbolChar);
                 if ((SymbolChar == '.') ||(SymbolChar == '!') || (SymbolChar == '?'))
                {
                  edtChar(data->edt_edt, ' ');
                }

                win_show(data->edt_win);
            }
        break;
#endif
	/*SPR 1392, move cursor to end of editor string*/
	 case E_EDITOR_CURSOR_END:
		edtChar(data->edt_edt, ecBottom);
	 break;
        default:
            break;
        }
}
/*******************************************************************************

 $Function:     editor_win_cb

 $Description:  Editor window event handler.

 $Returns:    None.

 $Arguments:  None.

*******************************************************************************/
static int editor_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    T_EDITOR_INFO * data = (T_EDITOR_INFO *)win->user;
	int xPos,yPos;
	{
		char dbg[80];
		sprintf(dbg,"editor_win_cb()-event=%d",event);
  	  	TRACE_FUNCTION (dbg);
    }


    if (data->edt_edt!=activeEditor())
    	editActivate(data->edt_edt,data->editor_data.mode);

  	// SH - hidden mode
  	if (data->editor_data.hide)
    	editHiddenActivate(data->tmpBuf);
    // end hidden mode

    if (data EQ 0)
    {
    	TRACE_FUNCTION ("editor_win_cb()-no data");
        return MFW_EVENT_CONSUMED;
	}
    switch (event)
        {
        case E_WIN_VISIBLE: /* window is visible  */
            if (win->flags & E_WIN_VISIBLE)
          	{
                /*
                 * Clear Screen
                 */
                dspl_ClearAll();

                /*
                 * Print the information
                 */
#ifdef EASY_TEXT_ENABLED
				if(AllowPredText == TRUE && FFS_flashData.PredTextSelected == TRUE)
                {
                	dspl_BitBlt(SCREEN_SIZE_X-9,0,8,8,0,(char*)TextIconeZiTextSmall,0);
           		}
#endif

                edtShow(data->edt_edt);
                /*
                 * Print the label
                 */
      			//GW Removed T9 reference
      			//GW Actually remove T9 ref, not code executed when T9 not enabled.
      			if (data->editor_data.editor_attr.win.px > 0)
					xPos = data->editor_data.editor_attr.win.px;
      			else
					xPos = editor_menuArea.px;
      			if (data->editor_data.editor_attr.win.py > Mmi_layout_TitleHeight())
                    yPos = data->editor_data.editor_attr.win.py-Mmi_layout_TitleHeight();
      			else
                    yPos = editor_menuArea.py;

      			if (data->editor_data.TextId NEQ 0)
      			{
        			dspl_TextOut(xPos,yPos,DSPL_TXTATTR_CURRENT_MODE, (char*)MmiRsrcGetText(data->editor_data.TextId));
                }
                else if (data->editor_data.TextString NEQ NULL)
                {
        			dspl_TextOut(xPos,yPos,0,data->LabelText);
                }
                /*
                 * Print the softkeys
                 */
                if (data->edt_mode != E_PIN_SECURITY)
                {
#ifdef EASY_TEXT_ENABLED
                    if (data->editor_data.editor_attr.predText[0] != '\0' && FFS_flashData.PredTextSelected == TRUE)
                    	softKeys_displayId(TxtSoftOK, TxtDelete,0,COLOUR_EDITOR_XX);
                  	else
#endif
               		{
                        if (strlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter)
                        {
             				/* entered less than the required number of chars: Alternate Softkey appears */
               				softKeys_displayId(data->editor_data.AlternateLeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
                		}
                        else
               			{
              				/* entered sufficient number of chars: Normal Softkey appears */
                  			softKeys_displayId(data->editor_data.LeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
             			}
          			}
                }
                else
                {
		            if (data->emergency_call EQ TRUE)
		            {
		            	softKeys_displayId(TxtSoftCall, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);
		            	TRACE_EVENT ("softkeys , call, delete");
		            }
		            else
		            {
		         		//no emergency_call
                 		if (strlen(data->editor_data.editor_attr.text) < data->editor_data.min_enter)
                		{


                  			if (strlen(data->editor_data.editor_attr.text) EQ 0)
                        		softKeys_displayId(data->editor_data.AlternateLeftSoftKey, TxtNull,0,COLOUR_EDITOR_XX);
                       		else
                      			softKeys_displayId(data->editor_data.AlternateLeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);

                      		TRACE_EVENT ("softkeys , altern, delete");
               			}
                    	else
                      	{
                 	 		if (strlen(data->editor_data.editor_attr.text) EQ 0)
                            	softKeys_displayId(data->editor_data.AlternateLeftSoftKey, TxtNull,0,COLOUR_EDITOR_XX);
                          	else
                            	softKeys_displayId(data->editor_data.LeftSoftKey, data->editor_data.RightSoftKey,0,COLOUR_EDITOR_XX);

                          	TRACE_EVENT ("softkeys , ok, delete");
						}
					}
				}

            }
            break;
        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;
    char* PredText = data->editor_data.editor_attr.predText;
  unsigned int editMode;
  char debug[25];
  char temp[80];
    TRACE_FUNCTION("editor_kbd_cb");


    /* 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

    editMode = data->edt_mode;

    sprintf(temp, "Editor mode: %d", editMode);
    TRACE_EVENT(temp);
    
#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_NORMAL_MODE:



            if (event & KEY_LONG)
                {
					TRACE_EVENT("event and long key");

                    switch (keyboard->code)
                        {
                        case KCD_CALL:
                            SEND_EVENT (win, E_EDITOR_DEINIT, INFO_KCD_CALL, NULL);                        	
                        	break;
                        case KCD_LEFT:
                            break;
                        case KCD_MNURIGHT:
                        case KCD_MNUUP:
                            if (data->editor_data.mode NEQ READ_ONLY_MODE &&
                                !data->editor_data.hide )
                            break;
                        case KCD_RIGHT:
						  TRACE_EVENT("KCD_RIGHT");						  
                          // SH - special clear all for format mode

                          if (data->editor_data.mode EQ FORMAT_MODE)
                            {
                            editClear();
                            }

                          // SH - End of format mode modification

                            else if(data->editor_data.editor_attr.text[0] NEQ '\0')
                                {
                                    /* clear the whole buffer */
                                    if ( data->editor_data.hide )
                                        editor_hideClearAll(data);
                                    else
                                        {
                                            data->editor_data.editor_attr.text[0] = '\0';
                                            edtChar(data->edt_edt, ecTop);
                                            if (data->editor_data.min_enter > 0)

⌨️ 快捷键说明

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