X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fgui%2Fwince%2Fmenus.cpp;h=db7306c283be42f6a4801bef0a7fbbafb5df3c59;hb=ed3444539a2fb2c53303f63ddf8974066123e5d9;hp=c1ec2bb1148a2a3344b583d70e0f427b627f348e;hpb=08947dc7785e0b0e4ed1f1a9b36ce5c0fa0f43a7;p=vlc diff --git a/modules/gui/wince/menus.cpp b/modules/gui/wince/menus.cpp index c1ec2bb114..db7306c283 100644 --- a/modules/gui/wince/menus.cpp +++ b/modules/gui/wince/menus.cpp @@ -1,7 +1,7 @@ /***************************************************************************** * menus.cpp : WinCE gui plugin for VLC ***************************************************************************** - * Copyright (C) 2000-2004 VideoLAN + * Copyright (C) 2000-2004 the VideoLAN team * $Id$ * * Authors: Marodon Cedric @@ -19,17 +19,18 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc(), free() */ -#include /* strerror() */ -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include "wince.h" @@ -82,12 +83,16 @@ void PopupMenu( intf_thread_t *p_intf, HWND p_parent, POINT point ) vlc_object_t *p_object, *p_input; char *ppsz_varnames[MAX_POPUP_ITEMS]; int pi_objects[MAX_POPUP_ITEMS]; - vector::iterator iter; int i = 0, i_last_separator = 0; /* Initializations */ memset( pi_objects, 0, MAX_POPUP_ITEMS * sizeof(int) ); + ppsz_varnames[i] = "VLC media player"; + pi_objects[i++] = 0; + ppsz_varnames[i++] = NULL; /* Separator */ + i_last_separator = i; + /* Input menu */ p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE ); @@ -194,6 +199,8 @@ void PopupMenu( intf_thread_t *p_intf, HWND p_parent, POINT point ) HMENU hmenu = CreatePopupMenu(); RefreshMenu( p_intf, &popup_menu, hmenu, i, ppsz_varnames, pi_objects, PopupMenu_Events ); + MenuItemExt::ClearList( &popup_menu ); + /* Add static entries */ if( p_input != NULL ) @@ -214,15 +221,13 @@ void PopupMenu( intf_thread_t *p_intf, HWND p_parent, POINT point ) } else { - playlist_t * p_playlist = - (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); + playlist_t * p_playlist = pl_Yield( p_intf ); if( p_playlist && p_playlist->i_size ) { AppendMenu( hmenu, MF_SEPARATOR, 0, _T("") ); AppendMenu( hmenu, MF_STRING, PlayStream_Event, _T("Play") ); } - if( p_playlist ) vlc_object_release( p_playlist ); + if( p_playlist ) pl_Release( p_playlist ); } AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)MiscMenu( p_intf ), @@ -242,22 +247,17 @@ void RefreshAudioMenu( intf_thread_t *p_intf, HMENU hMenu ) vlc_object_t *p_object; char *ppsz_varnames[MAX_AUDIO_ITEMS]; int pi_objects[MAX_AUDIO_ITEMS]; - vector::iterator iter; int i; /* Delete old menu */ int count = wce_GetMenuItemCount( hMenu ); for( i = 0; i <= count; i++ ) RemoveMenu( hMenu, 0, MF_BYPOSITION ); - + if( p_intf->p_sys->p_audio_menu ) - { - for( iter = p_intf->p_sys->p_audio_menu->begin(); - iter != p_intf->p_sys->p_audio_menu->end(); iter++ ) - delete *iter; - p_intf->p_sys->p_audio_menu->clear(); - } + MenuItemExt::ClearList( p_intf->p_sys->p_audio_menu ); else p_intf->p_sys->p_audio_menu = new vector; + /* Initializations */ memset( pi_objects, 0, MAX_AUDIO_ITEMS * sizeof(int) ); i = 0; @@ -296,22 +296,16 @@ void RefreshVideoMenu( intf_thread_t *p_intf, HMENU hMenu ) vlc_object_t *p_object; char *ppsz_varnames[MAX_VIDEO_ITEMS]; int pi_objects[MAX_VIDEO_ITEMS]; - vector::iterator iter; int i; /* Delete old menu */ int count = wce_GetMenuItemCount( hMenu ); for( i = 0; i <= count; i++ ) RemoveMenu( hMenu, 0, MF_BYPOSITION ); - + if( p_intf->p_sys->p_video_menu ) - { - for( iter = p_intf->p_sys->p_video_menu->begin(); - iter != p_intf->p_sys->p_video_menu->end(); iter++ ) - delete *iter; - p_intf->p_sys->p_video_menu->clear(); - } + MenuItemExt::ClearList( p_intf->p_sys->p_video_menu ); else p_intf->p_sys->p_video_menu = new vector; - + /* Initializations */ memset( pi_objects, 0, MAX_VIDEO_ITEMS * sizeof(int) ); i = 0; @@ -374,20 +368,14 @@ void RefreshNavigMenu( intf_thread_t *p_intf, HMENU hMenu ) vlc_object_t *p_object; char *ppsz_varnames[MAX_NAVIG_ITEMS]; int pi_objects[MAX_NAVIG_ITEMS]; - vector::iterator iter; int i; /* Delete old menu */ int count = wce_GetMenuItemCount( hMenu ); for( i = 0; i <= count; i++ ) RemoveMenu( hMenu, 0, MF_BYPOSITION ); - + if( p_intf->p_sys->p_navig_menu ) - { - for( iter = p_intf->p_sys->p_navig_menu->begin(); - iter != p_intf->p_sys->p_navig_menu->end(); iter++ ) - delete *iter; - p_intf->p_sys->p_navig_menu->clear(); - } + MenuItemExt::ClearList( p_intf->p_sys->p_navig_menu ); else p_intf->p_sys->p_navig_menu = new vector; /* Initializations */ @@ -433,7 +421,6 @@ void RefreshSettingsMenu( intf_thread_t *p_intf, HMENU hMenu ) vlc_object_t *p_object; char *ppsz_varnames[MAX_SETTINGS_ITEMS]; int pi_objects[MAX_SETTINGS_ITEMS]; - vector::iterator iter; int i; /* Delete old menu */ @@ -441,12 +428,7 @@ void RefreshSettingsMenu( intf_thread_t *p_intf, HMENU hMenu ) for( i = 0; i <= count; i++ ) RemoveMenu( hMenu, 0, MF_BYPOSITION ); if( p_intf->p_sys->p_settings_menu ) - { - for( iter = p_intf->p_sys->p_settings_menu->begin(); - iter != p_intf->p_sys->p_settings_menu->end(); iter++ ) - delete(*iter); - p_intf->p_sys->p_settings_menu->clear(); - } + MenuItemExt::ClearList( p_intf->p_sys->p_settings_menu ); else p_intf->p_sys->p_settings_menu = new vector; /* Initializations */ @@ -459,8 +441,6 @@ void RefreshSettingsMenu( intf_thread_t *p_intf, HMENU hMenu ) vlc_object_find( p_intf, VLC_OBJECT_INTF, FIND_PARENT ); if( p_object != NULL ) { - ppsz_varnames[i] = "intf-switch"; - pi_objects[i++] = p_object->i_object_id; ppsz_varnames[i] = "intf-add"; pi_objects[i++] = p_object->i_object_id; vlc_object_release( p_object ); @@ -474,12 +454,12 @@ void RefreshSettingsMenu( intf_thread_t *p_intf, HMENU hMenu ) /***************************************************************************** * Refresh the menu. *****************************************************************************/ -void RefreshMenu( intf_thread_t *p_intf, vector *_p_menuList, - HMENU hMenu , int i_count, char **ppsz_varnames, +void RefreshMenu( intf_thread_t *p_intf, vector *p_menu_list, + HMENU hMenu , int i_count, char **ppsz_varnames, int *pi_objects, int i_start_id ) { vlc_object_t *p_object; - vlc_bool_t b_section_empty = VLC_FALSE; + bool b_section_empty = false; int i; /* Initializations */ @@ -496,7 +476,7 @@ void RefreshMenu( intf_thread_t *p_intf, vector *_p_menuList, } AppendMenu( hMenu, MF_SEPARATOR, 0, _T("") ); - b_section_empty = VLC_TRUE; + b_section_empty = true; continue; } @@ -505,15 +485,15 @@ void RefreshMenu( intf_thread_t *p_intf, vector *_p_menuList, AppendMenu( hMenu, MF_GRAYED | MF_STRING, MenuDummy_Event, _FROMMB(ppsz_varnames[i]) ); - b_section_empty = VLC_FALSE; + b_section_empty = false; continue; } - p_object = (vlc_object_t *)vlc_object_get( p_intf, pi_objects[i] ); + p_object = (vlc_object_t *)vlc_object_get( pi_objects[i] ); if( p_object == NULL ) continue; - b_section_empty = VLC_FALSE; - CreateMenuItem( p_intf, _p_menuList, hMenu, ppsz_varnames[i], + b_section_empty = false; + CreateMenuItem( p_intf, p_menu_list, hMenu, ppsz_varnames[i], p_object, &i_item_id ); vlc_object_release( p_object ); } @@ -529,7 +509,7 @@ void RefreshMenu( intf_thread_t *p_intf, vector *_p_menuList, /***************************************************************************** * Private methods. *****************************************************************************/ -void CreateMenuItem( intf_thread_t *p_intf, vector *_p_menuList, +void CreateMenuItem( intf_thread_t *p_intf, vector *p_menu_list, HMENU hMenu, char *psz_var, vlc_object_t *p_object, int *pi_item_id ) { @@ -571,11 +551,12 @@ void CreateMenuItem( intf_thread_t *p_intf, vector *_p_menuList, if( i_type & VLC_VAR_HASCHOICE ) { - hMenuItem = CreateChoicesMenu( p_intf, _p_menuList, psz_var, + hMenuItem = CreateChoicesMenu( p_intf, p_menu_list, psz_var, p_object, pi_item_id ); AppendMenu( hMenu, MF_STRING | MF_POPUP, (UINT)hMenuItem, _FROMMB(text.psz_string ? text.psz_string : psz_var) ); - if( text.psz_string ) free( text.psz_string ); + if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING ) free( val.psz_string ); + free( text.psz_string ); return; } @@ -586,7 +567,7 @@ void CreateMenuItem( intf_thread_t *p_intf, vector *_p_menuList, _FROMMB(text.psz_string ? text.psz_string : psz_var) ); pMenuItemExt = new MenuItemExt( p_intf, *pi_item_id, psz_var, p_object->i_object_id, val, i_type ); - _p_menuList->push_back( pMenuItemExt ); + p_menu_list->push_back( pMenuItemExt ); break; case VLC_VAR_BOOL: @@ -595,23 +576,23 @@ void CreateMenuItem( intf_thread_t *p_intf, vector *_p_menuList, _FROMMB(text.psz_string ? text.psz_string : psz_var) ); pMenuItemExt = new MenuItemExt( p_intf, *pi_item_id, psz_var, p_object->i_object_id, val, i_type ); - _p_menuList->push_back( pMenuItemExt ); + p_menu_list->push_back( pMenuItemExt ); CheckMenuItem( hMenu, *pi_item_id , ( val.b_bool ? MF_UNCHECKED : MF_CHECKED ) | - MF_BYCOMMAND ); + MF_BYCOMMAND ); break; default: - if( text.psz_string ) free( text.psz_string ); + free( text.psz_string ); return; } if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING ) free( val.psz_string ); - if( text.psz_string ) free( text.psz_string ); + free( text.psz_string ); } HMENU CreateChoicesMenu( intf_thread_t *p_intf, - vector *_p_menuList, char *psz_var, + vector *p_menu_list, char *psz_var, vlc_object_t *p_object, int *pi_item_id ) { MenuItemExt *pMenuItemExt; @@ -666,7 +647,7 @@ HMENU CreateChoicesMenu( intf_thread_t *p_intf, switch( i_type & VLC_VAR_TYPE ) { case VLC_VAR_VARIABLE: - hMenuItem = CreateChoicesMenu( p_intf, _p_menuList, + hMenuItem = CreateChoicesMenu( p_intf, p_menu_list, val_list.p_list->p_values[i].psz_string, p_object, pi_item_id ); AppendMenu( hSubMenu, MF_STRING | MF_POPUP, (UINT)hMenuItem, _FROMMB(text_list.p_list->p_values[i].psz_string ? @@ -683,7 +664,7 @@ HMENU CreateChoicesMenu( intf_thread_t *p_intf, val_list.p_list->p_values[i].psz_string) ); pMenuItemExt = new MenuItemExt( p_intf, *pi_item_id, psz_var, p_object->i_object_id, another_val, i_type ); - _p_menuList->push_back( pMenuItemExt ); + p_menu_list->push_back( pMenuItemExt ); if( !(i_type & VLC_VAR_ISCOMMAND) && val.psz_string && !strcmp( val.psz_string, @@ -698,7 +679,7 @@ HMENU CreateChoicesMenu( intf_thread_t *p_intf, text_list.p_list->p_values[i].psz_string : psz_tmp)); pMenuItemExt = new MenuItemExt( p_intf, *pi_item_id, psz_var, p_object->i_object_id, val_list.p_list->p_values[i], i_type ); - _p_menuList->push_back( pMenuItemExt ); + p_menu_list->push_back( pMenuItemExt ); if( val_list.p_list->p_values[i].i_int == val.i_int ) CheckMenuItem( hSubMenu, *pi_item_id, MF_CHECKED | MF_BYCOMMAND); @@ -740,6 +721,7 @@ void OnMenuEvent( intf_thread_t *p_intf, int id ) MenuItemExt *p_menuitemext = NULL; vector::iterator iter; + if( p_intf->p_sys->p_settings_menu ) for( iter = p_intf->p_sys->p_settings_menu->begin(); iter != p_intf->p_sys->p_settings_menu->end(); iter++ ) if( (*iter)->id == id ) @@ -747,13 +729,17 @@ void OnMenuEvent( intf_thread_t *p_intf, int id ) p_menuitemext = *iter; break; } + + if( p_intf->p_sys->p_audio_menu && !p_menuitemext ) for( iter = p_intf->p_sys->p_audio_menu->begin(); - iter != p_intf->p_sys->p_audio_menu->end(); iter++ ) + iter != p_intf->p_sys->p_audio_menu->end(); iter++ ) if( (*iter)->id == id ) { p_menuitemext = *iter; break; } + + if( p_intf->p_sys->p_video_menu && !p_menuitemext ) for( iter = p_intf->p_sys->p_video_menu->begin(); iter != p_intf->p_sys->p_video_menu->end(); iter++ ) if( (*iter)->id == id ) @@ -761,6 +747,8 @@ void OnMenuEvent( intf_thread_t *p_intf, int id ) p_menuitemext = *iter; break; } + + if( p_intf->p_sys->p_navig_menu && !p_menuitemext ) for( iter = p_intf->p_sys->p_navig_menu->begin(); iter != p_intf->p_sys->p_navig_menu->end(); iter++ ) if( (*iter)->id == id ) @@ -772,7 +760,7 @@ void OnMenuEvent( intf_thread_t *p_intf, int id ) if( p_menuitemext ) { vlc_object_t *p_object = (vlc_object_t *) - vlc_object_get( p_intf, p_menuitemext->i_object_id ); + vlc_object_get( p_menuitemext->i_object_id ); if( p_object == NULL ) return; var_Set( p_object, p_menuitemext->psz_var, p_menuitemext->val ); @@ -812,7 +800,19 @@ MenuItemExt::MenuItemExt( intf_thread_t *p_intf, int _id, char *_psz_var, MenuItemExt::~MenuItemExt() { - if( psz_var ) free( psz_var ); - if( ((i_val_type & VLC_VAR_TYPE) == VLC_VAR_STRING) - && val.psz_string ) free( val.psz_string ); + free( psz_var ); + if( ( i_val_type & VLC_VAR_TYPE ) == VLC_VAR_STRING ) + free( val.psz_string ); }; + +void MenuItemExt::ClearList( vector *p_menu_list ) +{ + vector::iterator iter; + + if( !p_menu_list ) return; + for( iter = p_menu_list->begin(); iter != p_menu_list->end(); iter++ ) + { + delete *iter; + } + p_menu_list->clear(); +}