mmivoicememo.c

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

C
1,832
字号
    win_data                   = ((T_MFW_HDR *)data->info_win)->data;
    win_data->user             = (void *)data;

    data->info_tim = tim_create (data->info_win, 1000, (T_MFW_CB)voice_memo_tim_cb);
    data->animation_timer= tim_create (data->info_win, 500, (T_MFW_CB)voice_memo_tim_animation_cb);/*2004/05/19 yhf modify*/
    data->info_kbd = kbd_create (data->info_win, KEY_ALL, (T_MFW_CB)voice_memo_kbd_cb);
    dynamic_Phonebook_win=data->info_win;

    return data->info_win;
}


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

 $Function:     voice_memo_destroy

 $Description:  Destruction of an dialog

 $Returns:    void

 $Arguments:  win

*******************************************************************************/
void voice_memo_destroy (T_MFW_HND own_window)
{
    T_MFW_WIN     * win  = ((T_MFW_HDR *)own_window)->data;
    T_voice_memo   * data   = (T_voice_memo *)win->user;

    TRACE_FUNCTION ("voice_memo_destroy()");

    if( data )
    {
        if( call_data.win_voicerecord&&call_data.win )
        {
            call_data.win_voicerecord=0;//zy 2003-04-01 set this data to zero
        }
        kbd_delete (data->info_kbd);
        tim_delete(data->animation_timer);/*2004/05/19 yhf */   
        tim_delete (data->info_tim);        
        win_delete (data->info_win);
        data->info_win=0;

        if( (data->Identifier==VM_RECORD)||(data->Identifier==VM_RECORDCALL) )
            SetVoiceMenuWindow(0);
        if( data->Identifier==VM_BROWSER )
            ClearWindowHandle();
        driverFlag&=0xfffffffe;
        // Free Memory     
        needback=0;
        FREE_MEMORY ((void *)data, sizeof (T_voice_memo));
    }
}



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

 $Function:     voice_memo

 $Description:  Dialog function for voice memo dialog

 $Returns:    void

 $Arguments:  win, window handle event, value, parameter

*******************************************************************************/
/*
void voice_memo_dialog (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
  T_MFW_WIN      * win_data     = ((T_MFW_HDR *)win)->data;
  T_voice_memo    * data         = (T_voice_memo *)win_data->user;

    T_DISPLAY_DATA display_info;

  data->Identifier = value;

  TRACE_FUNCTION ("voice_memo()");

  switch (event)
  {
    case VM_INIT:    	
    {
          TRACE_EVENT ("VM_INIT()");           
          // Create timer and keyboard handler
       
        data->info_tim = tim_create (win, 1000, (T_MFW_CB)voice_memo_tim_cb);
        data->info_kbd = kbd_create (win, KEY_ALL, (T_MFW_CB)voice_memo_kbd_cb);

          switch ( value )
          {
            case VM_PLAY:
            {
                 TRACE_EVENT ("VM_PLAY()");

               //check the voicememo buffer
              if (FFS_flashData.voice_memo_position EQ 0)
              {
                display_info.KeyEvents   = KEY_CLEAR | KEY_RIGHT | KEY_LEFT;
                display_info.LeftSoftKey  = '\0';
                display_info.RightSoftKey = '\0';
                display_info.TextString   = '\0';
                display_info.TextString2  = '\0';
                display_info.TextId2     = TxtRecording;
                display_info.TextId      = TxtEmpty;
                display_info.Time       = THREE_SECS;
                display_info.Callback    = (T_VOID_FUNC)voice_memo_dialog_cb;
                   
                // Call Info Screen			           
                info_dialog (win, &display_info);
              }
               else
               {
                 //start the second timer
                 data->time = 0;
                 tim_start (data->info_tim);

                 //start playback
                 //csf_vm_play(0);
                 StartPlayVmRecord();
               } 
            }	
            break;
            case VM_RECORD:
            {
                 TRACE_FUNCTION ("VM_RECORD()");

              if (FFS_flashData.voice_memo_position >= VOICE_MEMORY_FULL)
              {
                TRACE_EVENT ("memory full ");

                //play Keybeep
                audio_PlaySoundID(0, TONES_KEYBEEP, 200, 0 );

                display_info.KeyEvents    = KEY_CLEAR | KEY_RIGHT | KEY_LEFT;
                display_info.LeftSoftKey  = '\0';
                display_info.RightSoftKey = '\0';
                display_info.TextString   = '\0';
                display_info.TextString2  = '\0';
                display_info.TextId2     =TxtRecording;
                display_info.TextId      = TxtFull;
                display_info.Time       = THREE_SECS;
                display_info.Callback     = (T_VOID_FUNC)voice_memo_dialog_cb;			          
                // Call Info Screen
                    
                info_dialog (win, &display_info);
              }
              else
              {
                //start the second timer
                data->time = 0;
                tim_start (data->info_tim);
                TRACE_EVENT("Start Record");
                //start the record
                
                StartVmRecord(VmRecordCB,"/vmrecord");
                //csf_vm_record_2 (FFS_flashData.voice_memo_position);
              }
            }	
            break;
            default: break;
          }           
          win_show (win);
    }
    break;  
    case VM_DELETE_BUFFER://if the user selected to clear the Voicememo buffer
    {
         display_info.KeyEvents    = KEY_CLEAR | KEY_RIGHT | KEY_LEFT;
         display_info.LeftSoftKey  = '\0';
         display_info.RightSoftKey = '\0';
         display_info.TextString   = '\0';
         display_info.TextString2  = '\0';
         display_info.TextId2     = 0;
         display_info.Time       = THREE_SECS;
         display_info.TextId     = TxtDeleted;
         display_info.Callback     = (T_VOID_FUNC)voice_memo_dialog_cb;	      
         // Call Info Screen	       
         info_dialog (win, &display_info);
    }
    break;
    case VM_DESTROY:
    {
          voice_memo_destroy(win);
    }      
    break;
    default: break;
  }
}
*/
/*******************************************************************************

 $Function:     voice_memo_win_cb

 $Description:  Callback function for information dialog

 $Returns:    void

 $Arguments:  window handle event, win
*******************************************************************************/
static int voice_memo_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    T_voice_memo * data = (T_voice_memo *)win->user;
    UINT32 f_color;
    TRACE_FUNCTION ("voice_memo_win_cb()");


    if( data EQ 0 ) return 1;

    switch( event )
    {
    case E_WIN_VISIBLE:
        {
            if( win->flags & E_WIN_VISIBLE )
            {
                dspl_ClearAll();//Clear Screen
                sprintf(data->elapsed_time,"%02d sec", data->time); 

                if( data->Identifier==VM_RECORD || data->Identifier==VM_RECORDCALL )
                {
					// Print the information screen     
                    draw_special_background();/*2004/1/19, wangyan modify*/
                    /* 2004/06 sunsj modify for picture manage */
#if(MAIN_LCD_SIZE==3)					
					DRAW_ICON_SEL(ICON_RECORDICON,data->time%3);//徐建华
#endif
#if(MAIN_LCD_SIZE==4)
                    DRAW_ICON_SEL(ICON_VOICEMEMO_WIN, 0);
#endif
                    DRAW_ICON_SEL(ICON_VOICEMEMO_WIN, 1);

                    //               ALIGNED_PROMPT(LEFT,Mmi_layout_first_line(),0, TxtRecording);            
                    ALIGNED_PROMPT(CENTER,8,DSPL_TXTATTR_TRANSPARENT, TxtRecording);            
                    // Print the elapsed time             
                    //displayAlignedText(LEFT, Mmi_layout_second_line(), 0, data->elapsed_time);     
                    displayAlignedText(CENTER, Mmi_layout_second_line(), 0, data->elapsed_time);     
                    //              dspl_BitBlt(5, 80, 110, 20,0, (void *)record_bmp, 0);
                    // Print softkeys             
                    displaySoftKeys(TxtStop, TxtCancel);   

                }
                else if( data->Identifier==VM_RECORDCALL )
                {
                    draw_special_background();/*2004/1/19, wangyan modify*/
                    /* 2004/06 sunsj modify for picture manage */
#if(MAIN_LCD_SIZE==3)					
					DRAW_ICON_SEL(ICON_RECORDICON,data->time%3);//徐建华
#endif
#if(MAIN_LCD_SIZE==4)
                    DRAW_ICON_SEL(ICON_VOICEMEMO_WIN, 0);
#endif
                    DRAW_ICON_SEL(ICON_VOICEMEMO_WIN, 1);

                    //    ALIGNED_PROMPT(LEFT,Mmi_layout_first_line(),0, TxtRecording);            
                    ALIGNED_PROMPT(CENTER,8,DSPL_TXTATTR_TRANSPARENT, TxtRecording);            
                    //          displayAlignedText(LEFT, Mmi_layout_second_line(), 0, data->elapsed_time);  
                    displayAlignedText(CENTER, Mmi_layout_second_line(), 0, data->elapsed_time);  
                    //          dspl_BitBlt(5, 80, 110, 20,0, (void *)record_bmp, 0);
                    displaySoftKeys(TxtStop, TxtCancel);   
                }

/*#if(MAIN_LCD_SIZE==3)//jhxu720
				if (needback)
				{
					needback=0;
					displaySoftKeys(TxtSave, TxtSoftBack);
					f_color=dspl_SetBkgColor(0xFFA402);
					dspl_fill_rectangle(7,83,7+data->time*5,88);
					dspl_SetBkgColor(f_color);
				}
                
#elif(MAIN_LCD_SIZE==4)*/
			if( needback )
                {
                    needback=0;
                    displaySoftKeys(TxtSave, TxtSoftBack);
                    /*               f_color=dspl_SetBkgColor(0xFFA402);
                    dspl_fill_rectangle(7,83,7+data->time*5,88);
                    dspl_SetBkgColor(f_color);*/
                    /* 2004/06 sunsj modify for picture manage */
#if(MAIN_LCD_SIZE==4)
					DRAW_ICON_ATTRIBUTE(ICON_VOICEMEMO_WIN, 19+3*(data->time-1), 55, 2, ICON_LOCATION);
#elif (MAIN_LCD_SIZE==3)
					DRAW_ICON_ATTRIBUTE(ICON_VOICEMEMO_WIN, 19+3*(data->time-1), 52, 2, ICON_LOCATION);
#endif
                }	
//#endif
            }
        }      
        break;
    default:
		return 0;
    }
    return 1;
}

/* 2004/05/18 yhf modify */
static T_MFW_CB voice_memo_tim_animation_cb (T_MFW_EVENT event, T_MFW_TIM *tc)
{
    T_MFW_HND       win  = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
    T_voice_memo   * data = (T_voice_memo *)win_data->user;


    timStop(data->animation_timer);
    timStart(data->animation_timer);

    if( data->current_frame < 3 )
    {
        data->current_frame++;
    }
    else
    {
        data->current_frame = 0;
    }
#if(MAIN_LCD_SIZE==4)
    DRAW_ICON_SEL(ICON_VOICEMEMO_ANIM, data->current_frame%3);
#endif

    /*
    switch(data->current_frame%3)
    {
    case 0:
        dspl_BitBlt(75, 68, 17, 27, 0, (void *)memo_animation1, 0);
        break;
    case 1:
        dspl_BitBlt(75, 68, 17, 27, 0, (void *)memo_animation2, 0);  		
        break;
    case 2:
        dspl_BitBlt(75, 68, 17, 27, 0, (void *)memo_animation3, 0);  		
        break;
    }
    */
}

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

 $Function:     voice_memo_tim_cb

 $Description:  Callback function for the voice_memo timer.


 $Returns:    MFW event handler

 $Arguments:  window handle event, timer control block

*******************************************************************************/
static T_MFW_CB voice_memo_tim_cb (T_MFW_EVENT event, T_MFW_TIM *tc)
{
    T_MFW_HND       win  = mfw_parent (mfw_header());
    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
    T_voice_memo   * data = (T_voice_memo *)win_data->user;

    T_RTC_DATE_TIME   T_DateTime;

    char buf[40];
    UINT32 f_color;

    TRACE_FUNCTION ("voice_memo_tim_cb()");
    if( !winIsFocussed(win) )
    {
        StopVmRecord(VmRecordCB);
        needback=1;
        return;
    }
    switch( data->Identifier )
    {
    case VM_RECORD:
        {  

⌨️ 快捷键说明

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