📄 mmiband.c
字号:
static T_MFW_HND mmi_band_build_freq_list( MfwHnd parent_window, UBYTE available_freqs)
{
T_FREQ_INFO *data = (T_FREQ_INFO *)ALLOC_MEMORY (sizeof (T_FREQ_INFO));
T_MFW_WIN *win;
int index;
TRACE_FUNCTION("mmi_band_build_freq_list()");
/*
* Create window handler
*/
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;
}
current_data = data; /* SPR#998 - SH - Store handle for data; used by callbacks */
/*
* 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: 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;
/* SPR#998 - SH - Remove code that implements custom checkbox implementaton,
* as checkboxes now handled by mfw */
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) */
/* SPR#998 - SH - Removed custom checkbox implementation */
numberOfEntries = 0;
for (index=0; index<MAX_NUMBER_OF_FREQS; index++)
{
if (data->available_freqs & band_list[index])
{
data->type[numberOfEntries] = band_list[index];
numberOfEntries++;
}
}
/* If there are no entries, show "Empty List" message and exit */
if (numberOfEntries==0)
{
ShowMessage(data->parent, TxtEmptyList, TxtNull);
mmi_band_freq_list_destroy(win);
return;
}
/* Get the status of all the frequencies */
/* SPR#998 - SH - Use data->mode */
if (band_get_current_radio_mode(&data->mode, &data->selected_freqs) >= MFW_BAND_OK)
{
/* If we're not in manual choose manual */
if (data->mode!=MFW_BAND_MODE_Manual)
{
data->selected_freqs = data->available_freqs; /* SH - default when choosing manual is all */
band_radio_mode_switch(MFW_BAND_MODE_Manual, data->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])
{
/* SPR#998 - SH - Removed code, checkboxes now handled by MFW */
mnuInitDataItem(&data->menu_list_data->List[numberOfEntries]);
/* Here we specify the function that checks and unchecks the checkboxes */
data->menu_list_data->List[numberOfEntries].func = mmi_band_menu_func;
data->menu_list_data->List[numberOfEntries].str = (char *)Freq2StrID(band_list[index]);
/* Here we specify the function that returns the checkbox status of any menu item */
data->menu_list_data->List[numberOfEntries].flagFunc = mmi_band_menu_flag;
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 = FALSE; /* SPR#998 - SH - We no longer alter the menu strings */
data->menu_list_data->Attr = (MfwMnuAttr*)&Freq_menuAttrib;
data->menu_list_data->autoDestroy = FALSE;
/* 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, TxtReadError, TxtNull);
}
break;
case BAND_DESTROY:
TRACE_EVENT("mmi_band_freq_exec_cb() Event:BAND_DESTROY");
/*
* Free Memory
*/
/* SPR#998 - SH - No longer free allocated strings here */
numberOfEntries = data->no_of_entries;
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)
{
/* SPR#998 - SH - Selecting a checkbox is handled now by the checkbox functions,
* so much less is required here */
T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data;
T_FREQ_INFO *data = (T_FREQ_INFO *)win_data->user;
TRACE_FUNCTION("mmi_band_freq_list_cb");
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)
{
winShow(Parent);
}
}
/*******************************************************************************
$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;
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);
current_data = NULL; /* SPR#998 - SH - Set the data handle to NULL */
}
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;
}
/*******************************************************************************
$Function: mmi_band_menu_func
$Description: SPR#998 - SH - Added
Select or deselect a checkbox item. The appropriate band function is
called, to ensure that the selection is valid.
$Returns: None.
$Arguments: m, ma, mi - not used
*******************************************************************************/
int mmi_band_menu_func(MfwMnu* menu, MfwMnuItem* item)
{
T_FREQ_INFO *data = current_data;
TRACE_FUNCTION("mmi_band_menu_func");
data->selected_freqs ^= data->type[menu->lCursor[menu->level]]; /* Toggle this band */
if (band_radio_mode_switch(MFW_BAND_MODE_Manual, data->selected_freqs) >= MFW_BAND_OK)
{
mnuUpdate(menu);
}
else
{
data->selected_freqs ^= data->type[menu->lCursor[menu->level]]; /* Undo change */
ShowMessage(data->freq_win, TxtFailed, TxtNull);
}
return 1;
}
/*******************************************************************************
$Function: mmi_band_menu_flag
$Description: Attribut function for menu entries.
$Returns: Checked or unchecked
$Arguments: m, ma, mi - not used
*******************************************************************************/
USHORT mmi_band_menu_flag( struct MfwMnuTag *menu, struct MfwMnuAttrTag *attr, struct MfwMnuItemTag *item )
{
T_FREQ_INFO *data = current_data; /* SPR#998 - SH - Get data from static handle */
int currentOption;
TRACE_FUNCTION("mmi_band_menu_flag()");
TRACE_EVENT_P1("Freq info data: %x", data);
/* Identify current menu option */
currentOption = mnuIdentify(attr, item);
/* If we find it, work out if it's checked or not */
if (currentOption>-1)
{
if (data->selected_freqs & data->type[currentOption])
return MNU_ITEM_CHECKED;
else
return MNU_ITEM_UNCHECKED;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -