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

📄 mmiband.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 2 页
字号:

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 + -