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

📄 dialogs.cpp

📁 video linux conference
💻 CPP
字号:
/***************************************************************************** * dialogs.cpp ***************************************************************************** * Copyright (C) 2003 VideoLAN * $Id: dialogs.cpp 10101 2005-03-02 16:47:31Z robux4 $ * * Authors: Cyril Deguet     <asmax@via.ecp.fr> *          Olivier Teuli鑢e <ipkiss@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * 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. *****************************************************************************/#include "dialogs.hpp"#include "../commands/async_queue.hpp"#include "../commands/cmd_change_skin.hpp"#include "../commands/cmd_quit.hpp"#include "../commands/cmd_playlist.hpp"/// Callback called when a new skin is chosenvoid Dialogs::showChangeSkinCB( intf_dialog_args_t *pArg ){    intf_thread_t *pIntf = (intf_thread_t *)pArg->p_arg;    if( pArg->i_results )    {        if( pArg->psz_results[0] )        {            // Create a change skin command            CmdChangeSkin *pCmd =                new CmdChangeSkin( pIntf, pArg->psz_results[0] );            // Push the command in the asynchronous command queue            AsyncQueue *pQueue = AsyncQueue::instance( pIntf );            pQueue->remove( "change skin" );            pQueue->push( CmdGenericPtr( pCmd ) );        }    }    else if( !pIntf->p_sys->p_theme )    {        // If no theme is already loaded, it's time to quit!        CmdQuit *pCmd = new CmdQuit( pIntf );        AsyncQueue *pQueue = AsyncQueue::instance( pIntf );        pQueue->push( CmdGenericPtr( pCmd ) );    }}void Dialogs::showPlaylistLoadCB( intf_dialog_args_t *pArg ){    intf_thread_t *pIntf = (intf_thread_t *)pArg->p_arg;    if( pArg->i_results && pArg->psz_results[0] )    {        // Create a Playlist Load command        CmdPlaylistLoad *pCmd =            new CmdPlaylistLoad( pIntf, pArg->psz_results[0] );        // Push the command in the asynchronous command queue        AsyncQueue *pQueue = AsyncQueue::instance( pIntf );        pQueue->remove( "load playlist" );        pQueue->push( CmdGenericPtr( pCmd ) );    }}void Dialogs::showPlaylistSaveCB( intf_dialog_args_t *pArg ){    intf_thread_t *pIntf = (intf_thread_t *)pArg->p_arg;    if( pArg->i_results && pArg->psz_results[0] )    {        // Create a Playlist Save command        CmdPlaylistSave *pCmd =            new CmdPlaylistSave( pIntf, pArg->psz_results[0] );        // Push the command in the asynchronous command queue        AsyncQueue *pQueue = AsyncQueue::instance( pIntf );        pQueue->remove( "load playlist" );        pQueue->push( CmdGenericPtr( pCmd ) );    }}/// Callback called when the popup menu is requestedstatic int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,                        vlc_value_t old_val, vlc_value_t new_val, void *param ){    Dialogs *p_dialogs = (Dialogs *)param;    p_dialogs->showPopupMenu( new_val.b_bool );    return VLC_SUCCESS;}Dialogs::Dialogs( intf_thread_t *pIntf ):    SkinObject( pIntf ), m_pProvider( NULL ), m_pModule( NULL ){}Dialogs::~Dialogs(){    if( m_pProvider && m_pModule )    {        // Detach the dialogs provider from its parent interface        vlc_object_detach( m_pProvider );        module_Unneed( m_pProvider, m_pModule );        vlc_object_destroy( m_pProvider );    }    /* Unregister callbacks */    var_DelCallback( getIntf()->p_sys->p_playlist, "intf-popupmenu",                     PopupMenuCB, this );}Dialogs *Dialogs::instance( intf_thread_t *pIntf ){    if( ! pIntf->p_sys->p_dialogs )    {        Dialogs *pDialogs = new Dialogs( pIntf );        if( pDialogs->init() )        {            // Initialization succeeded            pIntf->p_sys->p_dialogs = pDialogs;        }        else        {            // Initialization failed            delete pDialogs;        }    }    return pIntf->p_sys->p_dialogs;}void Dialogs::destroy( intf_thread_t *pIntf ){    if( pIntf->p_sys->p_dialogs )    {        delete pIntf->p_sys->p_dialogs;        pIntf->p_sys->p_dialogs = NULL;    }}bool Dialogs::init(){    // Allocate descriptor    m_pProvider = (intf_thread_t *)vlc_object_create( getIntf(),                                                      VLC_OBJECT_DIALOGS );    if( m_pProvider == NULL )    {        msg_Err( getIntf(), "out of memory" );        return false;    }    m_pModule = module_Need( m_pProvider, "dialogs provider", NULL, 0 );    if( m_pModule == NULL )    {        msg_Err( getIntf(), "No suitable dialogs provider found" );        vlc_object_destroy( m_pProvider );        m_pProvider = NULL;        return false;    }    // Attach the dialogs provider to its parent interface    vlc_object_attach( m_pProvider, getIntf() );    // Initialize dialogs provider    // (returns as soon as initialization is done)    if( m_pProvider->pf_run )    {        m_pProvider->pf_run( m_pProvider );    }    /* Register callback for the intf-popupmenu variable */    var_AddCallback( getIntf()->p_sys->p_playlist, "intf-popupmenu",                     PopupMenuCB, this );    return true;}void Dialogs::showFileGeneric( const string &rTitle, const string &rExtensions,                               DlgCallback callback, int flags ){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        intf_dialog_args_t *p_arg =            (intf_dialog_args_t *)malloc( sizeof(intf_dialog_args_t) );        memset( p_arg, 0, sizeof(intf_dialog_args_t) );        p_arg->psz_title = strdup( rTitle.c_str() );        p_arg->psz_extensions = strdup( rExtensions.c_str() );        p_arg->b_save = flags & kSAVE;        p_arg->b_multiple = flags & kMULTIPLE;        p_arg->p_arg = getIntf();        p_arg->pf_callback = callback;        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_FILE_GENERIC,                                     0, p_arg );    }}void Dialogs::showChangeSkin(){    showFileGeneric( _("Open a skin file"),                     _("Skin files (*.vlt)|*.vlt|Skin files (*.xml)|*.xml|"),                     showChangeSkinCB, kOPEN );}void Dialogs::showPlaylistLoad(){    showFileGeneric( _("Open playlist"),                     _("All playlists|*.pls;*.m3u;*.asx;*.b4s|M3U files|*.m3u"),                     showPlaylistLoadCB, kOPEN );}void Dialogs::showPlaylistSave(){    showFileGeneric( _("Save playlist"), _("M3U file|*.m3u"),                     showPlaylistSaveCB, kSAVE );}void Dialogs::showFileSimple( bool play ){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_FILE_SIMPLE,                                     (int)play, 0 );    }}void Dialogs::showFile( bool play ){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_FILE,                                     (int)play, 0 );    }}void Dialogs::showDisc( bool play ){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_DISC,                                     (int)play, 0 );    }}void Dialogs::showNet( bool play ){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_NET,                                     (int)play, 0 );    }}void Dialogs::showMessages(){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_MESSAGES, 0, 0 );    }}void Dialogs::showPrefs(){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_PREFS, 0, 0 );    }}void Dialogs::showFileInfo(){   if( m_pProvider && m_pProvider->pf_show_dialog )    {       m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_FILEINFO, 0, 0 );    }}void Dialogs::showPopupMenu( bool bShow ){    if( m_pProvider && m_pProvider->pf_show_dialog )    {        m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_POPUPMENU,                                     (int)bShow, 0 );    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -