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

📄 mmitimedate.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 4 页
字号:
			if (day>30)
				return FALSE;
			break;
			
		case 2: /* Feb */
			/* Leap year... */
			if ((year%4==0) && (year%400!=0))
			{
				if (day>29)
					return FALSE;
			}
			else
			{
				if (day>28)
					return FALSE;
			}
			break;
	}
	
	return TRUE;
}


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

 $Function:  	tida_check_time
 
 $Description:	Checks a time to see if it's valid

 $Returns:		TRUE if it's valid, FALSE otherwise

 $Arguments:	timestring	- The time string
 
*******************************************************************************/

UBYTE tida_check_time(char *timestring)
{
	int hour;
	int minute;
	
	sscanf(timestring, "%d:%d", &hour, &minute);

	TRACE_EVENT_P1("String: %s", timestring);
	TRACE_EVENT_P2("Hour %d, minute %d", hour, minute);

	if (hour<0 || hour>23 || minute<0 || minute>60)
		return FALSE;
		
	return TRUE;
}

#else /* NEW_EDITOR */

/* OLD VERSION */

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

 $Function:  date_time_create  

 $Description:	create main dialog for time and date (SINGLE_DYNAMIC)

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
T_MFW_HND date_time_create (T_MFW_HND parent_window)
{
  T_MFW_WIN     * win;

  T_tida * data = (T_tida *)ALLOC_MEMORY (sizeof (T_tida));
  data->tida_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)tida_win_cb);
   
   TRACE_FUNCTION("MmiTimeDate:date_time_create");

  if (data->tida_win EQ 0)
    return 0;

  /*
   * Create window handler
   */
  data->mmi_control.dialog    = (T_DIALOG_FUNC)tida_main;/* dialog main function    */
  data->mmi_control.data      = data;
  data->parent_win = parent_window;
  win                         = ((T_MFW_HDR *)data->tida_win)->data;
  win->user                   = (void *) data;
 

  /*
   * return window handle
   */

	mfwSetSignallingMethod(1);
	winShow(data->tida_win);

	
  return data->tida_win;
}
/*******************************************************************************

 $Function:  date_time_destroy  

 $Description:	 destroy main dialog for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
void date_time_destroy  (T_MFW_HND own_window)
{
  T_tida * data;
  T_MFW_WIN * win;

  if (own_window)
  {
     TRACE_EVENT("MmiTimeDate:date_time_destroy");
	 win = ((T_MFW_HDR *)own_window)->data;
     data = (T_tida *)win->user;

	 if(data)
	 {
		 win_delete (data->tida_win);
		 FREE_MEMORY((void *)data,(sizeof(T_tida)));
	 }
  }
}
/*******************************************************************************

 $Function:  date_time_edt_create  

 $Description:	 create editor dialog for time and date(SINGLE_DYNAMIC)

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
T_MFW_HND date_time_edt_create(T_MFW_HND parent_window)
{
  T_tida_edt * data = (T_tida_edt *)ALLOC_MEMORY (sizeof (T_tida_edt));

  T_MFW_WIN * win;

  data->tida_edt_win = win_create (parent_window, 0, MfwWinVisible, (T_MFW_CB)tida_edt_win_cb);

  TRACE_FUNCTION("MmiTimeDate:date_time_edt_create");

  if (data->tida_edt_win EQ 0)
    return 0;

  /*
   * Create window handler
   */
  data->mmi_control.dialog    = (T_DIALOG_FUNC)tida_editor;
  data->mmi_control.data      = data;
  data->parent_win = parent_window;
  win                         = ((T_MFW_HDR *)data->tida_edt_win)->data;
  win->user                   = (void *) data;
  /*
   * Create any other handler
   */
  editor_attr_init(&data->edit1Attr, TIMEDATE_EDITOR_AREA, edtCurBar1 | edtModOverWr, 0, (char*)data->edtbuf1,MAX_DIG_TIDA,COLOUR_EDITOR_XX );

  data->tim_out_handle = tim_create(data->tida_edt_win,TIMERCLEAR,(T_MFW_CB)tida_edt_tim_out_cb);
  data->editor_handle = edt_create(data->tida_edt_win,&data->edit1Attr,0,0);
  data->kbd_handle = kbd_create(data->tida_edt_win,KEY_ALL,(T_MFW_CB)tida_edt_kbd_cb);
  data->kbd_long_handle = kbd_create(data->tida_edt_win,KEY_ALL | KEY_LONG,(T_MFW_CB)tida_edt_kbd_long_cb);
  /*
   * return window handle
   */
  return data->tida_edt_win;
}
/*******************************************************************************

 $Function:  date_time_edt_destroy  

 $Description:	destroy editor dialog for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
void date_time_edt_destroy  (T_MFW_HND own_window)
{
  T_tida_edt * data ;
  T_MFW_WIN * win;


  if (own_window)
  {
	  TRACE_FUNCTION ("MmiTimeDate:date_time_edt_destroy");

	  win = ((T_MFW_HDR *)own_window)->data;
	  data = (T_tida_edt *)win->user;

	  if(data)
	  {
		  win_delete (data->tida_edt_win);
	      FREE_MEMORY((void *)data,(sizeof(T_tida_edt)));
	  }
   }
}
/*******************************************************************************

 $Function:  tida_main  

 $Description:	 main dialog function for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
static void tida_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
	T_tida * tida_data = (T_tida *)win_data->user;//tida main data
	T_tida_edt * tida_edt_data = (T_tida_edt *) parameter;//tida editor data
	T_MFW_HND tida_edt_win;
	T_DISPLAY_DATA display_info;

	TRACE_FUNCTION("MmiTimeDate:tida_main");

	 switch(event)
	 {
		  case DATE_SHOW:
			  tida_data->state = DATE_SHOW;
			  tida_data->display_id1 = TxtEnterDate;
			  tida_edt_win = date_time_edt_create(tida_data->tida_win);
			  if(tida_edt_win)
			  {
				SEND_EVENT(tida_edt_win,event,0,tida_data);
			  }
			  break;
		  case DATE_ENTRY:
			  tida_data->state = DATE_ENTRY;
			  tida_data->display_id1 = TxtEnterDate;
			  tida_edt_win = date_time_edt_create(tida_data->tida_win);
			  {
				SEND_EVENT(tida_edt_win,event,0,tida_data);
			  }
			  break;
		  case TIME_ENTRY:
			  tida_data->state = TIME_ENTRY;
			  tida_data->display_id1 = TxtEnterTime;
			  tida_edt_win = date_time_edt_create(tida_data->tida_win);
			  {
				SEND_EVENT(tida_edt_win,event,0,tida_data);
			  }
			  break;
		  case TIME_SHOW:
			  tida_data->state = TIME_SHOW;
			  tida_data->display_id1 = TxtEnterTime;
			  tida_edt_win = date_time_edt_create(tida_data->tida_win);
			  if(tida_edt_win)
			  {
				SEND_EVENT(tida_edt_win,event,0,tida_data);
			  }
			  break;
		  case ENTRY_OK:
				dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtSaved, TxtNull, COLOUR_STATUS);
				dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)tida_info_cb, THREE_SECS, KEY_ALL );
			  display_info.Identifier = SAVED;
		      info_dialog(tida_data->tida_win,&display_info); /* information screen "Saved" */
		      break;
		  case SAVED:
		  case TIDA_ABORT:
		  case TIDA_CLEAR:
		  case TIDA_TO_IDLE:
			  date_time_destroy(tida_data->tida_win);
			  break;
		  default:
			  break;
	 }
}
/*******************************************************************************

 $Function:  tida_info_cb  

 $Description:	 callback function from info dialog for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
void tida_info_cb(T_MFW_HND win, USHORT identifier, UBYTE reasons)
{
	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
	T_tida * tida_data = (T_tida *)win_data->user;

	TRACE_FUNCTION ("MmiTimeDate: tida_info_cb");

	switch(identifier)
	{
		case SAVED:
			SEND_EVENT(tida_data->tida_win,identifier,0,NULL);
			break;
		default:
			break;
	}
}

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

 $Function:  tida_win_cb  

 $Description:	 windows main callback function for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
static int tida_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
TRACE_FUNCTION ("MmiTimeDate: tida_win_cb");
  if (event EQ MfwWinVisible)
  {
    /*
     * Top Window has no output
     */
    dspl_ClearAll();
	return 1;
  }
  return 0;
}
/*******************************************************************************

 $Function:  tida_edt_win_cb  

 $Description:	 windows callback function for editor for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
static int tida_edt_win_cb  (T_MFW_EVENT event,T_MFW_WIN * win)
{


  T_tida_edt * edt_data = (T_tida_edt *)win->user;//tida edt data
  T_MFW_WIN * win_tida =((T_MFW_HDR *)edt_data->parent_win)->data;
  T_tida     * tida_data = (T_tida *)win_tida->user; // tida main data
  char lin1[MAX_LEN_DATE];
  char lin2[MAX_LEN_TIME];
  	T_MFW_TIME* currclock; /*SPR 1725*/
	T_MFW_DATE* currdate;
	T_MFW_TIME alarmTime; /*SPR 1725*/
	

	currclock = mfw_td_get_time(&currclock);/*SPR 1725*/
	currdate = mfw_td_get_date(&currdate);
	mfw_td_get_alarm(&alarmTime, &alarmDate);

  TRACE_FUNCTION ("MmiTimeDate:tida_edt_win_cb");

  if (event EQ MfwWinVisible)
  {
	dspl_ClearAll();
    PROMPT(DATE_TEXT_X,DATE_TEXT_Y,0,tida_data->display_id1);
	softKeys_displayId(TxtSoftOK,TxtSoftBack,0,COLOUR_EDITOR_XX);


	if(tida_data->state EQ DATE_SHOW)
	{
		if ((DateTimeEntryMode == SETTING) || (FFS_flashData.alarm_day == 0))
        {	if (currdate->day == 0) //if no date set
       			sprintf(lin1,"dd/mm/yyyy");
       		else
				sprintf(lin1,"%02d/%02d/%04d",currdate->day,currdate->month,currdate->year);
		}
		else
			sprintf(lin1,"%02d/%02d/%04d",alarmDate.day,alarmDate.month,alarmDate.year);
			
		strncpy(edt_data->edtbuf1,lin1,MAX_LEN_DATE);
		edtShow(edt_data->editor_handle);
	}
	else if(tida_data->state EQ DATE_ENTRY)
	{
		if ((DateTimeEntryMode == SETTING) || (alarmDate.day == 0))
       	{	if (currdate->day == 0)
       			sprintf(lin1,"dd/mm/yyyy");//if no date set
       		else
				sprintf(lin1,"%02d/%02d/%04d",currdate->day,currdate->month,currdate->year);
		}
		else
			sprintf(lin1,"%02d/%02d/%04d",alarmDate.day,alarmDate.month,alarmDate.year);	
		strncpy(edt_data->edtbuf1,lin1,MAX_LEN_DATE);
		edt_data->index = 0;
		edtShow(edt_data->editor_handle);
		softKeys_displayId(TxtSoftOK,TxtSoftBack,0,COLOUR_EDITOR_XX);
	}
	else if(tida_data->state EQ TIME_ENTRY)
	{
		if ((DateTimeEntryMode == SETTING) || (alarmDate.day==0))
			sprintf(lin2,"%02d:%02d",currclock->hour, currclock->minute);
		else
			sprintf(lin2,"%02d:%02d",alarmDate.hour, alarmDate.minute);
		strncpy(edt_data->edtbuf1,lin2,MAX_LEN_TIME);
		edt_data->index = 0;
		edtShow(edt_data->editor_handle);
		softKeys_displayId(TxtSoftOK,TxtSoftBack,0,COLOUR_EDITOR_XX);
	}
	else if(tida_data->state EQ TIME_SHOW)
	{	if ((DateTimeEntryMode == SETTING) || (alarmDate.day == 0))
			sprintf(lin2,"%02d:%02d",currclock->hour, currclock->minute);
		else
			sprintf(lin2,"%02d:%02d",alarmDate.hour, alarmDate.minute);
		strncpy(edt_data->edtbuf1,lin2,MAX_LEN_TIME);
		edtShow(edt_data->editor_handle);
	}
    return 1;
  }
  return 0;
  
}
/*******************************************************************************

 $Function:  tida_editor  

 $Description:	 dialog function for editor for time and date

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
static void tida_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
	T_tida_edt * edt_data = (T_tida_edt *)win_data->user;


    T_tida * tida_data = (T_tida *)parameter;//tida main data

	edt_data->state = tida_data->state;

	TRACE_FUNCTION("MmiTimeDate:tida_editor");

  /*
   * depending on event
   */
  switch (event)
  {
	case DATE_SHOW:
	case TIME_SHOW:
	    memset(edt_data->edtbuf1, '\0', sizeof(edt_data->edtbuf1));/* initial buffer  */
		edt_data->index = 0;
		winShow(edt_data->tida_edt_win);
		break;
	case DATE_ENTRY:
	case TIME_ENTRY:
		winShow(edt_data->tida_edt_win);
		break;
	default:
		break;
  }
}
/*******************************************************************************

 $Function:  tida_edt_kbd_cb  

 $Description:	 keyboard event handler for time and date

 $Returns:		none.

⌨️ 快捷键说明

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