X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fskins2%2Fsrc%2Fdialogs.cpp;h=9d00f26688a1939ddf3551049c1a1fb7e620ca7c;hb=0900f11014557ea895a290d2c1518d739f97a8b6;hp=c6900ed7ea54c1bed80698807fabe7875cd2efd6;hpb=de0246807e7e7ffee8a29b0049d1a26e54609261;p=vlc diff --git a/modules/gui/skins2/src/dialogs.cpp b/modules/gui/skins2/src/dialogs.cpp index c6900ed7ea..9d00f26688 100644 --- a/modules/gui/skins2/src/dialogs.cpp +++ b/modules/gui/skins2/src/dialogs.cpp @@ -1,11 +1,11 @@ /***************************************************************************** * dialogs.cpp ***************************************************************************** - * Copyright (C) 2003 VideoLAN + * Copyright (C) 2003 the VideoLAN team * $Id$ * * Authors: Cyril Deguet - * Olivier Teulière + * Olivier Teulière * * 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 @@ -19,17 +19,19 @@ * * 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. *****************************************************************************/ #include "dialogs.hpp" #include "../commands/async_queue.hpp" #include "../commands/cmd_change_skin.hpp" #include "../commands/cmd_quit.hpp" +#include "../commands/cmd_playlist.hpp" +#include "../commands/cmd_playtree.hpp" /// Callback called when a new skin is chosen -static void showChangeSkinCB( intf_dialog_args_t *pArg ) +void Dialogs::showChangeSkinCB( intf_dialog_args_t *pArg ) { intf_thread_t *pIntf = (intf_thread_t *)pArg->p_arg; @@ -38,12 +40,11 @@ static void showChangeSkinCB( intf_dialog_args_t *pArg ) if( pArg->psz_results[0] ) { // Create a change skin command - CmdChangeSkin *pCmd = new CmdChangeSkin( pIntf, - pArg->psz_results[0] ); + CmdChangeSkin *pCmd = + new CmdChangeSkin( pIntf, sFromLocale( 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 ) ); } } @@ -56,13 +57,46 @@ static void showChangeSkinCB( intf_dialog_args_t *pArg ) } } +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, sFromLocale( pArg->psz_results[0] ) ); + + // Push the command in the asynchronous command queue + AsyncQueue *pQueue = AsyncQueue::instance( pIntf ); + 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->push( CmdGenericPtr( pCmd ) ); + } +} + /// Callback called when the popup menu is requested static 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 ); + p_dialogs->showPopupMenu( new_val.b_bool != 0, INTF_DIALOG_POPUPMENU ); return VLC_SUCCESS; } @@ -135,7 +169,7 @@ bool Dialogs::init() m_pModule = module_Need( m_pProvider, "dialogs provider", NULL, 0 ); if( m_pModule == NULL ) { - msg_Err( getIntf(), "No suitable dialogs provider found" ); + msg_Err( getIntf(), "no suitable dialogs provider found (hint: compile the wxWidgets plugin, and make sure it is loaded properly)" ); vlc_object_destroy( m_pProvider ); m_pProvider = NULL; return false; @@ -159,7 +193,8 @@ bool Dialogs::init() } -void Dialogs::showChangeSkin() +void Dialogs::showFileGeneric( const string &rTitle, const string &rExtensions, + DlgCallback callback, int flags ) { if( m_pProvider && m_pProvider->pf_show_dialog ) { @@ -167,12 +202,14 @@ void Dialogs::showChangeSkin() (intf_dialog_args_t *)malloc( sizeof(intf_dialog_args_t) ); memset( p_arg, 0, sizeof(intf_dialog_args_t) ); - p_arg->psz_title = strdup( _("Open a skin file") ); - p_arg->psz_extensions = - strdup( _("Skin files (*.vlt)|*.vlt|Skin files (*.xml)|*.xml|") ); + 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 = showChangeSkinCB; + p_arg->pf_callback = callback; m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_FILE_GENERIC, 0, p_arg ); @@ -180,6 +217,39 @@ void Dialogs::showChangeSkin() } +void Dialogs::showChangeSkin() +{ + showFileGeneric( _("Open a skin file"), + _("Skin files (*.vlt;*.wsz)|*.vlt;*.wsz|Skin files (*.xml)|*.xml"), + showChangeSkinCB, kOPEN ); +} + + +void Dialogs::showPlaylistLoad() +{ + showFileGeneric( _("Open playlist"), + _("All playlists|*.pls;*.m3u;*.asx;*.b4s;*.xspf|" + "M3U files|*.m3u|" + "XSPF playlist|*.xspf"), + showPlaylistLoadCB, kOPEN ); +} + + +void Dialogs::showPlaylistSave() +{ + showFileGeneric( _("Save playlist"), _("M3U file|*.m3u|XSPF playlist|*.xspf"), + showPlaylistSaveCB, kSAVE ); +} + +void Dialogs::showPlaylist() +{ + if( m_pProvider && m_pProvider->pf_show_dialog ) + { + m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_PLAYLIST, + 0, 0 ); + } +} + void Dialogs::showFileSimple( bool play ) { if( m_pProvider && m_pProvider->pf_show_dialog ) @@ -200,6 +270,16 @@ void Dialogs::showFile( bool play ) } +void Dialogs::showDirectory( bool play ) +{ + if( m_pProvider && m_pProvider->pf_show_dialog ) + { + m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_DIRECTORY, + (int)play, 0 ); + } +} + + void Dialogs::showDisc( bool play ) { if( m_pProvider && m_pProvider->pf_show_dialog ) @@ -240,19 +320,43 @@ void Dialogs::showPrefs() void Dialogs::showFileInfo() { - if( m_pProvider && m_pProvider->pf_show_dialog ) + if( m_pProvider && m_pProvider->pf_show_dialog ) { - m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_FILEINFO, 0, 0 ); + m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_FILEINFO, 0, 0 ); } } -void Dialogs::showPopupMenu( bool bShow ) +void Dialogs::showStreamingWizard() { if( m_pProvider && m_pProvider->pf_show_dialog ) { - m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_POPUPMENU, + m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_WIZARD, 0, 0 ); + } +} + + +void Dialogs::showPopupMenu( bool bShow, int popupType = INTF_DIALOG_POPUPMENU ) +{ + if( m_pProvider && m_pProvider->pf_show_dialog ) + { + m_pProvider->pf_show_dialog( m_pProvider, popupType, (int)bShow, 0 ); } } +void Dialogs::showInteraction( interaction_dialog_t *p_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->p_dialog = p_dialog; + p_arg->p_intf = getIntf(); + + if( m_pProvider && m_pProvider->pf_show_dialog ) + { + m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_INTERACTION, + 0, p_arg ); + } +}