From 1c64dc6d09f3c5e17c6996f74965653adb009066 Mon Sep 17 00:00:00 2001 From: Fabio Ritrovato Date: Sun, 27 Jul 2008 12:18:46 +0200 Subject: [PATCH] Qt4: add a file dialog needed by skins2 INTF_DIALOG_FILE_GENERIC, was available in wxWidgets, but it's not in Qt4 Signed-off-by: Jean-Baptiste Kempf --- modules/gui/qt4/dialogs_provider.cpp | 53 ++++++++++++++++++++++++++++ modules/gui/qt4/dialogs_provider.hpp | 1 + 2 files changed, 54 insertions(+) diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp index 4d7992ac2a..621accc499 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,57 @@ void DialogsProvider::openDialog() { openDialog( OPEN_FILE_TAB ); } +void DialogsProvider::openFileGenericDialog( intf_dialog_args_t *p_arg ) +{ + if( p_arg == NULL ) + { + msg_Dbg( p_intf, "openFileGenericDialog() called with NULL arg" ); + return; + } + 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( ")" ); + 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 + { + 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 ) ); + } + if( p_arg->pf_callback ) + p_arg->pf_callback( p_arg ); + 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 ); diff --git a/modules/gui/qt4/dialogs_provider.hpp b/modules/gui/qt4/dialogs_provider.hpp index 97c19c6e5c..314e3ac07d 100644 --- a/modules/gui/qt4/dialogs_provider.hpp +++ b/modules/gui/qt4/dialogs_provider.hpp @@ -154,6 +154,7 @@ public slots: void openDialog(); void openDialog( int ); + void openFileGenericDialog( intf_dialog_args_t * ); void openDiscDialog(); void openFileDialog(); void openNetDialog(); -- 2.39.2