📄 menus.cpp
字号:
}/** * Main Audio Menu */QMenu *QVLCMenu::AudioMenu( intf_thread_t *p_intf, QMenu * current ){ vector<int> objects; vector<const char *> varnames; vlc_object_t *p_aout; input_thread_t *p_input; if( !current ) current = new QMenu(); if( current->isEmpty() ) { ACT_ADD( current, "audio-es", qtr( "Audio &Track" ) ); ACT_ADD( current, "audio-device", qtr( "Audio &Device" ) ); ACT_ADD( current, "audio-channels", qtr( "Audio &Channels" ) ); current->addSeparator(); ACT_ADD( current, "visual", qtr( "&Visualizations" ) ); } p_input = THEMIM->getInput(); if( p_input ) vlc_object_yield( p_input ); p_aout = ( vlc_object_t * ) vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE ); AudioAutoMenuBuilder( p_aout, p_input, objects, varnames ); if( p_aout ) vlc_object_release( p_aout ); if( p_input ) vlc_object_release( p_input ); return Populate( p_intf, current, varnames, objects );}/** * Main Video Menu * Subtitles are part of Video. **/QMenu *QVLCMenu::VideoMenu( intf_thread_t *p_intf, QMenu *current ){ vlc_object_t *p_vout; input_thread_t *p_input; vector<int> objects; vector<const char *> varnames; if( !current ) current = new QMenu(); if( current->isEmpty() ) { ACT_ADD( current, "video-es", qtr( "Video &Track" ) ); QAction *action; QMenu *submenu = new QMenu( qtr( "&Subtitles Track" ), current ); action = current->addMenu( submenu ); action->setData( "spu-es" ); addDPStaticEntry( submenu, qtr( "Load File..." ), "", "", SLOT( loadSubtitlesFile() ) ); submenu->addSeparator(); ACT_ADD( current, "fullscreen", qtr( "&Fullscreen" ) ); ACT_ADD( current, "zoom", qtr( "&Zoom" ) ); ACT_ADD( current, "deinterlace", qtr( "&Deinterlace" ) ); ACT_ADD( current, "aspect-ratio", qtr( "&Aspect Ratio" ) ); ACT_ADD( current, "crop", qtr( "&Crop" ) ); ACT_ADD( current, "video-on-top", qtr( "Always &On Top" ) );#ifdef WIN32 ACT_ADD( current, "directx-wallpaper", qtr( "DirectX Wallpaper" ) );#endif ACT_ADD( current, "video-snapshot", qtr( "Sna&pshot" ) ); /* ACT_ADD( current, "ffmpeg-pp-q", qtr( "Decoder" ) ); */ } p_input = THEMIM->getInput(); if( p_input ) vlc_object_yield( p_input ); p_vout = ( vlc_object_t * )vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE ); VideoAutoMenuBuilder( p_vout, p_input, objects, varnames ); if( p_vout ) vlc_object_release( p_vout ); if( p_input ) vlc_object_release( p_input ); return Populate( p_intf, current, varnames, objects );}/** * Navigation Menu * For DVD, MP4, MOV and other chapter based format **/QMenu *QVLCMenu::NavigMenu( intf_thread_t *p_intf, QMenu *menu ){ vlc_object_t *p_object; vector<int> objects; vector<const char *> varnames; if( !menu ) menu = new QMenu(); if( menu->isEmpty() ) { addDPStaticEntry( menu, qtr( I_MENU_GOTOTIME ), "","", SLOT( gotoTimeDialog() ), "Ctrl+T" ); menu->addSeparator(); ACT_ADD( menu, "bookmark", qtr( "&Bookmarks" ) ); ACT_ADD( menu, "title", qtr( "T&itle" ) ); ACT_ADD( menu, "chapter", qtr( "&Chapter" ) ); ACT_ADD( menu, "program", qtr( "&Program" ) ); ACT_ADD( menu, "navigation", qtr( "&Navigation" ) ); } p_object = ( vlc_object_t * )vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE ); InputAutoMenuBuilder( p_object, objects, varnames ); PUSH_VAR( "prev-title" ); PUSH_VAR( "next-title" ); PUSH_VAR( "prev-chapter" ); PUSH_VAR( "next-chapter" ); EnableDPStaticEntries( menu, ( p_object != NULL ) ); if( p_object ) { vlc_object_release( p_object ); } return Populate( p_intf, menu, varnames, objects, true );}/** * Service Discovery SubMenu **/QMenu *QVLCMenu::SDMenu( intf_thread_t *p_intf ){ QMenu *menu = new QMenu(); menu->setTitle( qtr( I_PL_SD ) ); char **ppsz_longnames; char **ppsz_names = services_discovery_GetServicesNames( p_intf, &ppsz_longnames ); if( !ppsz_names ) return menu; char **ppsz_name = ppsz_names, **ppsz_longname = ppsz_longnames; for( ; *ppsz_name; ppsz_name++, ppsz_longname++ ) { QAction *a = new QAction( qfu( *ppsz_longname ), menu ); a->setCheckable( true ); if( playlist_IsServicesDiscoveryLoaded( THEPL, *ppsz_name ) ) a->setChecked( true ); CONNECT( a , triggered(), THEDP->SDMapper, map() ); THEDP->SDMapper->setMapping( a, QString( *ppsz_name ) ); menu->addAction( a ); if( !strcmp( *ppsz_name, "podcast" ) ) { QAction *b = new QAction( qtr( "Configure podcasts..." ), menu ); //b->setEnabled( a->isChecked() ); menu->addAction( b ); CONNECT( b, triggered(), THEDP, podcastConfigureDialog() ); } free( *ppsz_name ); free( *ppsz_longname ); } free( ppsz_names ); free( ppsz_longnames ); return menu;}/** * Help/About Menu**/QMenu *QVLCMenu::HelpMenu( QMenu *current ){ QMenu *menu = new QMenu( current ); addDPStaticEntry( menu, qtr( "&Help..." ) , "", ":/help", SLOT( helpDialog() ), "F1" );#ifdef UPDATE_CHECK addDPStaticEntry( menu, qtr( "Check for &Updates..." ) , "", "", SLOT( updateDialog() ), "");#endif menu->addSeparator(); addDPStaticEntry( menu, qtr( I_MENU_ABOUT ), "", ":/info", SLOT( aboutDialog() ), "Ctrl+F1" ); return menu;}/***************************************************************************** * Popup menus - Right Click menus * *****************************************************************************/#define POPUP_BOILERPLATE \ unsigned int i_last_separator = 0; \ vector<int> objects; \ vector<const char *> varnames; \ input_thread_t *p_input = THEMIM->getInput();#define CREATE_POPUP \ Populate( p_intf, menu, varnames, objects ); \ p_intf->p_sys->p_popup_menu = menu; \ menu->popup( QCursor::pos() ); \ p_intf->p_sys->p_popup_menu = NULL; \ i_last_separator = 0;void QVLCMenu::PopupMenuControlEntries( QMenu *menu, intf_thread_t *p_intf, input_thread_t *p_input ){ if( p_input ) { vlc_value_t val; var_Get( p_input, "state", &val ); if( val.i_int == PLAYING_S ) addMIMStaticEntry( p_intf, menu, qtr( "Pause" ), "", ":/pause", SLOT( togglePlayPause() ) ); else addMIMStaticEntry( p_intf, menu, qtr( "Play" ), "", ":/play", SLOT( togglePlayPause() ) ); } else if( THEPL->items.i_size ) addMIMStaticEntry( p_intf, menu, qtr( "Play" ), "", ":/play", SLOT( togglePlayPause() ) ); else addDPStaticEntry( menu, qtr( "Play" ), "", ":/play", SLOT( openDialog() ) ); addMIMStaticEntry( p_intf, menu, qtr( "Stop" ), "", ":/stop", SLOT( stop() ) ); addMIMStaticEntry( p_intf, menu, qtr( "Previous" ), "", ":/previous", SLOT( prev() ) ); addMIMStaticEntry( p_intf, menu, qtr( "Next" ), "", ":/next", SLOT( next() ) );}void QVLCMenu::PopupMenuStaticEntries( intf_thread_t *p_intf, QMenu *menu ){#if 0 QMenu *toolsmenu = ToolsMenu( p_intf, menu, false, true ); toolsmenu->setTitle( qtr( "Tools" ) ); menu->addMenu( toolsmenu );#endif QMenu *openmenu = new QMenu( qtr( "Open" ), menu ); addDPStaticEntry( openmenu, qtr( "&Open File..." ), "", ":/file-asym", SLOT( openFileDialog() ) ); addDPStaticEntry( openmenu, qtr( I_OPEN_FOLDER ), "", ":/folder-grey", SLOT( PLOpenDir() ) ); addDPStaticEntry( openmenu, qtr( "Open &Disc..." ), "", ":/disc", SLOT( openDiscDialog() ) ); addDPStaticEntry( openmenu, qtr( "Open &Network..." ), "", ":/network", SLOT( openNetDialog() ) ); addDPStaticEntry( openmenu, qtr( "Open &Capture Device..." ), "", ":/capture-card", SLOT( openCaptureDialog() ) ); menu->addMenu( openmenu ); menu->addSeparator();#if 0 QMenu *helpmenu = HelpMenu( menu ); helpmenu->setTitle( qtr( "Help" ) ); menu->addMenu( helpmenu );#endif addDPStaticEntry( menu, qtr( "Quit" ), "", ":/quit", SLOT( quit() ), "Ctrl+Q" );}/* Video Tracks and Subtitles tracks */void QVLCMenu::VideoPopupMenu( intf_thread_t *p_intf ){ POPUP_BOILERPLATE; if( p_input ) { vlc_object_yield( p_input ); vlc_object_t *p_vout = ( vlc_object_t * )vlc_object_find( p_input, VLC_OBJECT_VOUT, FIND_CHILD ); if( p_vout ) { VideoAutoMenuBuilder( p_vout, p_input, objects, varnames ); vlc_object_release( p_vout ); } vlc_object_release( p_input ); } QMenu *menu = new QMenu(); CREATE_POPUP;}/* Audio Tracks */void QVLCMenu::AudioPopupMenu( intf_thread_t *p_intf ){ POPUP_BOILERPLATE; if( p_input ) { vlc_object_yield( p_input ); vlc_object_t *p_aout = ( vlc_object_t * )vlc_object_find( p_input, VLC_OBJECT_AOUT, FIND_ANYWHERE ); AudioAutoMenuBuilder( p_aout, p_input, objects, varnames ); if( p_aout ) vlc_object_release( p_aout ); vlc_object_release( p_input ); } QMenu *menu = new QMenu(); CREATE_POPUP;}/* Navigation stuff, and general menus ( open ) */void QVLCMenu::MiscPopupMenu( intf_thread_t *p_intf ){ vlc_value_t val; POPUP_BOILERPLATE; if( p_input ) { vlc_object_yield( p_input ); varnames.push_back( "audio-es" ); InputAutoMenuBuilder( VLC_OBJECT( p_input ), objects, varnames ); PUSH_SEPARATOR; } QMenu *menu = new QMenu(); Populate( p_intf, menu, varnames, objects ); menu->addSeparator(); PopupMenuControlEntries( menu, p_intf, p_input ); menu->addSeparator(); PopupMenuStaticEntries( p_intf, menu ); p_intf->p_sys->p_popup_menu = menu; menu->popup( QCursor::pos() ); p_intf->p_sys->p_popup_menu = NULL;}/* Main Menu that sticks everything together */void QVLCMenu::PopupMenu( intf_thread_t *p_intf, bool show ){ MainInterface *mi = p_intf->p_sys->p_mi; if( show ) { /* Delete and recreate a popup if there is one */ if( p_intf->p_sys->p_popup_menu ) delete p_intf->p_sys->p_popup_menu; QMenu *menu = new QMenu(); QMenu *submenu; QAction *action; bool b_isFullscreen = false; POPUP_BOILERPLATE; PopupMenuControlEntries( menu, p_intf, p_input ); menu->addSeparator(); if( p_input ) { vlc_object_t *p_vout = (vlc_object_t *) vlc_object_find( p_input, VLC_OBJECT_VOUT, FIND_CHILD ); /* Add a fullscreen switch button */ if( p_vout ) { vlc_value_t val; var_Get( p_vout, "fullscreen", &val ); b_isFullscreen = !( !val.b_bool ); if( b_isFullscreen ) CreateAndConnect( menu, "fullscreen", qtr( "Leave Fullscreen" ),"" , ITEM_NORMAL, p_vout->i_object_id, val, VLC_VAR_BOOL, b_isFullscreen ); vlc_object_release( p_vout ); } menu->addSeparator(); vlc_object_yield( p_input ); InputAutoMenuBuilder( VLC_OBJECT( p_input ), objects, varnames ); vlc_object_release( p_input ); submenu = new QMenu( menu ); action = menu->addMenu( AudioMenu( p_intf, submenu ) ); action->setText( qtr( "&Audio" ) ); if( action->menu()->isEmpty() ) action->setEnabled( false ); submenu = new QMenu( menu ); action = menu->addMenu( VideoMenu( p_intf, submenu ) ); action->setText( qtr( "&Video" ) ); if( action->menu()->isEmpty() ) action->setEnabled( false ); submenu = new QMenu( menu ); action = menu->addMenu( NavigMenu( p_intf, submenu ) ); action->setText( qtr( "&Playback" ) ); if( action->menu()->isEmpty() ) action->setEnabled( false ); } menu->addSeparator(); /* Add some special entries for windowed mode: Interface Menu */ if( !b_isFullscreen ) { submenu = new QMenu( qtr( "Interface" ), menu ); if( mi ) { submenu->addAction( QIcon( ":/playlist" ), qtr( "Show Playlist" ), mi, SLOT( togglePlaylist() ) ); } addDPStaticEntry( submenu, qtr( I_MENU_EXT ), "", ":/settings", SLOT( extendedDialog() ) ); if( mi ) { action = submenu->addAction( QIcon( "" ), qtr( "Minimal View..." ), mi, SLOT( toggleMinimalView() ) ); action->setCheckable( true ); action->setChecked( !( mi->getControlsVisibilityStatus() & CONTROLS_VISIBLE ) ); action = submenu->addAction( QIcon( "" ), qtr( "Toggle Fullscreen Interface" ), mi, SLOT( toggleFullScreen() ) ); action->setCheckable( true ); action->setChecked( mi->isFullScreen() ); } else /* We are using the skins interface. If not, this entry will not show. */ { objects.clear(); varnames.clear(); vlc_object_t *p_object = ( vlc_object_t* ) vlc_object_find( p_intf, VLC_OBJECT_INTF, FIND_PARENT );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -