X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fdialogs_provider.cpp;h=22c81fed2e22d0750028ec104c13bfb6a62ef909;hb=08062ae3e0b040022b3e64f357628ad98f1ab572;hp=4d7992ac2acf2abdb80fefa83632239dfc50a6ee;hpb=d0389324b91b56a96bc6bbcb2c417ca824a892ab;p=vlc diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp index 4d7992ac2a..22c81fed2e 100644 --- a/modules/gui/qt4/dialogs_provider.cpp +++ b/modules/gui/qt4/dialogs_provider.cpp @@ -104,6 +104,8 @@ void DialogsProvider::customEvent( QEvent *event ) case INTF_DIALOG_FILE_SIMPLE: case INTF_DIALOG_FILE: openDialog(); break; + case INTF_DIALOG_FILE_GENERIC: + openFileGenericDialog( de->p_arg ); break; case INTF_DIALOG_DISC: openDiscDialog(); break; case INTF_DIALOG_NET: @@ -240,6 +242,69 @@ void DialogsProvider::openDialog() { openDialog( OPEN_FILE_TAB ); } +void DialogsProvider::openFileGenericDialog( intf_dialog_args_t *p_arg ) +{ + if( p_arg == NULL ) + { + msg_Warn( p_intf, "openFileGenericDialog() called with NULL arg" ); + return; + } + + /* Replace the extensions to a Qt format */ + int i = 0; + QString extensions = qfu( p_arg->psz_extensions ); + while ( ( i = extensions.indexOf( "|", i ) ) != -1 ) + { + if( ( extensions.count( "|" ) % 2 ) == 0 ) + extensions.replace( i, 1, ");;" ); + else + extensions.replace( i, 1, "(" ); + } + extensions.replace(QString(";*"), QString(" *")); + extensions.append( ")" ); + + /* Save */ + if( p_arg->b_save ) + { + QString file = QFileDialog::getSaveFileName( NULL, p_arg->psz_title, + qfu( p_intf->p_sys->psz_filepath ), extensions ); + if( !file.isEmpty() ) + { + p_arg->i_results = 1; + p_arg->psz_results = (char **)malloc( p_arg->i_results * sizeof( char * ) ); + p_arg->psz_results[0] = strdup( qtu( file ) ); + } + else + p_arg->i_results = 0; + } + else /* non-save mode */ + { + QStringList files = QFileDialog::getOpenFileNames( NULL, + p_arg->psz_title, qfu( p_intf->p_sys->psz_filepath ), + extensions ); + p_arg->i_results = files.count(); + p_arg->psz_results = (char **)malloc( p_arg->i_results * sizeof( char * ) ); + i = 0; + foreach( QString file, files ) + p_arg->psz_results[i++] = strdup( qtu( file ) ); + } + + /* Callback */ + if( p_arg->pf_callback ) + p_arg->pf_callback( p_arg ); + + /* Clean afterwards */ + if( p_arg->psz_results ) + { + for( i = 0; i < p_arg->i_results; i++ ) + free( p_arg->psz_results[i] ); + free( p_arg->psz_results ); + } + free( p_arg->psz_title ); + free( p_arg->psz_extensions ); + free( p_arg ); +} + void DialogsProvider::openFileDialog() { openDialog( OPEN_FILE_TAB );