mmiband.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 785 行 · 第 1/2 页
C
785 行
data->freq_win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_band_freq_win_cb);
if (data->freq_win EQ NULL)
{
return NULL;
}
/*
* connect the dialog data to the MFW-window
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_band_freq_exec_cb;
data->mmi_control.data = data;
win = ((T_MFW_HDR *)data->freq_win)->data;
win->user = (void *)data;
data->parent = parent_window;
data->available_freqs = available_freqs;
winShow(data->freq_win);
/*
* return window handle
*/
return data->freq_win;
}
/*******************************************************************************
$Function: BandmenuItemCheck
$Description: Exec callback function of the listmenu's icon to be drawn
$Returns: none
$Arguments: 0, 1
*******************************************************************************/
USHORT BandmenuItemCheck(struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
{
UBYTE selected_freqs;
T_MFW_BAND_MODE mode;
UBYTE index;
if (band_get_current_radio_mode(&mode, &selected_freqs) >= MFW_BAND_OK)
{
if((strcmp(mi->str, Freq2Str(band_list[0]))==0) && (selected_freqs & band_list[0]))
return FLAGFUNC_TRUE_ICON;
else if((strcmp(mi->str, Freq2Str(band_list[1]))==0) && (selected_freqs & band_list[1]))
return FLAGFUNC_TRUE_ICON;
else if((strcmp(mi->str, Freq2Str(band_list[2]))==0) && (selected_freqs & band_list[2]))
return FLAGFUNC_TRUE_ICON;
else if((strcmp(mi->str, Freq2Str(band_list[3]))==0) && (selected_freqs & band_list[3]))
return FLAGFUNC_TRUE_ICON;
else if((strcmp(mi->str, Freq2Str(band_list[4]))==0) && (selected_freqs & band_list[4]))
return FLAGFUNC_TRUE_ICON;
// for (index=0; index<MAX_NUMBER_OF_FREQS; index++)
// {
// if((strcmp(mi->str, Freq2Str(band_list[index]))==0) && (selected_freqs & band_list[index]))
// return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
//}
}
}
/*******************************************************************************
$Function: mmi_band_freq_exec_cb
$Description: Exec callback function of the information Numbers window
$Returns: none
$Arguments: win - window handler
event - mfw event
parameter - optional data.
*******************************************************************************/
void mmi_band_freq_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data;
T_FREQ_INFO *data = (T_FREQ_INFO *)win_data->user;
UBYTE numberOfEntries;
int index;
T_MFW_BAND_MODE maxMode;
char *menuItem;
UBYTE selected_freqs;
T_MFW_BAND_MODE mode;
TRACE_FUNCTION ("mmi_band_freq_exec_cb()");
switch (event)
{
case BAND_INIT:
TRACE_EVENT("mmi_band_freq_exec_cb() Event:BAND_INIT");
/* initialization of administrative data */
data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));
if(!data->menu_list_data)
{
TRACE_EVENT("Failed memory alloc 1 ");
return;
}
band_get_radio_modes(&maxMode, &data->available_freqs);
/* Run through the list of possible frequencies first to obtain
the number of frequencies permitted (how many will be in the menu) */
numberOfEntries = 0;
data->max_menu_item_len = 0;
for (index=0; index<MAX_NUMBER_OF_FREQS; index++)
{
if (data->available_freqs & band_list[index])
{
data->type[numberOfEntries] = band_list[index];
numberOfEntries++;
}
menuItem = Freq2Str(band_list[index]);
if (strlen(menuItem)>data->max_menu_item_len)
data->max_menu_item_len = strlen(menuItem);
}
/* If there are no entries, show "Empty List" message and exit */
if (numberOfEntries==0)
{
ShowMessage(data->parent, TxtEmptyList, TxtNull,0);
mmi_band_freq_list_destroy(win);
return;
}
/* Get the status of all the frequencies */
if (band_get_current_radio_mode(&mode, &selected_freqs) >= MFW_BAND_OK)
{
/* If we're not in manual choose manual */
if (mode!=MFW_BAND_MODE_Manual)
{
selected_freqs = data->available_freqs; /* SH - default when choosing manual is all */
band_radio_mode_switch(MFW_BAND_MODE_Manual, selected_freqs);
}
/* Allocate the memory for the list structure */
data->no_of_entries = numberOfEntries;
data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( numberOfEntries * sizeof(T_MFW_MNU_ITEM) );
if(!data->menu_list_data->List)
{
TRACE_EVENT("Failed memory alloc 2");
return;
}
/* Allocate memory for the menu texts, and populate the list structure */
numberOfEntries = 0;
for (index=0; index<MAX_NUMBER_OF_FREQS; index++)
{
if (data->available_freqs & band_list[index])
{
/* Allocate text string length - +2 is for Null term & status char */
data->menu_text[numberOfEntries] =
(char *)ALLOC_MEMORY((data->max_menu_item_len)*sizeof(char)); //xsf changed 2002.09.25
//(char *)ALLOC_MEMORY((data->max_menu_item_len+2)*sizeof(char));
/* Put a "-" at the start if the item is selected */
/*
if (selected_freqs & band_list[index])
{
strcpy(data->menu_text[numberOfEntries], "-");
}
else
{
strcpy(data->menu_text[numberOfEntries], " ");
}
strcat(data->menu_text[numberOfEntries], Freq2Str(band_list[index]));*/
/* 2004/06 sunsj modify for picture manage */
data->menu_list_data->List[numberOfEntries].icon = GET_ICONATTR(ICON_SITUATION3, 0);//&situation3Icon; //0;
data->menu_list_data->List[numberOfEntries].exta = 0;
data->menu_list_data->List[numberOfEntries].edit = 0;
data->menu_list_data->List[numberOfEntries].menu = 0;
data->menu_list_data->List[numberOfEntries].func = NULL;
data->menu_list_data->List[numberOfEntries].str = Freq2Str(band_list[index]);//data->menu_text[numberOfEntries];
data->menu_list_data->List[numberOfEntries].flagFunc = BandmenuItemCheck;
numberOfEntries++;
}
}
data->menu_list_data->ListLength =numberOfEntries;
data->menu_list_data->ListPosition = 1;
data->menu_list_data->CursorPosition = 1;
data->menu_list_data->SnapshotSize = numberOfEntries;
data->menu_list_data->Font = 0;
data->menu_list_data->LeftSoftKey = TxtSoftSelect;
data->menu_list_data->RightSoftKey = TxtSoftBack;
data->menu_list_data->KeyEvents = KEY_ALL;
data->menu_list_data->Reason = 0;
data->menu_list_data->Strings = TRUE;
data->menu_list_data->Attr = &Freq_menuAttrib;
data->menu_list_data->autoDestroy = FALSE;
data->menu_list_data->ListMenuFlag =1; //xsf add for list menu title 2002.09.25
data->menu_list_data->ListMenuHeadStr = (char *) MmiRsrcGetText(TxtManual);
/* Create the dynamic menu window */
listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)mmi_band_freq_list_cb,0);
}
else /* We haven't been able to read the status */
{
ShowMessage(win, TxtNull,TxtReadError, REMIND_FAILURE);
}
break;
case BAND_DESTROY:
TRACE_EVENT("mmi_band_freq_exec_cb() Event:BAND_DESTROY");
/*
* Free Memory
*/
numberOfEntries = data->no_of_entries;
for (index=0; index<numberOfEntries; index++)
{
//xsf changed 10.11 FREE_MEMORY((UBYTE *)data->menu_text[index],(data->max_menu_item_len+2)*sizeof(char));
FREE_MEMORY((UBYTE *)data->menu_text[index],(data->max_menu_item_len)*sizeof(char));
}
if (data->menu_list_data != NULL)
{
FREE_MEMORY ((void *)data->menu_list_data->List, numberOfEntries * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
}
FREE_MEMORY ((void *)data, sizeof (T_FREQ_INFO));
break;
default:
break;
}
}
/*******************************************************************************
$Function: mmi_band_freq_list_cb
$Description: Callback function for the info num list.
$Returns: none
$Arguments: Parent - parent window.
ListData - Menu item list
*******************************************************************************/
void mmi_band_freq_list_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data;
T_FREQ_INFO *data = (T_FREQ_INFO *)win_data->user;
int index;
T_MFW_BAND_MODE mode;
UBYTE selected_freqs;
UBYTE returnstatus;
if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR))
{
listsDestroy(ListData->win);
mmi_band_freq_list_destroy(data->freq_win);
}
else if((ListData->Reason EQ LISTS_REASON_SELECT) || (ListData->Reason EQ LISTS_REASON_OK)) //xsf add for list menu KCD_OK=KCD_LEFT 2003.02.18
{
if (band_get_current_radio_mode(&mode, &selected_freqs) >= MFW_BAND_OK)
{
selected_freqs ^= data->type[ListData->ListPosition]; /* Toggle this band */
returnstatus = band_radio_mode_switch(MFW_BAND_MODE_Manual, selected_freqs);
if ( returnstatus >= MFW_BAND_OK) //>= to ==
{
/* Update the status of all menu entries with a '-' or not */
/*xsf remarked this 10.11 for (index=0; index<data->no_of_entries; index++)
{
if (selected_freqs & data->type[index])
{
data->menu_text[index][0] = '-';
}
else
{
data->menu_text[index][0] = ' ';
}
}*/
winShow(ListData->win);
//winShow(Parent);
}
else
{
data->available_freqs ^= data->type[ListData->ListPosition]; /* Undo change */
ShowMessage(Parent, TxtNull,TxtFailed, REMIND_FAILURE);
}
}
else
{
ShowMessage(Parent, TxtNull,TxtFailed, REMIND_FAILURE);
}
}
}
/*******************************************************************************
$Function: mmi_band_freq_list_destroy
$Description: Destroy the info num window.
$Returns: none
$Arguments: own_window- current window
*******************************************************************************/
static void mmi_band_freq_list_destroy(MfwHnd own_window)
{
T_MFW_WIN *win_data;
T_FREQ_INFO *data;
UBYTE numberOfEntries;
int index;
TRACE_FUNCTION ("mmi_band_freq_list_destroy()");
if (own_window)
{
win_data = ((T_MFW_HDR *)own_window)->data;
data = (T_FREQ_INFO *)win_data->user;
if (data)
{
/*
* Free Memory
*/
SEND_EVENT (own_window, BAND_DESTROY, 0, 0);
/*
* Delete WIN handler
*/
win_delete (own_window);
}
else
{
TRACE_EVENT ("mmi_band_freq_list_destroy() called twice");
}
}
}
/*******************************************************************************
$Function: mmi_band_freq_win_cb
$Description: Window callback function for the info numbers window.
$Returns: none
$Arguments: w - mfw window handler
e - mfw event
*******************************************************************************/
static int mmi_band_freq_win_cb (MfwEvt e, MfwWin *w) /* yyy window event handler */
{
TRACE_FUNCTION ("mmi_band_freq_win_cb()");
switch (e)
{
case MfwWinVisible: /* window is visible */
break;
case MfwWinFocussed: /* input focus / selected */
case MfwWinDelete: /* window will be deleted */
default:
return MFW_EVENT_REJECTED;
}
return MFW_EVENT_CONSUMED;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?