From a94647f04b28484b49f16ce252523b38343b6b58 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20Stenac?= Date: Sat, 9 Dec 2006 18:12:05 +0000 Subject: [PATCH] Misc cleanups in Qt4. (Closes:#736) Fix m3u export --- NEWS | 8 +- include/vlc_intf_strings.h | 36 +- .../qt4/components/playlist/standardpanel.cpp | 31 +- modules/gui/qt4/dialogs/messages.cpp | 2 +- modules/gui/qt4/dialogs_provider.cpp | 359 ++++++++++-------- modules/gui/qt4/dialogs_provider.hpp | 8 +- modules/gui/qt4/menus.cpp | 18 +- modules/misc/playlist/m3u.c | 36 +- 8 files changed, 302 insertions(+), 196 deletions(-) diff --git a/NEWS b/NEWS index 24d6d7237b..61ffa6d7c2 100644 --- a/NEWS +++ b/NEWS @@ -11,9 +11,11 @@ Important notes: XXX: DETAILED INSTRUCTIONS HERE :XXX * This version of VLC contains a new interface for Windows and Linux. This interface lacks a few features that used to be present in vlc 0.8.6: - "Streaming wizard" and "VLM control". These features will be replaced - by a better alternative in the next version. If you absolutely need these - features, we advise you to keep vlc 0.8.6 + - "Streaming wizard" and "VLM control". These features will be replaced + by a better alternative in the next version. If you absolutely need these + features, we advise you to keep vlc 0.8.6 + - Similarly, "Bookmarks" will be reintroduced in an improved version at a + later point Changes: -------- diff --git a/include/vlc_intf_strings.h b/include/vlc_intf_strings.h index f0d110d06d..4f2d9e9fbe 100644 --- a/include/vlc_intf_strings.h +++ b/include/vlc_intf_strings.h @@ -30,10 +30,20 @@ /*************** Open dialogs **************/ -#define I_POP_SEL_FILES N_("Select one or more files to open") +#define I_OP_OPF N_("Quick &Open File...") +#define I_OP_ADVOP N_("&Advanced Open...") +#define I_OP_OPDIR N_("Open &Directory...") + +#define I_OP_SEL_FILES N_("Select one or more files to open") /******************* Menus *****************/ +#define I_MENU_INFO N_("Information...") +#define I_MENU_MSG N_("Messages...") +#define I_MENU_EXT N_("Extended settings...") + +#define I_MENU_ABOUT N_("About VLC media player...") + /* Playlist popup */ #define I_POP_PLAY N_("Play") #define I_POP_PREPARSE N_("Fetch information") @@ -44,6 +54,30 @@ #define I_POP_STREAM N_("Stream...") #define I_POP_SAVE N_("Save...") +/*************** Playlist *************/ + +#define I_PL_LOOP N_("Repeat all") +#define I_PL_REPEAT N_("Repeat one") +#define I_PL_NOREPEAT N_("No repeat") + +#define I_PL_RANDOM N_("Random") +#define I_PL_NORANDOM N_("No random") + +#define I_PL_ADDPL N_("Add to playlist") +#define I_PL_ADDML N_("Add to media library") + +#define I_PL_ADDF N_("Add file...") +#define I_PL_ADVADD N_("Advanced open...") +#define I_PL_ADDDIR N_("Add directory...") + +#define I_PL_SAVE N_("Save playlist to file...") +#define I_PL_LOAD N_("Load playlist file...") + +#define I_PL_SEARCH N_("Search") +#define I_PL_FILTER N_("Search filter") + +#define I_PL_SD N_("Additional sources") + /*************** Preferences *************/ #define I_HIDDEN_ADV N_( "Some options are available but hidden. "\ diff --git a/modules/gui/qt4/components/playlist/standardpanel.cpp b/modules/gui/qt4/components/playlist/standardpanel.cpp index e873141a20..cde0a792ed 100644 --- a/modules/gui/qt4/components/playlist/standardpanel.cpp +++ b/modules/gui/qt4/components/playlist/standardpanel.cpp @@ -27,6 +27,8 @@ #include "components/playlist/panels.hpp" #include "util/customwidgets.hpp" +#include + #include #include #include @@ -53,7 +55,7 @@ StandardPLPanel::StandardPLPanel( BasePlaylistWidget *_parent, view->setIconSize( QSize(20,20) ); view->setAlternatingRowColors( true ); view->header()->resizeSection( 0, 230 ); - view->header()->resizeSection( 2, 60 ); + view->header()->resizeSection( 1, 170 ); view->header()->setSortIndicatorShown( true ); view->header()->setClickable( true ); @@ -95,9 +97,9 @@ StandardPLPanel::StandardPLPanel( BasePlaylistWidget *_parent, QSpacerItem *spacer = new QSpacerItem( 10, 20 );buttons->addItem( spacer ); - QLabel *filter = new QLabel( qfu( "&Search:" ) + " " ); + QLabel *filter = new QLabel( qtr(I_PL_SEARCH) + " " ); buttons->addWidget( filter ); - searchLine = new ClickLineEdit( qfu( "Playlist filter" ), 0 ); + searchLine = new ClickLineEdit( qtr(I_PL_FILTER), 0 ); CONNECT( searchLine, textChanged(QString), this, search(QString)); buttons->addWidget( searchLine ); filter->setBuddy( searchLine ); @@ -117,17 +119,17 @@ void StandardPLPanel::toggleRepeat() if( model->hasRepeat() ) { model->setRepeat( false ); model->setLoop( true ); - repeatButton->setText( qtr( "Repeat All" ) ); + repeatButton->setText( qtr(I_PL_LOOP) ); } else if( model->hasLoop() ) { model->setRepeat( false ) ; model->setLoop( false ); - repeatButton->setText( qtr( "No Repeat" ) ); + repeatButton->setText( qtr(I_PL_NOREPEAT) ); } else { model->setRepeat( true ); - repeatButton->setText( qtr( "Repeat One" ) ); + repeatButton->setText( qtr(I_PL_REPEAT) ); } } @@ -135,7 +137,7 @@ void StandardPLPanel::toggleRandom() { bool prev = model->hasRandom(); model->setRandom( !prev ); - randomButton->setText( prev ? qtr( "No Random" ) : qtr( "Random" ) ); + randomButton->setText( prev ? qtr(I_PL_NORANDOM) : qtr(I_PL_RANDOM) ); } void StandardPLPanel::handleExpansion( const QModelIndex &index ) @@ -159,13 +161,13 @@ void StandardPLPanel::setCurrentRootId( int _new ) currentRootId == THEPL->p_local_onelevel->i_id ) { addButton->setEnabled( true ); - addButton->setToolTip( qtr("Add to playlist" ) ); + addButton->setToolTip( qtr(I_PL_ADDPL) ); } else if( currentRootId == THEPL->p_ml_category->i_id || currentRootId == THEPL->p_ml_onelevel->i_id ) { addButton->setEnabled( true ); - addButton->setToolTip( qtr("Add to media library" ) ); + addButton->setToolTip( qtr(I_PL_ADDML) ); } else addButton->setEnabled( false ); @@ -177,15 +179,16 @@ void StandardPLPanel::add() if( currentRootId == THEPL->p_local_category->i_id || currentRootId == THEPL->p_local_onelevel->i_id ) { - popup->addAction( qtr("Add file"), THEDP, SLOT( simplePLAppendDialog() ) ); - popup->addAction( qtr("Advanced add"), THEDP, SLOT( PLAppendDialog() ) ); + popup->addAction( qtr(I_PL_ADDF), THEDP, SLOT(simplePLAppendDialog())); + popup->addAction( qtr(I_PL_ADVADD), THEDP, SLOT(PLAppendDialog()) ); + popup->addAction( qtr(I_PL_ADDDIR), THEDP, SLOT( PLAppendDir()) ); } else if( currentRootId == THEPL->p_ml_category->i_id || currentRootId == THEPL->p_ml_onelevel->i_id ) { - popup->addAction( qtr("Add file"), THEDP, SLOT( simpleMLAppendDialog() ) ); - popup->addAction( qtr("Advanced add"), THEDP, SLOT( MLAppendDialog() ) ); - popup->addAction( qtr("Directory"), THEDP, SLOT( openMLDirectory() ) ); + popup->addAction( qtr(I_PL_ADDF), THEDP, SLOT(simpleMLAppendDialog())); + popup->addAction( qtr(I_PL_ADVADD), THEDP, SLOT( MLAppendDialog() ) ); + popup->addAction( qtr(I_PL_ADDDIR), THEDP, SLOT( MLAppendDir() ) ); } popup->popup( QCursor::pos() ); } diff --git a/modules/gui/qt4/dialogs/messages.cpp b/modules/gui/qt4/dialogs/messages.cpp index 31f81b575d..c2a69c32ac 100644 --- a/modules/gui/qt4/dialogs/messages.cpp +++ b/modules/gui/qt4/dialogs/messages.cpp @@ -156,7 +156,7 @@ bool MessagesDialog::save() p_intf->p_libvlc->psz_homedir, "Texts / Logs (*.log *.txt);; All (*.*) "); - if( saveLogFileName != NULL ) + if( !saveLogFileName.isNull() ) { QFile file(saveLogFileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp index 21b39b3d8f..622820b4a3 100644 --- a/modules/gui/qt4/dialogs_provider.cpp +++ b/modules/gui/qt4/dialogs_provider.cpp @@ -66,6 +66,12 @@ DialogsProvider::~DialogsProvider() MediaInfoDialog::killInstance(); } +void DialogsProvider::quit() +{ + p_intf->b_die = VLC_TRUE; + QApplication::quit(); +} + void DialogsProvider::customEvent( QEvent *event ) { if( event->type() == DialogEvent_Type ) @@ -90,7 +96,7 @@ void DialogsProvider::customEvent( QEvent *event ) case INTF_DIALOG_MISCPOPUPMENU: popupMenu( de->i_dialog ); break; case INTF_DIALOG_FILEINFO: - MediaInfoDialog(); break; + mediaInfoDialog(); break; case INTF_DIALOG_INTERACTION: doInteraction( de->p_arg ); break; case INTF_DIALOG_VLM: @@ -103,11 +109,51 @@ void DialogsProvider::customEvent( QEvent *event ) } } +/**************************************************************************** + * Individual simple dialogs + ****************************************************************************/ void DialogsProvider::playlistDialog() { PlaylistDialog::getInstance( p_intf )->toggleVisible(); } +void DialogsProvider::prefsDialog() +{ + PrefsDialog::getInstance( p_intf )->toggleVisible(); +} +void DialogsProvider::extendedDialog() +{ + ExtendedDialog::getInstance( p_intf )->toggleVisible(); +} + +void DialogsProvider::messagesDialog() +{ + MessagesDialog::getInstance( p_intf )->toggleVisible(); +} + +void DialogsProvider::helpDialog() +{ + HelpDialog::getInstance( p_intf )->toggleVisible(); +} + +void DialogsProvider::aboutDialog() +{ + AboutDialog::getInstance( p_intf )->toggleVisible(); +} + +void DialogsProvider::mediaInfoDialog() +{ + MediaInfoDialog::getInstance( p_intf )->toggleVisible(); +} + +void DialogsProvider::bookmarksDialog() +{ +} + +/**************************************************************************** + * All the open/add stuff + ****************************************************************************/ + void DialogsProvider::openDialog() { openDialog( 0 ); @@ -123,49 +169,144 @@ void DialogsProvider::openDialog( int i_tab ) OpenDialog::getInstance( p_intf->p_sys->p_mi , p_intf )->showTab( i_tab ); } -void DialogsProvider::doInteraction( intf_dialog_args_t *p_arg ) +/**** Simple open ****/ + +QStringList DialogsProvider::showSimpleOpen() { - InteractionDialog *qdialog; - interaction_dialog_t *p_dialog = p_arg->p_dialog; - switch( p_dialog->i_action ) + QString FileTypes; + FileTypes = _("Media Files"); + FileTypes += " ( "; + FileTypes += EXTENSIONS_MEDIA; + FileTypes += ");;"; + FileTypes += _("Video Files"); + FileTypes += " ( "; + FileTypes += EXTENSIONS_VIDEO; + FileTypes += ");;"; + FileTypes += _("Sound Files"); + FileTypes += " ( "; + FileTypes += EXTENSIONS_AUDIO; + FileTypes += ");;"; + FileTypes += _("PlayList Files"); + FileTypes += " ( "; + FileTypes += EXTENSIONS_PLAYLIST; + FileTypes += ");;"; + FileTypes += _("All Files"); + FileTypes += " (*.*)"; + FileTypes.replace(QString(";*"), QString(" *")); + return QFileDialog::getOpenFileNames( NULL, qfu(I_OP_SEL_FILES ), + p_intf->p_libvlc->psz_homedir, FileTypes ); +} + +void DialogsProvider::addFromSimple( bool pl, bool go) +{ + QStringList files = DialogsProvider::showSimpleOpen(); + int i = 0; + foreach( QString file, files ) { - case INTERACT_NEW: - qdialog = new InteractionDialog( p_intf, p_dialog ); - p_dialog->p_private = (void*)qdialog; - if( !(p_dialog->i_status == ANSWERED_DIALOG) ) - qdialog->show(); - break; - case INTERACT_UPDATE: - qdialog = (InteractionDialog*)(p_dialog->p_private); - if( qdialog) - qdialog->update(); - break; - case INTERACT_HIDE: - qdialog = (InteractionDialog*)(p_dialog->p_private); - if( qdialog ) - qdialog->hide(); - p_dialog->i_status = HIDDEN_DIALOG; - break; - case INTERACT_DESTROY: - qdialog = (InteractionDialog*)(p_dialog->p_private); - if( !p_dialog->i_flags & DIALOG_NONBLOCKING_ERROR ) - delete qdialog; - p_dialog->i_status = DESTROYED_DIALOG; - break; + const char * psz_utf8 = qtu( file ); + playlist_Add( THEPL, psz_utf8, NULL, + go ? ( PLAYLIST_APPEND | ( i ? 0 : PLAYLIST_GO ) | + ( i ? PLAYLIST_PREPARSE : 0 ) ) + : ( PLAYLIST_APPEND | PLAYLIST_PREPARSE ), + PLAYLIST_END, + pl ? VLC_TRUE : VLC_FALSE ); + i++; } } -void DialogsProvider::quit() +void DialogsProvider::simplePLAppendDialog() { - p_intf->b_die = VLC_TRUE; - QApplication::quit(); + addFromSimple( true, false ); } -void DialogsProvider::MediaInfoDialog() +void DialogsProvider::simpleMLAppendDialog() { - MediaInfoDialog::getInstance( p_intf )->toggleVisible(); + addFromSimple( false, false ); +} + +void DialogsProvider::simpleOpenDialog() +{ + addFromSimple( true, true ); +} + +void DialogsProvider::openPlaylist() +{ + QStringList files = showSimpleOpen(); + foreach( QString file, files ) + { + playlist_Import( THEPL, qtu(file) ); + } +} + +void DialogsProvider::savePlaylist() +{ + QFileDialog *qfd = new QFileDialog( NULL, + qtr("Choose a filename to save playlist"), + p_intf->p_libvlc->psz_homedir, + qfu("XSPF playlist (*.xspf);; ") + + qfu("M3U playlist (*.m3u);; Any (*.*) ") ); + qfd->setFileMode( QFileDialog::AnyFile ); + qfd->setAcceptMode( QFileDialog::AcceptSave ); + qfd->setConfirmOverwrite( true ); + + if( qfd->exec() == QDialog::Accepted ) + { + if( qfd->selectedFiles().count() > 0 ) + { + char *psz_module, *psz_m3u = "export-m3u", + *psz_xspf = "export-xspf"; + + QString file = qfd->selectedFiles().first(); + QString filter = qfd->selectedFilter(); + + if( file.contains(".xsp") || + ( filter.contains(".xspf") && !file.contains(".m3u") ) ) + { + psz_module = psz_xspf; + if( !file.contains( ".xsp" ) ) + file.append( ".xspf" ); + } + else + { + psz_module = psz_m3u; + if( !file.contains( ".m3u" ) ) + file.append( ".m3u" ); + } + + playlist_Export( THEPL, qtu(file), THEPL->p_playlist_category, + psz_module); + } + } + delete qfd; +} + +static void openDirectory( intf_thread_t* p_intf, bool pl, bool go ) +{ + QString dir = QFileDialog::getExistingDirectory ( 0, + _("Open directory") ); + input_item_t *p_input = input_ItemNewExt( THEPL, qtu(dir), NULL, + 0, NULL, -1 ); + playlist_AddInput( THEPL, p_input, + go ? ( PLAYLIST_APPEND | PLAYLIST_GO ) : PLAYLIST_APPEND, + PLAYLIST_END, pl); + input_Read( THEPL, p_input, VLC_FALSE ); +} + +void DialogsProvider::PLAppendDir() +{ + openDirectory( p_intf, true, false ); +} + +void DialogsProvider::MLAppendDir() +{ + openDirectory( p_intf, false , false ); } + +/**************************************************************************** + * Sout emulation + ****************************************************************************/ + void DialogsProvider::streamingDialog() { OpenDialog *o = new OpenDialog( p_intf->p_sys->p_mi, p_intf, true ); @@ -189,29 +330,9 @@ void DialogsProvider::streamingDialog() delete o; } -void DialogsProvider::prefsDialog() -{ - PrefsDialog::getInstance( p_intf )->toggleVisible(); -} -void DialogsProvider::extendedDialog() -{ - ExtendedDialog::getInstance( p_intf )->toggleVisible(); -} - -void DialogsProvider::messagesDialog() -{ - MessagesDialog::getInstance( p_intf )->toggleVisible(); -} - -void DialogsProvider::helpDialog() -{ - HelpDialog::getInstance( p_intf )->toggleVisible(); -} - -void DialogsProvider::aboutDialog() -{ - AboutDialog::getInstance( p_intf )->toggleVisible(); -} +/**************************************************************************** + * Menus / Interaction + ****************************************************************************/ void DialogsProvider::menuAction( QObject *data ) { @@ -234,115 +355,43 @@ void DialogsProvider::SDMenuAction( QString data ) } -void DialogsProvider::simplePLAppendDialog() -{ - QStringList files = showSimpleOpen(); - QString file; - foreach( file, files ) - { - const char * psz_utf8 = qtu( file ); - playlist_Add( THEPL, psz_utf8, NULL, - PLAYLIST_APPEND | PLAYLIST_PREPARSE, PLAYLIST_END, VLC_TRUE ); - } -} - -void DialogsProvider::simpleMLAppendDialog() -{ - QStringList files = showSimpleOpen(); - QString file; - foreach( file, files ) - { - const char * psz_utf8 = qtu( file ); - playlist_Add( THEPL, psz_utf8, psz_utf8, - PLAYLIST_APPEND | PLAYLIST_PREPARSE, PLAYLIST_END, - VLC_TRUE); - } -} - -void DialogsProvider::simpleOpenDialog() -{ - QStringList files = showSimpleOpen(); - QString file; - for( size_t i = 0 ; i< files.size(); i++ ) - { - const char * psz_utf8 = qtu( files[i] ); - /* Play the first one, parse and enqueue the other ones */ - playlist_Add( THEPL, psz_utf8, NULL, - PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO) | - ( i ? PLAYLIST_PREPARSE : 0 ), - PLAYLIST_END, VLC_TRUE ); - } -} - -void DialogsProvider::openPlaylist() +void DialogsProvider::doInteraction( intf_dialog_args_t *p_arg ) { - QStringList files = showSimpleOpen(); - QString file; - for( size_t i = 0 ; i< files.size(); i++ ) + InteractionDialog *qdialog; + interaction_dialog_t *p_dialog = p_arg->p_dialog; + switch( p_dialog->i_action ) { - const char * psz_utf8 = qtu( files[i] ); - playlist_Import( THEPL, psz_utf8 ); + case INTERACT_NEW: + qdialog = new InteractionDialog( p_intf, p_dialog ); + p_dialog->p_private = (void*)qdialog; + if( !(p_dialog->i_status == ANSWERED_DIALOG) ) + qdialog->show(); + break; + case INTERACT_UPDATE: + qdialog = (InteractionDialog*)(p_dialog->p_private); + if( qdialog) + qdialog->update(); + break; + case INTERACT_HIDE: + qdialog = (InteractionDialog*)(p_dialog->p_private); + if( qdialog ) + qdialog->hide(); + p_dialog->i_status = HIDDEN_DIALOG; + break; + case INTERACT_DESTROY: + qdialog = (InteractionDialog*)(p_dialog->p_private); + if( !p_dialog->i_flags & DIALOG_NONBLOCKING_ERROR ) + delete qdialog; + p_dialog->i_status = DESTROYED_DIALOG; + break; } } -void DialogsProvider::openDirectory() -{ - QString dir = QFileDialog::getExistingDirectory ( 0, - _("Open directory") ); - const char *psz_utf8 = qtu( dir ); - input_item_t *p_input = input_ItemNewExt( THEPL, psz_utf8, NULL, - 0, NULL, -1 ); - playlist_AddInput( THEPL, p_input, PLAYLIST_APPEND, PLAYLIST_END, VLC_TRUE); - input_Read( THEPL, p_input, VLC_FALSE ); -} -void DialogsProvider::openMLDirectory() -{ - QString dir = QFileDialog::getExistingDirectory ( 0, - _("Open directory") ); - const char *psz_utf8 = qtu( dir ); - input_item_t *p_input = input_ItemNewExt( THEPL, psz_utf8, NULL, - 0, NULL, -1 ); - playlist_AddInput( THEPL, p_input, PLAYLIST_APPEND, PLAYLIST_END, - VLC_FALSE ); - input_Read( THEPL, p_input, VLC_FALSE ); -} - -QStringList DialogsProvider::showSimpleOpen() -{ - QString FileTypes; - FileTypes = _("Media Files"); - FileTypes += " ( "; - FileTypes += EXTENSIONS_MEDIA; - FileTypes += ");;"; - FileTypes += _("Video Files"); - FileTypes += " ( "; - FileTypes += EXTENSIONS_VIDEO; - FileTypes += ");;"; - FileTypes += _("Sound Files"); - FileTypes += " ( "; - FileTypes += EXTENSIONS_AUDIO; - FileTypes += ");;"; - FileTypes += _("PlayList Files"); - FileTypes += " ( "; - FileTypes += EXTENSIONS_PLAYLIST; - FileTypes += ");;"; - FileTypes += _("All Files"); - FileTypes += " (*.*)"; - FileTypes.replace(QString(";*"), QString(" *")); - return QFileDialog::getOpenFileNames( NULL, qfu(I_POP_SEL_FILES ), - p_intf->p_libvlc->psz_homedir, FileTypes ); -} - void DialogsProvider::switchToSkins() { var_SetString( p_intf, "intf-switch", "skins2" ); } -void DialogsProvider::bookmarksDialog() -{ -} - void DialogsProvider::popupMenu( int i_dialog ) { - } diff --git a/modules/gui/qt4/dialogs_provider.hpp b/modules/gui/qt4/dialogs_provider.hpp index f92906c88a..ef00415445 100644 --- a/modules/gui/qt4/dialogs_provider.hpp +++ b/modules/gui/qt4/dialogs_provider.hpp @@ -70,11 +70,12 @@ private: intf_thread_t *p_intf; static DialogsProvider *instance; QStringList showSimpleOpen(); + void addFromSimple( bool, bool ); public slots: void playlistDialog(); void bookmarksDialog(); - void MediaInfoDialog(); + void mediaInfoDialog(); void prefsDialog(); void extendedDialog(); void messagesDialog(); @@ -92,8 +93,9 @@ public slots: void SDMenuAction( QString ); void streamingDialog(); void openPlaylist(); - void openDirectory(); - void openMLDirectory(); + void savePlaylist(); + void PLAppendDir(); + void MLAppendDir(); void quit(); void switchToSkins(); void helpDialog(); diff --git a/modules/gui/qt4/menus.cpp b/modules/gui/qt4/menus.cpp index 404c492650..5d7c493984 100644 --- a/modules/gui/qt4/menus.cpp +++ b/modules/gui/qt4/menus.cpp @@ -27,8 +27,9 @@ #include #include -#include "main_interface.hpp" +#include +#include "main_interface.hpp" #include "menus.hpp" #include "dialogs_provider.hpp" #include "input_manager.hpp" @@ -155,8 +156,8 @@ QMenu *QVLCMenu::PlaylistMenu( MainInterface *mi, intf_thread_t *p_intf ) menu->addMenu( SDMenu( p_intf ) ); menu->addSeparator(); - DP_SADD( qtr( "Open playlist file"), "", "", openPlaylist() ); -// DP_SADD( qtr( "Save playlist to file" ), "", "", savePlaylist() ); + DP_SADD( qtr(I_PL_LOAD), "", "", openPlaylist() ); + DP_SADD( qtr(I_PL_SAVE), "", "", savePlaylist() ); menu->addSeparator(); menu->addAction( qtr("Undock from interface"), mi, SLOT( undockPlaylist() ) ); @@ -175,10 +176,9 @@ QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf, MainInterface *mi, menu->addMenu( intfmenu ); menu->addSeparator(); } - DP_SADD( qtr("Messages" ), "", "", messagesDialog() ); - DP_SADD( qtr("Information") , "", "", MediaInfoDialog() ); - DP_SADD( qtr("Bookmarks"), "", "", bookmarksDialog() ); - DP_SADD( qtr("Extended settings"), "","",extendedDialog() ); + DP_SADD( qtr(I_MENU_MSG), "", "", messagesDialog() ); + DP_SADD( qtr(I_MENU_INFO) , "", "", mediaInfoDialog() ); + DP_SADD( qtr(I_MENU_EXT), "","",extendedDialog() ); if( mi ) { menu->addSeparator(); @@ -290,7 +290,7 @@ QMenu *QVLCMenu::NavigMenu( intf_thread_t *p_intf, QMenu *current ) QMenu *QVLCMenu::SDMenu( intf_thread_t *p_intf ) { QMenu *menu = new QMenu(); - menu->setTitle( qtr( "Additional sources" ) ); + menu->setTitle( qtr(I_PL_SD) ); vlc_list_t *p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE ); int i_num = 0; @@ -331,7 +331,7 @@ QMenu *QVLCMenu::HelpMenu() QMenu *menu = new QMenu(); DP_SADD( qtr("Help") , "", "", helpDialog() ); menu->addSeparator(); - DP_SADD( qtr("About VLC media player..."), "", "", aboutDialog() ); + DP_SADD( qtr(I_MENU_ABOUT), "", "", aboutDialog() ); return menu; } diff --git a/modules/misc/playlist/m3u.c b/modules/misc/playlist/m3u.c index 4bbc9cd5ee..1773a4eaee 100644 --- a/modules/misc/playlist/m3u.c +++ b/modules/misc/playlist/m3u.c @@ -42,24 +42,26 @@ int Export_M3U ( vlc_object_t * ); /***************************************************************************** * Export_M3U: main export function *****************************************************************************/ -int Export_M3U( vlc_object_t *p_this ) +static void DoChildren( playlist_t *p_playlist, playlist_export_t *p_export, + playlist_item_t *p_root ) { - playlist_t *p_playlist = (playlist_t*)p_this; - playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private; int i, j; - msg_Dbg(p_playlist, "saving using M3U format"); - - /* Write header */ - fprintf( p_export->p_file, "#EXTM3U\n" ); - /* Go through the playlist and add items */ - for( i = 0; i< p_export->p_root->i_children ; i++) + for( i = 0; i< p_root->i_children ; i++) { - playlist_item_t *p_current = p_export->p_root->pp_children[i]; + playlist_item_t *p_current = p_root->pp_children[i]; if( p_current->i_flags & PLAYLIST_SAVE_FLAG ) continue; + if( p_current->i_children >= 0 ) + { + DoChildren( p_playlist, p_export, p_current ); + continue; + } + + assert( p_current->p_input->psz_uri ); + /* General info */ if( p_current->p_input->psz_name && strcmp( p_current->p_input->psz_uri, @@ -99,5 +101,19 @@ int Export_M3U( vlc_object_t *p_this ) fprintf( p_export->p_file, "%s\n", p_current->p_input->psz_uri ); } +} + +int Export_M3U( vlc_object_t *p_this ) +{ + playlist_t *p_playlist = (playlist_t*)p_this; + playlist_export_t *p_export = (playlist_export_t *)p_playlist->p_private; + + msg_Dbg(p_playlist, "saving using M3U format"); + + /* Write header */ + fprintf( p_export->p_file, "#EXTM3U\n" ); + + DoChildren( p_playlist, p_export, p_export->p_root ); return VLC_SUCCESS; } + -- 2.39.2