FreeCalypso > hg > tcs211-l1-reconst
diff g23m/condat/ms/src/bmi/MmiTimeDate.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/bmi/MmiTimeDate.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,2111 @@ +/******************************************************************************* + + CONDAT (UK) + +******************************************************************************** + + This software product is the property of Condat (UK) Ltd and may not be + disclosed to any third party without the express permission of the owner. + +******************************************************************************** + + $Project name: Basic MMI + $Project code: BMI (6349) + $Module: MMI + $File: MmiTimeDate.c + $Revision: 1.0 + + $Author: Condat(UK) + $Date: 22/02/01 + +******************************************************************************** + + Description: + + + +******************************************************************************** + + $History: MmiMain.c + + Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh + Description: Mp3 Ringer Implementation + Solution: The Midi Ringer application has been enhanced to support mp3 as ringer. + The interface function names have been modified. + + Apr 05, 2005 REF: ENH 29994 xdeepadh + Description: Implementation of Generic Midi Ringer and Modification of existing Midi Test Application + Solution: Generic Midi Ringer and Midi Test Application were implemented. + + Jan 06,2004 REF: CRR 27859 xkundadu + Description: Clock: Alarm does not go off even if timer times out. + Solution: If the mfw_td_set_alarm() function fails, display the + 'Write Failed" message. + + Oct 14, 2004 REF: CRR 25756 xnkulkar + Description: Alarm setting not allowed + Solution: We are checking the time format (12/24 Hour) and accordingly setting the + format flag. Also the conversion of time from 24 to 12 or 12 to 24 hour format is done + before displaying it on the alarm editor screen. + + 25/10/00 Original Condat(UK) BMI version. + + $End + +*******************************************************************************/ + + +#define ENTITY_MFW + +/* includes */ +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif +#include "mfw_sys.h" +#include "prim.h" + + +#include "mfw_mfw.h" +#include "mfw_win.h" + +#include "mfw_kbd.h" +/* SPR#1428 - SH - New Editor changes */ +#ifndef NEW_EDITOR +#include "mfw_edt.h" +#endif +#include "mfw_lng.h" +#include "mfw_tim.h" +#include "mfw_icn.h" +#include "mfw_mnu.h" +#include "mfw_phb.h" +#include "mfw_cm.h" +#include "mfw_sim.h" +#include "mfw_nm.h" +#include "mfw_sat.h" +#include "mfw_phb.h" +#include "ksd.h" +#include "psa.h" +#include "mfw_sms.h" +#include "mfw_sat.h" +#include "Mfw_td.h"/*SPR 2639*/ + +#include "dspl.h" + +#include "gdi.h" //ES!! + +#include "MmiMmi.h" +#include "MmiDummy.h" +#include "MmiDialogs.h" +#include "MmiLists.h" + +#include "MmiSoftKeys.h" +#include "Mmiicons.h" +#include "MmiMenu.h" +#include "MmiMain.h" +#include "MmiIdle.h" +#include "MmiStart.h" +#include "MmiPins.h" +#include "MmiTimeDate.h" +#include "MmiSounds.h" +/* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR +#include "ATBCommon.h" +#include "ATBDisplay.h" +#include "ATBEditor.h" +#include "AUIEditor.h" +#else +#include "MmiEditor.h" +#endif + +#include "audio.h" +#include "cus_aci.h" +#include "mmiColours.h" + +// Apr 05, 2005 REF: ENH 29994 xdeepadh +#ifdef FF_MIDI_RINGER +#include "mmiCall.h" +#include "mfw_midi.h" +extern T_call call_data; +#endif +void alarm_screen(void); // RAVI +int time_date_cb(T_MFW_EVENT event,void* para);/*SPR 2639 handles events from MFW*/ + + T_MFW_DATE alarmDate;/*SPR 2639 we need a global to store the alarm date */ +//#ifdef NEW_EDITOR + T_MFW_TIME alarmTime; /*SPR 2639*/ +//#endif + +/* SPR#1428 - SH - New Editor changes. + * Time and date module pretty much rewritten to use new formatted input of editor. + */ + +#ifdef NEW_EDITOR + +/* LOCAL FUNCTION PROTOTYPES */ +T_MFW_HND tida_create(T_MFW_HND parent_win); +static int tida_win_cb (T_MFW_EVENT event, T_MFW_WIN * win); +static void tida_exec_cb(T_MFW_HND win, USHORT event, SHORT value, void * parameter); +T_MFW_HND tida_edit_create(T_MFW_HND parent, USHORT Identifier, USHORT TitleId, char *buffer, char *formatString); +void tida_edit_cb(T_MFW_HND win, USHORT Identifier, SHORT value); +void tida_show_dlg(T_MFW_HND win, USHORT textId1, USHORT textId2); +UBYTE tida_check_date(char *datestring); +UBYTE tida_check_time(char *timestring); + +#define MAX_DIG_TIDA 20 /* Max size of buffer, arbitrary value */ + +/* TIME/DATE main structure */ + +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND parent_win; + T_MFW_HND win; /* The main time/date window */ + T_MFW_HND edit_win; /* The editor window */ + char buffer[MAX_DIG_TIDA]; /* Buffer to store currently edited time/date */ +} T_tida; + +#else /* NEW_EDITOR */ + +/* OLD VERSION */ + +static int tida_edt_kbd_long_cb (MfwEvt e, MfwKbd *kc); +static void tida_edt_tim_out_cb(T_MFW_EVENT event,T_MFW_TIM * t); +static int check_time (T_MFW_HND win, void * edt_dat); +static int check_date (T_MFW_HND win, void * edt_dat); +static int tida_edt_kbd_cb (MfwEvt e, MfwKbd *kc); +static void tida_editor(T_MFW_HND win, USHORT event, SHORT value, void * parameter); +static int tida_edt_win_cb (T_MFW_EVENT event,T_MFW_WIN * win); +static int tida_win_cb (T_MFW_EVENT event, T_MFW_WIN * win); +static void tida_main(T_MFW_HND win, USHORT event, SHORT value, void * parameter); +static void reset_edt_attr_sett(int editZone, U32 colIndex, U8 font,U8 mode, + U8 *controls, char *text,U16 size,MfwEdtAttr* attr); + +static MfwHnd win; /* our window */ +static DisplayData DisplayInfo; + +#define MAX_DIG_TIDA 20 /* size of buffer (??) */ +#define MAX_LEN_DATE 11 /* maximum number of digits date*/ +#define MAX_LEN_TIME 6 /* maximum number of digits time*/ +#define DATE_TEXT_X 0 +#define DATE_TEXT_Y 0 + +typedef enum +{ + ALARM, + SETTING +} timeDateMode; + +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND parent_win; + T_MFW_HND tida_win; + USHORT display_id1; + USHORT display_id2; + DAT_TIME_CASE state; /* setting state */ +} T_tida; + +typedef struct +{ + T_MMI_CONTROL mmi_control; + T_MFW_HND parent_win; + T_MFW_HND tida_edt_win; + T_MFW_HND kbd_handle; + T_MFW_HND kbd_long_handle; + T_MFW_HND editor_handle; + T_MFW_HND tim_out_handle; + DAT_TIME_CASE state; /* setting state */ + char edtbuf1[MAX_DIG_TIDA]; + MfwEdtAttr edit1Attr; + UBYTE index; +}T_tida_edt; + + + +/* + * Settings menu subs: + */ + +#define TIMERCLEAR 2500 + +//Flag to indicate whether we're setting the current or alarm date/time. +static UBYTE DateTimeEntryMode; + +extern UBYTE getcurrentAlarmTone(void); //mmisounds +#endif /* NEW_EDITOR */ + +T_MFW_HND td_handle; +/* FUNCTIONS BELOW ARE COMMON TO OLD AND NEW VERSION */ + +/*SPR 2639 removed function alarm_check()*/ + + +/******************************************************************************* + + $Function: time_date_init + + $Description: initialises time and date + + $Returns: none. + + $Arguments: none + +*******************************************************************************/ +void time_date_init() +{ mfw_td_init(); + + td_handle = mfw_td_create(NULL, MFW_TD_ALARM, time_date_cb); +} +/******************************************************************************* + + $Function: time_date_init + + $Description: deletes mfw td + + $Returns: none. + + $Arguments: none + +*******************************************************************************/ +void time_date_delete() +{ + mfw_td_delete(td_handle); + mfw_td_exit(); +} +/******************************************************************************* + + $Function: time_date_cb + + $Description: handles alarm event from MFW + + $Returns: none. + + $Arguments: none + +*******************************************************************************/ +int time_date_cb(T_MFW_EVENT event,void* para) +{ TRACE_EVENT_P1("time_date_cb():%d",event); + alarm_screen(); + + return 1; // RAVI. +} + + +/******************************************************************************* + + $Function: alarm_screen_cb added for SPR 2184 + + $Description: Handles alarm screen keypresses + + $Returns: none. + + $Arguments: window handle, identifier, reason(key pressed) + +*******************************************************************************/ +void alarm_screen_cb(T_MFW_HND win, USHORT identifier, UBYTE reason) +{ UBYTE currentAlarm; + +// Apr 05, 2005 REF: ENH 29994 xdeepadh +//Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh +/*get current alarm id*/ +/*stop alarm*/ +#ifdef FF_MIDI_RINGER + mfw_ringer_stop(sounds_midi_ringer_stop_cb); +#else + currentAlarm=getcurrentAlarmTone(); + #ifdef FF_MMI_RINGTONE /*MSL Stop */ + audio_StopSoundbyID( AUDIO_BUZZER, ALARMTONE_SELECT); + #else + audio_StopSoundbyID(AUDIO_BUZZER, currentAlarm); + #endif +#endif + +} + + +/******************************************************************************* + + $Function: alarm_screen + + $Description: displays alarm screen + + $Returns: none. + + $Arguments: none + +*******************************************************************************/ +void alarm_screen(void) +{ + T_MFW_HND idle_win = idle_get_window(); + T_DISPLAY_DATA display_info; + T_MFW_TIME* time; + static char text[25]; + UBYTE currentAlarm;/*SPR 2184*/ + + + TRACE_EVENT("alarm_screen"); + + /*SPR 2639, convert function to use new MFW functions*/ + time = mfw_td_get_time(); + + sprintf(text, "%02d:%02d", time->hour, time->minute); +// Apr 05, 2005 REF: ENH 29994 xdeepadh +/*SPR 2639 get current alarm id and play it*/ +//Nov 02, 2005 REF:ER OMAPS00039044 xdeepadh +//If Alarm is recieved , while in call screen,dont play the tone. +#ifdef FF_MIDI_RINGER +if((!(call_data.calls.numCalls))) +{ + mfw_ringer_start(AS_RINGER_MODE_ALARM,FALSE,sounds_midi_ringer_start_cb); +} +#else + currentAlarm=getcurrentAlarmTone(); +#ifdef FF_MMI_RINGTONE /* MSL Alarm Tone */ + audio_PlaySoundID( AUDIO_BUZZER, ALARMTONE_SELECT, 0 , AUDIO_PLAY_INFINITE); +#else + audio_PlaySoundID( AUDIO_BUZZER, currentAlarm, 0 , AUDIO_PLAY_INFINITE); +#endif +#endif + /*SPR 2639 end*/ + + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtNull, TxtAlarm, TxtNull , COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)alarm_screen_cb, FOREVER, KEY_CLEAR|KEY_LEFT|KEY_RIGHT ); + display_info.TextString2 = text; + + + /* Call Info Screen + */ + info_dialog( idle_win, &display_info ); + +} + + + + +/******************************************************************************* + + $Function: clear_alarm + + $Description: handles menu option to cancel any existing alarm setting + + $Returns: status int + + $Arguments: menu and item (not used) + +*******************************************************************************/ +int clear_alarm(MfwMnu* m, MfwMnuItem* i) +{ T_MFW_HND win = mfwParent( mfw_header() ); + T_DISPLAY_DATA display_info; + + + /*SPR 2639, changed to use new MFW functions*/ + mfw_td_cancel_alarm(); + + dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtNull, TxtAlarm, TxtCancelled , COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, NULL, THREE_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT ); + + /* Call Info Screen + */ + info_dialog( win, &display_info ); + + + return MFW_EVENT_CONSUMED; + +} + + +/******************************************************************************* + + $Function: twelve_hour_clock + + $Description: handles selection of twleve hour clock in menu + + $Returns: status int + + $Arguments: menu and item (not used) + +*******************************************************************************/ +int twelve_hour_clock(MfwMnu* m, MfwMnuItem* i) +{ T_MFW_HND win = mfwParent( mfw_header() ); + T_DISPLAY_DATA display_info; + // char text[25]; // RAVI + + setClockFormat(MFW_TIME_FORMAT_12HOUR);/*SPR 2639*/ + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtClockSetTo, TxtTwelveHour, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT ); + + /* Call Info Screen + */ + + info_dialog( win, &display_info ); + return MFW_EVENT_CONSUMED; + +} +/******************************************************************************* + + $Function: twentyfour_hour_clock + + $Description: handles selection of twleve hour clock in menu + + $Returns: status int + + $Arguments: menu and item (not used) +*******************************************************************************/ +int twentyfour_hour_clock(MfwMnu* m, MfwMnuItem* i) +{ T_MFW_HND win = mfwParent( mfw_header() ); + T_DISPLAY_DATA display_info; + // char text[25]; // RAVI + + setClockFormat(MFW_TIME_FORMAT_24HOUR);/*SPR 2639*/ + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtClockSetTo, TxtTwentyfourHour, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT ); + + /* Call Info Screen + */ + + info_dialog( win, &display_info ); + return MFW_EVENT_CONSUMED; + +} + + +/******************************************************************************* + + $Function: alarmTimeDate + + $Description: Called when user selects alarm in menu. Begins editor to enter + desired alarm time and date. + + $Returns: status int + + $Arguments: menu and item (not used) + +*******************************************************************************/ +int alarmTimeDate(MfwMnu* m, MfwMnuItem* i) +{ +/* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + T_MFW_HND idle_win = idle_get_window(); + T_MFW_HND win = tida_create(idle_win); /* Parent_window is idle */ + + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_tida *data = (T_tida *)win_data->user; + + TRACE_FUNCTION ("MmiTimeDate:alarmTimeDate()"); + + if(data->win) + { + SEND_EVENT(data->win, TIDA_ALARMDATE,0,0); + + } +#else /* NEW_EDITOR */ + T_MFW_HND idle_win = idle_get_window(); + T_MFW_HND win = date_time_create(idle_win);// parent_window is idle + + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_tida * tida_data = (T_tida *)win_data->user; + + TRACE_FUNCTION ("MmiTimeDate:alarmTimeDate()"); +mfw_td_get_alarm(&alarmTime, &alarmDate); + tida_data->state = DATE_ENTRY; + DateTimeEntryMode = ALARM; + + if(tida_data->tida_win) + { + SEND_EVENT(tida_data->tida_win,DATE_ENTRY,0,tida_data); + + } +#endif /* NEW_EDITOR */ + return 1; +} + +/******************************************************************************* + + $Function: settingsTimeDate + + $Description: settings date and time menu function + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +int settingsTimeDate(MfwMnu* m, MfwMnuItem* i) +{ +/* SPR#1428 - SH - New Editor changes */ +#ifdef NEW_EDITOR + T_MFW_HND idle_win = idle_get_window(); + T_MFW_HND win = tida_create(idle_win); /* Parent_window is idle */ + + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_tida *data = (T_tida *)win_data->user; + + TRACE_FUNCTION ("MmiTimeDate:settingsTimeDate()"); + + if(data->win) + { + SEND_EVENT(data->win, TIDA_DATE,0,0); + + } +#else /* NEW_EDITOR */ + T_MFW_HND idle_win = idle_get_window(); + T_MFW_HND win = date_time_create(idle_win);// parent_window is idle + + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_tida * tida_data = (T_tida *)win_data->user; + + TRACE_FUNCTION ("MmiTimeDate:settingsTimeDate()"); + + tida_data->state = DATE_ENTRY; + DateTimeEntryMode = SETTING; + + if(tida_data->tida_win) + { + SEND_EVENT(tida_data->tida_win,DATE_ENTRY,0,tida_data); + + } +#endif /* NEW_EDITOR */ + + return 1; +} + + +/* SPR#1428 - SH - New Editor changes + * New time/date code below. Uses tida_exec_cb as main "object". */ + +#ifdef NEW_EDITOR + +/******************************************************************************* + + $Function: tida_create + + $Description: Create the main time/date window + + $Returns: The window handle + + $Arguments: parent_win - The parent window + +*******************************************************************************/ + +T_MFW_HND tida_create(T_MFW_HND parent_win) +{ + T_MFW_WIN * win_data; + + T_tida * data = (T_tida *)ALLOC_MEMORY (sizeof (T_tida)); + data->win = win_create (parent_win, 0, MfwWinVisible, (T_MFW_CB)tida_win_cb); + + TRACE_FUNCTION("MmiTimeDate:date_time_create"); + + if (data->win EQ 0) + return 0; + + /* + * Create window handler + */ + data->mmi_control.dialog = (T_DIALOG_FUNC)tida_exec_cb;/* dialog main function */ + data->mmi_control.data = data; + data->parent_win = parent_win; + win_data = ((T_MFW_HDR *)data->win)->data; + win_data->user = (void *) data; + + + /* + * return window handle + */ + + return data->win; +} + + +/******************************************************************************* + + $Function: tida_destroy + + $Description: Destroy the main time/date window + + $Returns: None + + $Arguments: win - The main time/date window + +*******************************************************************************/ + +T_MFW_HND tida_destroy(T_MFW_HND win) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_tida *data = (T_tida *)win_data->user;//tida main data + + if (win == NULL) + { + TRACE_EVENT ("Error : tida_destroy called with NULL Pointer"); + return; + } + + if (data->win) + { + win_delete(data->win); + } + + if (data) + { + FREE_MEMORY((void *)data, sizeof(T_tida)); + } + + return; +} + + +/******************************************************************************* + + $Function: tida_win_cb + + $Description: Window callback function for time and date. This is a non-displaying + window, so does nothing! + + $Returns: None. + + $Arguments: + +*******************************************************************************/ + +static int tida_win_cb (T_MFW_EVENT event, T_MFW_WIN * win) +{ + TRACE_FUNCTION ("MmiTimeDate: tida_win_cb"); + + return 1; // RAVI - Return changed to Return 1. +} + + +/******************************************************************************* + + $Function: tida_exec_cb + + $Description: Main dialog function for time and date + + $Returns: None. + + $Arguments: + +*******************************************************************************/ + +static void tida_exec_cb(T_MFW_HND win, USHORT event, SHORT value, void * parameter) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_tida *data = (T_tida *)win_data->user;//tida main data + + T_MFW_TIME* currclock; /*SPR 2639*/ + T_MFW_DATE* currdate; + + TRACE_FUNCTION("MmiTimeDate:tida_main"); + + + + + switch(event) + { + case TIDA_INIT: + break; + + case TIDA_DATE: + /*SPR 2639*/ + currdate = mfw_td_get_date(); + /* No date is set */ + if (currdate->day == 0) + { + sprintf(data->buffer, "dd/mm/yyyy"); + } + /* Date is already set */ + else + { + sprintf(data->buffer, "%02.02d/%02d/%04d", currdate->day, currdate->month, currdate->year); + } + + data->edit_win = tida_edit_create(win, event, TxtEnterDate, data->buffer, "NN\\/NN\\/NNNN"); + break; + + case TIDA_TIME: + currclock = mfw_td_get_time();/*SPR 2639*/ + // Issue Number : MMI-SPR-12159 on 07/04/04 by Rashmi C N and Deepa M D + // change by Sasken ( Rashmi C N and Deepa M D) on April 07th 2004 + // Bug : In 12 hour fomrat the AM and PM was not being set + // Solution : Displaying the am/pm for editing in the time edit screen. + + if(currclock->format==MFW_TIME_FORMAT_12HOUR) + { + if(currclock->PM_flag) + sprintf(data->buffer, "%02d:%02d pm", currclock->hour, currclock->minute); + else + sprintf(data->buffer, "%02d:%02d am", currclock->hour, currclock->minute); + data->edit_win = tida_edit_create(win, event, TxtEnterTime, data->buffer, "NN\\:NN\\aa"); + } + else + { + sprintf(data->buffer, "%02d:%02d", mfw_td_convert_to_24_hour(currclock), currclock->minute); + data->edit_win = tida_edit_create(win, event, TxtEnterTime, data->buffer, "NN\\:NN"); + } + break; + + case TIDA_ALARMDATE: + /*SPR 2639*/ + mfw_td_get_alarm(&alarmTime, &alarmDate); + /* No date is set */ + if (alarmDate.day == 0)/*SPR 2639*/ + { currdate = mfw_td_get_date(); + /* If date is set, insert today's date */ + if (currdate->day!=0) + { + sprintf(data->buffer, "%02d/%02d/%04d", currdate->day, currdate->month, currdate->year); + } + else + { + sprintf(data->buffer, "dd/mm/yyyy"); + } + } + /* Date is already set */ + else + {/*SPR 2639*/ + sprintf(data->buffer, "%02d/%02d/%04d", alarmDate.day, alarmDate.month, alarmDate.year); + } + + data->edit_win = tida_edit_create(win, event, TxtEnterDate, data->buffer, "NN\\/NN\\/NNNN"); + break; + + case TIDA_ALARMTIME: + /*SPR 2639*/ + //sprintf(data->buffer,"%02d:%02d",alarmTime.hour, alarmTime.minute); + //data->edit_win = tida_edit_create(win, event, TxtEnterTime, data->buffer, "NN\\:NN"); + + // xnkulkar SPR-25756: Alarm setting not allowed + // Check the time format set and accordingly convert the time before displaying on + // the editor screen. + currclock = mfw_td_get_time(); + if(alarmTime.format!= currclock->format) + { + alarmTime.format = currclock->format; + if(currclock->format == MFW_TIME_FORMAT_12HOUR) + { //converting from 24 hour alram format to 12 hour alarm format + if (alarmTime.hour < 12) + { + alarmTime.PM_flag=0; + } + else + { //if after noon + alarmTime.PM_flag=1; + alarmTime.hour = alarmTime.hour-12; + } + } + else + { //converting from 12 hour alram format to 24 hour alarm format + if (alarmTime.PM_flag == TRUE) + { // + alarmTime.hour = alarmTime.hour + 12; + } + else + { //if midnight, set the hour to 0 + if (alarmTime.hour == 12) + alarmTime.hour = 0; + } + } + } + + // xnkulkar SPR-25756: Alarm setting not allowed + // Now proceed with displaying the alarm time with am/pm in alarm time edit screen + // if the format is 12 hour. + if(alarmTime.format == MFW_TIME_FORMAT_12HOUR) + { + if(alarmTime.PM_flag) + sprintf(data->buffer, "%02d:%02d pm",alarmTime.hour, alarmTime.minute); + else + sprintf(data->buffer, "%02d:%02d am", alarmTime.hour, alarmTime.minute); + data->edit_win = tida_edit_create(win, event, TxtEnterTime, data->buffer, "NN\\:NN\\aa"); + } + else + { + sprintf(data->buffer,"%02d:%02d", mfw_td_convert_to_24_hour(&alarmTime), alarmTime.minute); + data->edit_win = tida_edit_create(win, event, TxtEnterTime, data->buffer, "NN\\:NN"); + } + break; + + case TIDA_SAVE: + tida_show_dlg(win, TxtSaved, TxtNull); + AUI_edit_Destroy(data->edit_win); + tida_destroy(data->win); + break; +// Jan 06,2004 REF: CRR 27859 xkundadu +// Description: Clock: Alarm does not go off even if timer times out. +// Solution: If the mfw_td_set_alarm() function fails, display the +// 'Write Failed" message. + + //Could not write the alarm details to FFS. + case TIDA_SAVEFAILED: + tida_show_dlg(win, TxtWrite, TxtFailed); + AUI_edit_Destroy(data->edit_win); + tida_destroy(data->win); + break; + } + + return; +} + +/******************************************************************************* + + $Function: tida_edit_create + + $Description: Creates an editor with the supplied properties + + $Returns: The editor window. + + $Arguments: parent - The parent window + Identifier - ID used in callback to identify type of editor + TitleId - The title of the editor + buffer - The text buffer + formatString - The formatting that governs the input + +*******************************************************************************/ + +T_MFW_HND tida_edit_create(T_MFW_HND parent, USHORT Identifier, USHORT TitleId, char *buffer, char *formatString) +{ + T_AUI_EDITOR_DATA editor_data; + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetDisplay(&editor_data, TIMEDATE_EDITOR_AREA, COLOUR_EDITOR, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, Identifier, FALSE, FOREVER, (T_AUI_EDIT_CB)tida_edit_cb); + AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtSoftBack, TitleId, NULL); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)buffer, strlen(formatString)); + AUI_edit_SetFormatStr(&editor_data, formatString, FALSE, 0); + AUI_edit_SetMode(&editor_data, ED_MODE_FORMATTED, ED_CURSOR_UNDERLINE); + return AUI_edit_Start(parent, &editor_data); +} + + +/******************************************************************************* + + $Function: tida_edit_cb + + $Description: Callback function for editor + + $Returns: None + + $Arguments: win - The main time/date window + Identifier - ID used in callback to identify type of editor + value - What prompted the callback + +*******************************************************************************/ + +void tida_edit_cb(T_MFW_HND win, USHORT Identifier, SHORT value) +{ + T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; + T_tida *data = (T_tida *)win_data->user;//tida main data + int minute, hour, day, month, year; + T_MFW_TIME_FORMAT current_format; + char pmFlag; + + T_MFW_TIME* currclock; /*SPR 2639*/ //, *tempclock; // RAVI + T_MFW_DATE* currdate; + + + + + switch(value) + { + /* Terminate editor */ + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + AUI_edit_Destroy(data->edit_win); + + /* If on the time editing screen, go back to the date editing screen. + * Otherwise exit. */ + + switch(Identifier) + { + case TIDA_TIME: + SEND_EVENT(data->win, TIDA_DATE, 0, 0); + break; + + case TIDA_ALARMTIME: + SEND_EVENT(data->win, TIDA_ALARMDATE, 0, 0); + break; + + default: + tida_destroy(win); + break; + } + break; + + /* OK */ + case INFO_KCD_LEFT: + switch(Identifier) + { + case TIDA_DATE: + if (tida_check_date(data->buffer)) + { + currdate = mfw_td_get_date(); + sscanf(data->buffer, "%d/%d/%d", &day, &month, &year); + currdate->day = day; + currdate->month = month; + currdate->year = year; + mfw_td_set_date(currdate);/*SPR 2639*/ + AUI_edit_Destroy(data->edit_win); + SEND_EVENT(data->win, TIDA_TIME, 0, 0); + } + else + { + tida_show_dlg(data->win, TxtNotAllowed, TxtNull); + } + break; + + case TIDA_TIME: + if (tida_check_time(data->buffer)) + { currclock = mfw_td_get_time();/*SPR 2639*/ + current_format = (T_MFW_TIME_FORMAT)currclock->format; + if(current_format==MFW_TIME_FORMAT_12HOUR) + sscanf(data->buffer, "%d:%d %c", &hour, &minute,&pmFlag); + else + sscanf(data->buffer, "%d:%d", &hour, &minute); + currclock->hour = hour; + currclock->minute = minute; + currclock->second = 0; + // Issue Number : MMI-SPR-12159 on 07/04/04 by Rashmi C N and Deepa M D + // change by Sasken ( Rashmi C N and Deepa M D) on April 07th 2004 + // Bug : In 12 hour fomrat the AM and PM was not being set + // Solution : Setting the PM flag of the rtc. + + if(pmFlag=='p') + { + currclock->PM_flag=1; + } + else + { + currclock->PM_flag=0; + } + + // Issue Number : MMI-SPR-12159 on 07/04/04 by Rashmi C N and Deepa M D + // change by Sasken ( Rashmi C N and Deepa M D) on April 07th 2004 + // Bug : The AM PM for 12 hour fomrat was not being shown, Also there were some bugs with the 12 hour fomat + // Solution : The following line was commented, to take the time format from the rtc instead of + //setting it to 24 hour format + + //currclock->format = MFW_TIME_FORMAT_24HOUR; + mfw_td_set_time(currclock);/*SPR 2639*/ + mfw_td_set_time_format(current_format); + SEND_EVENT(data->win, TIDA_SAVE, 0, 0); + } + else + { + tida_show_dlg(data->win, TxtNotAllowed, TxtNull); + } + break; + + case TIDA_ALARMDATE: + if (tida_check_date(data->buffer)) + { + sscanf(data->buffer, "%d/%d/%d", &day, &month, &year); + alarmDate.day = (UBYTE)day; + alarmDate.month = (UBYTE) month; + alarmDate.year = (USHORT)year; + AUI_edit_Destroy(data->edit_win); + SEND_EVENT(data->win, TIDA_ALARMTIME, 0, 0);/*SPR2639*/ + + } + else + { + tida_show_dlg(data->win, TxtNotAllowed, TxtNull); + } + break; + + case TIDA_ALARMTIME: + if (tida_check_time(data->buffer)) + { + // xnkulkar SPR-25756: Alarm setting not allowed + // get the current time and format and set the time format flag acordingly + currclock = mfw_td_get_time(); + current_format = (T_MFW_TIME_FORMAT)currclock->format; + if(current_format==MFW_TIME_FORMAT_12HOUR) + sscanf(data->buffer, "%d:%d %c", &hour, &minute,&pmFlag); + else + sscanf(data->buffer, "%d:%d", &hour, &minute); + + alarmTime.hour = (UBYTE)hour; + alarmTime.minute = (UBYTE)minute; + alarmTime.second = 0; + alarmTime.format = currclock->format; + + // xnkulkar SPR-25756: Alarm setting not allowed + // Depending on the current time format (12/24 Hour), + // set the PM_flag. + if(pmFlag=='p') + { + alarmTime.PM_flag=1; + } + else + { + alarmTime.PM_flag=0; + } + // Now that we have the required info, set the alarm + + // Jan 06,2004 REF: CRR 27859 xkundadu + // Description: Clock: Alarm does not go off even if timer times out. + // Solution: If the mfw_td_set_alarm() function fails, display the + // 'Write Failed" message. + + if(mfw_td_set_alarm(&alarmTime, &alarmDate) == MfwResOk) + { + + TRACE_EVENT("Set Alarm success"); + SEND_EVENT(data->win, TIDA_SAVE, 0, 0); + } + else + { + TRACE_EVENT("Set Alarm Failed"); + SEND_EVENT(data->win, TIDA_SAVEFAILED, 0, 0); + } + } + else + { // time entered is not within the valid range + tida_show_dlg(data->win, TxtNotAllowed, TxtNull); + } + break; + } + break; + + default: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: tida_show_dlg + + $Description: Displays a dialog + + $Returns: None. + + $Arguments: win - The parent window + textId - Will display "<textId> Not Allowed" +*******************************************************************************/ + +void tida_show_dlg(T_MFW_HND win, USHORT textId1, USHORT textId2) +{ + T_DISPLAY_DATA display_info; + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, textId1, textId2, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT ); + + /* Call Info Screen + */ + + info_dialog( win, &display_info ); + + return; +} + + +/******************************************************************************* + + $Function: tida_check_date + + $Description: Checks a date to see if it's valid + + $Returns: TRUE if it's valid, FALSE otherwise + + $Arguments: datestring - The date string + +*******************************************************************************/ + +UBYTE tida_check_date(char *datestring) +{ + int day; + int month; + int year; + + sscanf(datestring, "%d/%d/%d", &day, &month, &year); + + TRACE_EVENT_P1("String: %s", datestring); + TRACE_EVENT_P3("Day: %d, Month: %d, Year: %d", day, month, year); + + /* Check for quick fails... */ + + if (year<2000 || day<1 || day>31 || month<1 || month>12) + return FALSE; + + /* Check 'day' */ + + switch(month) + { + case 4: /* Apr */ + case 6: /* Jun */ + case 9: /* Sep */ + case 11: /* Nov */ + 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; + char ampmFlag; + if(getClockFormat()==MFW_TIME_FORMAT_12HOUR) + sscanf(timestring, "%d:%d %c", &hour, &minute,&mFlag); + else + sscanf(timestring, "%d:%d", &hour, &minute); + + TRACE_EVENT_P1("String: %s", timestring); + TRACE_EVENT_P2("Hour %d, minute %d", hour, minute); + + // Issue Number : MMI-SPR-12159 on 07/04/04 by Rashmi C N and Deepa M D + // change by Sasken ( Rashmi C N and Deepa M D) on April 07th 2004 + // Bug : In 12 hour fomrat the AM and PM was not being set + // Solution : Validation for 12 hour format + if (((getClockFormat() == MFW_TIME_FORMAT_24HOUR) && (hour<0 || hour>23 || minute<0 || minute>59)) + ||((getClockFormat()== MFW_TIME_FORMAT_12HOUR) && (hour<0 || hour>12 || minute<0 || minute>59 || ( ampmFlag!='p' && ampmFlag!='a'))) + ) + 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 2639*/ + T_MFW_DATE* currdate; + //T_MFW_TIME alarmTime; /*SPR 2639*/ + + + currclock = mfw_td_get_time(&currclock);/*SPR 2639*/ + currdate = mfw_td_get_date(&currdate); + + + 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) || (alarmDate.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",mfw_td_convert_to_24_hour(currclock), currclock->minute); + else + sprintf(lin2,"%02d:%02d",alarmTime.hour, alarmTime.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",mfw_td_convert_to_24_hour(currclock), currclock->minute); + else + sprintf(lin2,"%02d:%02d",alarmTime.hour, alarmTime.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. + + $Arguments: + +*******************************************************************************/ +static int tida_edt_kbd_cb (MfwEvt e, MfwKbd *kc) +{ + + T_MFW_HND win = mfw_parent(mfw_header()); + + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_tida_edt * edt_data = (T_tida_edt *)win_data->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 2639*/ + currclock = mfw_td_get_time();/*SPR 2639*/ + + TRACE_FUNCTION ("MmiTimeDate: tida_edt_kbd_cb"); + + switch(kc->code) + { + case KCD_0: + case KCD_1: + case KCD_2: + case KCD_3: + case KCD_4: + case KCD_5: + case KCD_6: + case KCD_7: + case KCD_8: + case KCD_9: + if(edt_data->state EQ DATE_ENTRY) /* date entering */ + { + if(edt_data->index < (MAX_LEN_DATE - 1)) + { + if((edt_data->index NEQ 2) && (edt_data->index NEQ 5)) + { + edt_data->edtbuf1[edt_data->index] = '0' + kc->code; + edtChar(edt_data->editor_handle,edt_data->edtbuf1[edt_data->index]); + edt_data->index++; + } + + if((edt_data->index EQ 2) || (edt_data->index EQ 5)) + { + edtChar(edt_data->editor_handle,'/'); + edt_data->edtbuf1[edt_data->index] = '/'; + edt_data->index++; + } + } + } + else if(edt_data->state EQ TIME_ENTRY) /* time entering */ + { + if(edt_data->index < (MAX_LEN_TIME -1)) + { + if(edt_data->index NEQ 2) + { + edt_data->edtbuf1[edt_data->index] = '0' + kc->code; + edtChar(edt_data->editor_handle,edt_data->edtbuf1[edt_data->index]); + edt_data->index++; + } + if(edt_data->index EQ 2) + { + edtChar(edt_data->editor_handle,':'); + edt_data->edtbuf1[edt_data->index] = ':'; + edt_data->index++; + } + } + } + break; + case KCD_MNUSELECT: + case KCD_LEFT: /* select and ok button */ + if(edt_data->state EQ DATE_ENTRY) + { + if(check_date(win,edt_data)) + { + + TRACE_EVENT("datecheck ok"); + edtClear(edt_data->editor_handle); + edtHide(edt_data->editor_handle); /* verification date successfull */ + date_time_edt_destroy(edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,TIME_ENTRY,0,tida_data); + + } + else + { + memset(edt_data->edtbuf1, '\0', sizeof(edt_data->edtbuf1));/* initial buffer */ + edt_data->index = 0; + + sprintf(lin1,"dd/mm/yyyy"); + strncpy(edt_data->edtbuf1,lin1,MAX_LEN_DATE); + edtReset(edt_data->editor_handle); + edtShow(edt_data->editor_handle); + } + } + else if(edt_data->state EQ TIME_ENTRY) + { + if(check_time(win,edt_data)) + { + TRACE_EVENT("timecheck ok"); + edtClear(edt_data->editor_handle); + edtHide(edt_data->editor_handle); /* verification date successfull */ + date_time_edt_destroy(edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,ENTRY_OK,0,tida_data); + } + else + { + memset(edt_data->edtbuf1, '\0', sizeof(edt_data->edtbuf1));/* initial buffer */ + edt_data->index = 0; + + sprintf(lin2,"%02d:%02d",mfw_td_convert_to_24_hour(currclock), currclock->minute); + strncpy(edt_data->edtbuf1,lin2,MAX_LEN_TIME); + edtReset(edt_data->editor_handle); + edtShow(edt_data->editor_handle); + } + } + else if(edt_data->state EQ DATE_SHOW) + { + date_time_edt_destroy(edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,DATE_ENTRY,0,tida_data); + } /* start date entering */ + + else if(edt_data->state EQ TIME_SHOW) + { + date_time_edt_destroy(edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,TIME_ENTRY,0,tida_data); /* start time entering */ + } + break; + case KCD_RIGHT: /* back to previous menu */ + date_time_edt_destroy(edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,TIDA_ABORT,0,tida_data); + break; + case KCD_MNUUP: /* cursor to right */ + if((edt_data->state EQ DATE_ENTRY) || (edt_data->state EQ TIME_ENTRY)) /* cursor to rigt */ + { + edt_data->index++; + edtChar(edt_data->editor_handle,ecRight); + + if(((edt_data->state EQ DATE_ENTRY) && ((edt_data->index EQ 2)||(edt_data->index EQ 5))) || ((edt_data->state EQ TIME_ENTRY) && (edt_data->index EQ 2))) + { + edt_data->index++; + edtChar(edt_data->editor_handle,ecRight); + } + + } + break; + case KCD_HUP: + case KCD_MNUDOWN: /* cursor to left or clear */ + if((!(edt_data->state EQ DATE_SHOW)) && (!(edt_data->state EQ TIME_SHOW))) + { + if(edt_data->state EQ DATE_ENTRY) + { + if(edt_data->index EQ 0) + ; + else + edt_data->index--; + + if((edt_data->index EQ 2)||(edt_data->index EQ 5)) + { + if(edt_data->index EQ 0) + ; + else + edt_data->index--; + + edtChar(edt_data->editor_handle,ecLeft); + edtChar(edt_data->editor_handle,ecLeft); + } + else + edtChar(edt_data->editor_handle,ecLeft); + } + if(edt_data->state EQ TIME_ENTRY) + { + if(edt_data->index EQ 0) + ; + else + edt_data->index--; + + if(edt_data->index EQ 2) + { + if(edt_data->index EQ 0) + ; + else + edt_data->index--; + + edtChar(edt_data->editor_handle,ecLeft); + edtChar(edt_data->editor_handle,ecLeft); + } + else + edtChar(edt_data->editor_handle,ecLeft); + } + } + else + timStart(edt_data->tim_out_handle); /* waiting for release clear otherwise to previous screen */ + break; + default: + return MFW_EVENT_CONSUMED; + } + return MFW_EVENT_CONSUMED; +} + +/******************************************************************************* + + $Function: check_date + + $Description: check date after date entering + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +static int check_date (T_MFW_HND win, void * edt_dat) +{ + U8 i; + T_tida_edt * edt_data = (T_tida_edt *)edt_dat; + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_tida * tida_data = (T_tida *)win_data->user; + T_MFW_DATE tempdate; + + char internday[3]; + char internmonth[3]; + char internyear[5]; + + char debug[20]; + T_MFW_TIME* currclock; /*SPR 2639*/ + T_MFW_DATE* currdate; + //T_MFW_TIME alarmTime; /*SPR 2639*/ + + + currclock= mfw_td_get_time();/*SPR 2639*/ + currdate =mfw_td_get_date(); + + TRACE_FUNCTION ("MmiTimeDate:check_date"); + + memset(internday, '\0', sizeof(internday));/* initial string */ + memset(internmonth, '\0', sizeof(internmonth)); + memset(internyear, '\0', sizeof(internyear)); + + internday[0] = edt_data->edtbuf1[0]; + internday[1] = edt_data->edtbuf1[1]; + internmonth[0] = edt_data->edtbuf1[3]; + internmonth[1] = edt_data->edtbuf1[4]; + for(i = 0;i<4;i++) + { + internyear[i] = edt_data->edtbuf1[6+i]; + } + + tempdate.month = atoi(internmonth); + if((tempdate.month > 12) || (tempdate.month < 1)) + return FALSE; + + tempdate.day = atoi(internday); + if((tempdate.day > 30) || (tempdate.day < 1)) + { + if(tempdate.day EQ 31) + { + switch(tempdate.month) + { + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: + break; + default: + return FALSE; + + } + } + else + return FALSE; + } + + tempdate.year = atoi(internyear); + + if(tempdate.year < 2000) + return FALSE; + + if((tempdate.month EQ 2) && (tempdate.day EQ 29)) + { + if(!(tempdate.year%4) || (tempdate.year EQ 2000)) + { + if(DateTimeEntryMode == ALARM) + { + alarmDate.day = tempdate.day; + alarmDate.month = tempdate.month; + alarmDate.year = tempdate.year; + } + else + { + + currdate->day = tempdate.day; + currdate->month = tempdate.month; + currdate->year = tempdate.year; + mfw_td_set_date(currdate);/*SPR 2639*/ + } + return TRUE; + } + else + return FALSE; + } + else + { + if(DateTimeEntryMode == ALARM) + { + + + alarmDate.day = tempdate.day; + alarmDate.month = tempdate.month; + alarmDate.year = tempdate.year; + + } + else + { + currdate->day = tempdate.day; + currdate->month = tempdate.month; + currdate->year = tempdate.year; + } + mfw_td_set_date(currdate);/*SPR 2639*/ + return TRUE; + } +} +/******************************************************************************* + + $Function: check_time + + $Description: check time after time entering + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +static int check_time (T_MFW_HND win, void * edt_dat) +{ + T_tida_edt * edt_data = (T_tida_edt *)edt_dat; + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_tida * tida_data = (T_tida *)win_data->user; + T_MFW_TIME tempclock; + char debug[50]; + char internmin[3]; + char internhour[3]; + T_MFW_TIME* currclock; /*SPR 2639*/ + T_MFW_DATE* currdate; + T_MFW_TIME_FORMAT current_format; + //T_MFW_TIME alarmTime; /*SPR 2639*/ + + currclock = mfw_td_get_time();/*SPR 2639*/ + currdate = mfw_td_get_date(); + + current_format = currclock->format; + memset(internmin, '\0', sizeof(internmin));/* initial string */ + memset(internhour, '\0', sizeof(internhour)); + + internhour[0] = edt_data->edtbuf1[0]; + internhour[1] = edt_data->edtbuf1[1]; + internmin[0] = edt_data->edtbuf1[3]; + internmin[1] = edt_data->edtbuf1[4]; + + tempclock.hour = atoi(internhour); + if(tempclock.hour > 23) + return FALSE; + + tempclock.minute = atoi(internmin); + if(tempclock.minute >59) + return FALSE; + if (DateTimeEntryMode == ALARM) + { + alarmTime.hour = tempclock.hour; /*SPR 2639*/ + alarmTime.minute = tempclock.minute; + alarmTime.format = MFW_TIME_FORMAT_24HOUR; + mfw_td_set_alarm(&alarmTime, &alarmDate); + } + else + { + + + currclock->hour = tempclock.hour; + currclock->minute = tempclock.minute; + currclock->format = MFW_TIME_FORMAT_24HOUR; + mfw_td_set_time(currclock);/*SPR 2639*/ + mfw_td_set_time_format(current_format); + } + + return TRUE; +} +/******************************************************************************* + + $Function: tida_edt_tim_out_cb + + $Description: Callback function for timer for time and date + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +static void tida_edt_tim_out_cb(T_MFW_EVENT event,T_MFW_TIM * t) +{ + T_MFW_HND win = mfw_parent(mfw_header()); + + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_tida_edt * tida_edt_data = (T_tida_edt *)win_data->user; + + T_MFW_WIN * win_tida =((T_MFW_HDR *)tida_edt_data->parent_win)->data; + T_tida * tida_data = (T_tida *)win_tida->user; // tida main data + + date_time_edt_destroy(tida_edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,TIDA_CLEAR,0,tida_data); + +} +/******************************************************************************* + + $Function: tida_edt_kbd_long_cb + + $Description: keyboard long event handler for time and date + + $Returns: none. + + $Arguments: + +*******************************************************************************/ +static int tida_edt_kbd_long_cb (MfwEvt e, MfwKbd *kc) +{ + T_MFW_HND win = mfw_parent(mfw_header()); + + T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; + T_tida_edt * edt_data = (T_tida_edt *)win_data->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 + + TRACE_FUNCTION("MmiTimeDate:tida_edt_kbd_long_cb"); + + if ((e & KEY_CLEAR) && (e & KEY_LONG)) + { + + if((!(edt_data->state EQ DATE_SHOW)) && (!(edt_data->state EQ TIME_SHOW))) + { + + if(edt_data->state EQ DATE_ENTRY) + { + date_time_edt_destroy(edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,DATE_SHOW,0,tida_data); + } + else if(edt_data->state EQ TIME_ENTRY) + { + date_time_edt_destroy(edt_data->tida_edt_win); + + SEND_EVENT(tida_data->tida_win,TIME_ENTRY,0,tida_data); + + } + return MFW_EVENT_CONSUMED; + + } + else + { + timStop(edt_data->tim_out_handle); + date_time_edt_destroy(edt_data->tida_edt_win); + SEND_EVENT(tida_data->tida_win,TIDA_TO_IDLE,0,tida_data); + return MFW_EVENT_CONSUMED; + } + } + else + return MFW_EVENT_CONSUMED; +} +#endif /* NEW_EDITOR */ +