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

📄 menus.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}/** * 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 + -