/*****************************************************************************
* menus.cpp : wxWindows plugin for vlc
*****************************************************************************
- * Copyright (C) 2000-2004 VideoLAN
+ * Copyright (C) 2000-2004 the VideoLAN team
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.org>
void Clear();
private:
- /* Event handlers (these functions should _not_ be virtual) */
- void OnClose( wxCommandEvent& event );
- void OnShowDialog( wxCommandEvent& event );
- void OnEntrySelected( wxCommandEvent& event );
-
wxMenu *Menu::CreateDummyMenu();
void Menu::CreateMenuItem( wxMenu *, char *, vlc_object_t * );
wxMenu *Menu::CreateChoicesMenu( char *, vlc_object_t *, bool );
OpenFile_Event,
OpenDisc_Event,
OpenNet_Event,
+ OpenCapture_Event,
+ MediaInfo_Event,
+ Messages_Event,
+ Preferences_Event,
+ Play_Event,
+ Pause_Event,
+ Previous_Event,
+ Next_Event,
+ Stop_Event,
FirstAutoGenerated_Event = wxID_HIGHEST + 1999,
SettingsMenu_Events = wxID_HIGHEST + 5000,
AudioMenu_Events = wxID_HIGHEST + 2000,
VideoMenu_Events = wxID_HIGHEST + 3000,
NavigMenu_Events = wxID_HIGHEST + 4000,
- PopupMenu_Events = wxID_HIGHEST + 6000
+ PopupMenu_Events = wxID_HIGHEST + 6000,
+ Hotkeys_Events = wxID_HIGHEST + 7000
};
BEGIN_EVENT_TABLE(Menu, wxMenu)
EVT_MENU(OpenFile_Event, MenuEvtHandler::OnShowDialog)
EVT_MENU(OpenDisc_Event, MenuEvtHandler::OnShowDialog)
EVT_MENU(OpenNet_Event, MenuEvtHandler::OnShowDialog)
+ EVT_MENU(OpenCapture_Event, MenuEvtHandler::OnShowDialog)
+ EVT_MENU(MediaInfo_Event, MenuEvtHandler::OnShowDialog)
+ EVT_MENU(Messages_Event, MenuEvtHandler::OnShowDialog)
+ EVT_MENU(Preferences_Event, MenuEvtHandler::OnShowDialog)
EVT_MENU(-1, MenuEvtHandler::OnMenuEvent)
END_EVENT_TABLE()
menu->Append( OpenFile_Event, wxU(_("Open &File...")) );
menu->Append( OpenDisc_Event, wxU(_("Open &Disc...")) );
menu->Append( OpenNet_Event, wxU(_("Open &Network Stream...")) );
+ menu->Append( OpenCapture_Event, wxU(_("Open &Capture Device...")) );
+ return menu;
+}
+
+wxMenu *MiscMenu( intf_thread_t *p_intf )
+{
+ wxMenu *menu = new wxMenu;
+ menu->Append( MediaInfo_Event, wxU(_("Media &Info...")) );
+ menu->Append( Messages_Event, wxU(_("&Messages...")) );
+ menu->Append( Preferences_Event, wxU(_("&Preferences...")) );
return menu;
}
void PopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
const wxPoint& pos )
{
-#define MAX_POPUP_ITEMS 35
+#define MAX_POPUP_ITEMS 45
- vlc_object_t *p_object;
+ int minimal = config_GetInt( p_intf, "wxwin-minimal" );
+
+ vlc_object_t *p_object, *p_input;
char *ppsz_varnames[MAX_POPUP_ITEMS];
int pi_objects[MAX_POPUP_ITEMS];
- int i = 0;
+ int i = 0, i_last_separator = 0;
/* Initializations */
memset( pi_objects, 0, MAX_POPUP_ITEMS * sizeof(int) );
- /* Audio menu */
- ppsz_varnames[i++] = _("Audio menu");
- ppsz_varnames[i++] = NULL; /* Separator */
-
- p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_AOUT,
+ /* Input menu */
+ p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
- ppsz_varnames[i] = "audio-device";
+ ppsz_varnames[i] = "bookmark";
pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "audio-channels";
+ ppsz_varnames[i] = "title";
pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "visual";
+ ppsz_varnames[i] = "chapter";
+ pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "program";
+ pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "navigation";
+ pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "dvd_menus";
+ pi_objects[i++] = p_object->i_object_id;
+
+ ppsz_varnames[i] = "video-es";
+ pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "audio-es";
+ pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "spu-es";
pi_objects[i++] = p_object->i_object_id;
- vlc_object_release( p_object );
}
+ p_input = p_object;
+ if( !p_input ) goto interfacemenu;
/* Video menu */
- ppsz_varnames[i++] = NULL; /* Separator */
- ppsz_varnames[i++] = _("Video menu");
- ppsz_varnames[i++] = NULL; /* Separator */
+ if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
+ i_last_separator = i;
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
FIND_ANYWHERE );
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-on-top";
pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "directx-wallpaper";
+ pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "video-snapshot";
+ pi_objects[i++] = p_object->i_object_id;
p_dec_obj = (vlc_object_t *)vlc_object_find( p_object,
VLC_OBJECT_DECODER,
vlc_object_release( p_object );
}
- /* Input menu */
- ppsz_varnames[i++] = NULL; /* Separator */
- ppsz_varnames[i++] = _("Input menu");
- ppsz_varnames[i++] = NULL; /* Separator */
+ /* Audio menu */
+ if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
+ i_last_separator = i;
- p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
+ p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_AOUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
- ppsz_varnames[i] = "bookmark";
- pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "title";
- pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "chapter";
- pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "program";
- pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "navigation";
- pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "dvd_menus";
+ ppsz_varnames[i] = "audio-device";
pi_objects[i++] = p_object->i_object_id;
-
- ppsz_varnames[i] = "video-es";
+ ppsz_varnames[i] = "audio-channels";
pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "audio-es";
+ ppsz_varnames[i] = "visual";
pi_objects[i++] = p_object->i_object_id;
- ppsz_varnames[i] = "spu-es";
+ ppsz_varnames[i] = "equalizer";
pi_objects[i++] = p_object->i_object_id;
-
vlc_object_release( p_object );
}
+ interfacemenu:
/* Interface menu */
- ppsz_varnames[i++] = NULL; /* Separator */
- ppsz_varnames[i++] = _("Interface menu");
- ppsz_varnames[i++] = NULL; /* Separator */
+ if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
+ i_last_separator = i;
/* vlc_object_find is needed because of the dialogs provider case */
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INTF,
FIND_PARENT );
if( p_object != NULL )
{
+#if (wxCHECK_VERSION(2,5,0))
ppsz_varnames[i] = "intf-switch";
pi_objects[i++] = p_object->i_object_id;
+#endif
ppsz_varnames[i] = "intf-add";
pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "intf-skins";
+ pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object );
}
Menu popupmenu( p_intf, PopupMenu_Events );
popupmenu.Populate( i, ppsz_varnames, pi_objects );
-#if 1
/* Add static entries */
- popupmenu.AppendSeparator();
- popupmenu.Append( MenuDummy_Event, wxU("Open..."),
+ if( p_input != NULL )
+ {
+ vlc_value_t val;
+ popupmenu.InsertSeparator( 0 );
+ if (!minimal)
+ {
+ popupmenu.Insert( 0, Stop_Event, wxU(_("Stop")) );
+ popupmenu.Insert( 0, Previous_Event, wxU(_("Previous")) );
+ popupmenu.Insert( 0, Next_Event, wxU(_("Next")) );
+ }
+
+ var_Get( p_input, "state", &val );
+ if( val.i_int == PAUSE_S )
+ popupmenu.Insert( 0, Play_Event, wxU(_("Play")) );
+ else
+ popupmenu.Insert( 0, Pause_Event, wxU(_("Pause")) );
+
+ vlc_object_release( p_input );
+ }
+ else
+ {
+ playlist_t * p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist && p_playlist->i_size )
+ {
+ popupmenu.InsertSeparator( 0 );
+ popupmenu.Insert( 0, Play_Event, wxU(_("Play")) );
+ }
+ if( p_playlist ) vlc_object_release( p_playlist );
+ }
+
+ popupmenu.Append( MenuDummy_Event, wxU(_("Miscellaneous")),
+ MiscMenu( p_intf ), wxT("") );
+ if (!minimal)
+ {
+ popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
OpenStreamMenu( p_intf ), wxT("") );
-#endif
+ }
p_intf->p_sys->p_popup_menu = &popupmenu;
p_parent->PopupMenu( &popupmenu, pos.x, pos.y );
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "visual";
pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "equalizer";
+ pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object );
}
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-on-top";
pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "directx-wallpaper";
+ pi_objects[i++] = p_object->i_object_id;
+ ppsz_varnames[i] = "video-snapshot";
+ pi_objects[i++] = p_object->i_object_id;
p_dec_obj = (vlc_object_t *)vlc_object_find( p_object,
VLC_OBJECT_DECODER,
wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
{
-#define MAX_NAVIG_ITEMS 10
+#define MAX_NAVIG_ITEMS 15
vlc_object_t *p_object;
char *ppsz_varnames[MAX_NAVIG_ITEMS];
FIND_PARENT );
if( p_object != NULL )
{
+#if (wxCHECK_VERSION(2,5,0))
ppsz_varnames[i] = "intf-switch";
pi_objects[i++] = p_object->i_object_id;
+#endif
ppsz_varnames[i] = "intf-add";
pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object );
return menu;
}
-void Menu::OnShowDialog( wxCommandEvent& event )
-{
- if( p_intf->p_sys->pf_show_dialog )
- {
- int i_id;
-
- switch( event.GetId() )
- {
- case OpenFileSimple_Event:
- i_id = INTF_DIALOG_FILE_SIMPLE;
- break;
- case OpenFile_Event:
- i_id = INTF_DIALOG_FILE;
- break;
- case OpenDisc_Event:
- i_id = INTF_DIALOG_DISC;
- break;
- case OpenNet_Event:
- i_id = INTF_DIALOG_NET;
- break;
- default:
- i_id = INTF_DIALOG_FILE;
- break;
-
- }
-
- p_intf->p_sys->pf_show_dialog( p_intf, i_id, 1, 0 );
- }
-}
-
/*****************************************************************************
* A small helper class which intercepts all popup menu events
*****************************************************************************/
case OpenNet_Event:
i_id = INTF_DIALOG_NET;
break;
+ case OpenCapture_Event:
+ i_id = INTF_DIALOG_CAPTURE;
+ break;
+ case MediaInfo_Event:
+ i_id = INTF_DIALOG_FILEINFO;
+ break;
+ case Messages_Event:
+ i_id = INTF_DIALOG_MESSAGES;
+ break;
+ case Preferences_Event:
+ i_id = INTF_DIALOG_PREFS;
+ break;
default:
i_id = INTF_DIALOG_FILE;
break;
void MenuEvtHandler::OnMenuEvent( wxCommandEvent& event )
{
wxMenuItem *p_menuitem = NULL;
+ int i_hotkey_event = p_intf->p_sys->i_first_hotkey_event;
+ int i_hotkeys = p_intf->p_sys->i_hotkeys;
+
+ if( event.GetId() >= Play_Event && event.GetId() <= Stop_Event )
+ {
+ input_thread_t *p_input;
+ playlist_t * p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( !p_playlist ) return;
+
+ switch( event.GetId() )
+ {
+ case Play_Event:
+ case Pause_Event:
+ p_input =
+ (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
+ FIND_ANYWHERE );
+ if( !p_input ) playlist_Play( p_playlist );
+ else
+ {
+ vlc_value_t val;
+ var_Get( p_input, "state", &val );
+ if( val.i_int != PAUSE_S ) val.i_int = PAUSE_S;
+ else val.i_int = PLAYING_S;
+ var_Set( p_input, "state", val );
+ vlc_object_release( p_input );
+ }
+ break;
+ case Stop_Event:
+ playlist_Stop( p_playlist );
+ break;
+ case Previous_Event:
+ playlist_Prev( p_playlist );
+ break;
+ case Next_Event:
+ playlist_Next( p_playlist );
+ break;
+ }
+
+ vlc_object_release( p_playlist );
+ return;
+ }
/* Check if this is an auto generated menu item */
if( event.GetId() < FirstAutoGenerated_Event )
return;
}
+ /* Check if this is an hotkey event */
+ if( event.GetId() >= i_hotkey_event &&
+ event.GetId() < i_hotkey_event + i_hotkeys )
+ {
+ vlc_value_t val;
+
+ val.i_int =
+ p_intf->p_vlc->p_hotkeys[event.GetId() - i_hotkey_event].i_key;
+
+ /* Get the key combination and send it to the hotkey handler */
+ var_Set( p_intf->p_vlc, "key-pressed", val );
+ return;
+ }
+
if( !p_main_interface ||
(p_menuitem = p_main_interface->GetMenuBar()->FindItem(event.GetId()))
== NULL )
{
if( p_intf->p_sys->p_popup_menu )
{
- p_menuitem =
+ p_menuitem =
p_intf->p_sys->p_popup_menu->FindItem( event.GetId() );
}
}
p_menuitemext->i_object_id );
if( p_object == NULL ) return;
+ wxMutexGuiLeave(); // We don't want deadlocks
var_Set( p_object, p_menuitemext->psz_var, p_menuitemext->val );
+ //wxMutexGuiEnter();
vlc_object_release( p_object );
}