[vlc-devel] commit: Qt: add a --qt-embedded-open option to have the 0. 9 integration of open panel using the NON-native Qt open dialog. ( Jean-Baptiste Kempf )

git version control git at videolan.org
Wed Mar 25 00:05:49 CET 2009


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Wed Mar 25 00:00:01 2009 +0100| [3005a8a9d1b1f926f1b8c0582db35a82f5ffe307] | committer: Jean-Baptiste Kempf 

Qt: add a --qt-embedded-open option to have the 0.9 integration of open panel using the NON-native Qt open dialog.

I know people prefer native dialog, but Qt4.5 improved the QFileDialog a lot, and some people (including devs) ask for it, so here it is. It doesn't increase the code a lot and the code is tested.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3005a8a9d1b1f926f1b8c0582db35a82f5ffe307
---

 modules/gui/qt4/components/open_panels.cpp |  110 ++++++++++++++++------------
 modules/gui/qt4/components/open_panels.hpp |   27 +++++++
 modules/gui/qt4/qt4.cpp                    |    3 +
 3 files changed, 93 insertions(+), 47 deletions(-)

diff --git a/modules/gui/qt4/components/open_panels.cpp b/modules/gui/qt4/components/open_panels.cpp
index 7d101a7..159704a 100644
--- a/modules/gui/qt4/components/open_panels.cpp
+++ b/modules/gui/qt4/components/open_panels.cpp
@@ -56,29 +56,64 @@ static const char *psz_devModule[] = { "v4l", "v4l2", "pvr", "dvb", "bda",
  * Open Files and subtitles                                               *
  **************************************************************************/
 FileOpenPanel::FileOpenPanel( QWidget *_parent, intf_thread_t *_p_intf ) :
-                                OpenPanel( _parent, _p_intf )
+                                OpenPanel( _parent, _p_intf ), dialogBox( NULL )
 {
     /* Classic UI Setup */
     ui.setupUi( this );
 
-#if 0
-    /** BEGIN QFileDialog tweaking **/
-    /* Use a QFileDialog and customize it because we don't want to
-       rewrite it all. Be careful to your eyes cause there are a few hacks.
-       Be very careful and test correctly when you modify this. */
-
     /* Set Filters for file selection */
-    QString fileTypes = "";
+/*    QString fileTypes = "";
     ADD_FILTER_MEDIA( fileTypes );
     ADD_FILTER_VIDEO( fileTypes );
     ADD_FILTER_AUDIO( fileTypes );
     ADD_FILTER_PLAYLIST( fileTypes );
     ADD_FILTER_ALL( fileTypes );
-    fileTypes.replace( QString(";*"), QString(" *"));
+    fileTypes.replace( QString(";*"), QString(" *")); */
+
+
+/*    lineFileEdit = ui.fileEdit;
+    //TODO later: fill the fileCompleteList with previous items played.
+    QCompleter *fileCompleter = new QCompleter( fileCompleteList, this );
+    fileCompleter->setModel( new QDirModel( fileCompleter ) );
+    lineFileEdit->setCompleter( fileCompleter );*/
+    if( config_GetInt( p_intf, "qt-embedded-open" ) )
+    {
+        ui.tempWidget->hide();
+        BuildOldPanel();
+    }
+
+    /* Subtitles */
+    /* Deactivate the subtitles control by default. */
+    ui.subFrame->setEnabled( false );
+    /* Build the subs size combo box */
+    setfillVLCConfigCombo( "freetype-rel-fontsize" , p_intf,
+                            ui.sizeSubComboBox );
+    /* Build the subs align combo box */
+    setfillVLCConfigCombo( "subsdec-align", p_intf, ui.alignSubComboBox );
+
+    /* Connects  */
+    BUTTONACT( ui.fileBrowseButton, browseFile() );
+    BUTTONACT( ui.delFileButton, deleteFile() );
+
+    BUTTONACT( ui.subBrowseButton, browseFileSub() );
+    CONNECT( ui.subCheckBox, toggled( bool ), this, toggleSubtitleFrame( bool ) );
+
+    CONNECT( ui.fileListWidg, itemChanged( QListWidgetItem * ), this, updateMRL() );
+    CONNECT( ui.subInput, textChanged( QString ), this, updateMRL() );
+    CONNECT( ui.alignSubComboBox, currentIndexChanged( int ), this, updateMRL() );
+    CONNECT( ui.sizeSubComboBox, currentIndexChanged( int ), this, updateMRL() );
+}
+
+inline void FileOpenPanel::BuildOldPanel()
+{
+    /** BEGIN QFileDialog tweaking **/
+    /* Use a QFileDialog and customize it because we don't want to
+       rewrite it all. Be careful to your eyes cause there are a few hacks.
+       Be very careful and test correctly when you modify this. */
 
-    // Make this QFileDialog a child of tempWidget from the ui.
+    /* Make this QFileDialog a child of tempWidget from the ui. */
     dialogBox = new FileOpenBox( ui.tempWidget, NULL,
-            qfu( p_intf->p_sys->psz_filepath ), fileTypes );
+            qfu( p_intf->p_sys->psz_filepath ), "" );
 
     dialogBox->setFileMode( QFileDialog::ExistingFiles );
     dialogBox->setAcceptMode( QFileDialog::AcceptOpen );
@@ -99,7 +134,7 @@ FileOpenPanel::FileOpenPanel( QWidget *_parent, intf_thread_t *_p_intf ) :
 
     /* Ugly hacks to get the good Widget */
     //This lineEdit is the normal line in the fileDialog.
-    lineFileEdit = dialogBox->findChildren<QLineEdit*>()[0];
+    QLineEdit *lineFileEdit = dialogBox->findChildren<QLineEdit*>()[0];
     /* Make a list of QLabel inside the QFileDialog to access the good ones */
     QList<QLabel *> listLabel = dialogBox->findChildren<QLabel*>();
 
@@ -114,40 +149,16 @@ FileOpenPanel::FileOpenPanel( QWidget *_parent, intf_thread_t *_p_intf ) :
     /** END of QFileDialog tweaking **/
 
     // Add the DialogBox to the layout
-    ui.gridLayout->addWidget( dialogBox, 0, 0, 1, 3 );
-#endif
-
-/*    lineFileEdit = ui.fileEdit;
-    //TODO later: fill the fileCompleteList with previous items played.
-    QCompleter *fileCompleter = new QCompleter( fileCompleteList, this );
-    fileCompleter->setModel( new QDirModel( fileCompleter ) );
-    lineFileEdit->setCompleter( fileCompleter );*/
-
-    // Hide the subtitles control by default.
-    ui.subFrame->setEnabled( false );
-
-    /* Build the subs size combo box */
-    setfillVLCConfigCombo( "freetype-rel-fontsize" , p_intf,
-                            ui.sizeSubComboBox );
+    ui.gridLayout_3->addWidget( dialogBox, 0, 0, 1, 3 );
 
-    /* Build the subs align combo box */
-    setfillVLCConfigCombo( "subsdec-align", p_intf, ui.alignSubComboBox );
-
-    /* Connects  */
-    BUTTONACT( ui.fileBrowseButton, browseFile() );
-    BUTTONACT( ui.delFileButton, deleteFile() );
-    BUTTONACT( ui.subBrowseButton, browseFileSub() );
-    CONNECT( ui.subCheckBox, toggled( bool ), this, toggleSubtitleFrame( bool ) );
-
-    CONNECT( ui.fileListWidg, itemChanged( QListWidgetItem * ), this, updateMRL() );
-    CONNECT( ui.subInput, textChanged( QString ), this, updateMRL() );
-    CONNECT( ui.alignSubComboBox, currentIndexChanged( int ), this, updateMRL() );
-    CONNECT( ui.sizeSubComboBox, currentIndexChanged( int ), this, updateMRL() );
+    CONNECT( lineFileEdit, textChanged( QString ), this, updateMRL() );
+    dialogBox->installEventFilter( this );
 }
 
 FileOpenPanel::~FileOpenPanel()
 {
-//  getSettings()->setValue( "file-dialog-state", dialogBox->saveState() );
+    if( dialogBox )
+        getSettings()->setValue( "file-dialog-state", dialogBox->saveState() );
 }
 
 void FileOpenPanel::browseFile()
@@ -201,12 +212,17 @@ void FileOpenPanel::updateMRL()
     QStringList fileList;
     QString mrl;
 
-    for( int i = 0; i < ui.fileListWidg->count(); i++ )
-    {
-        if( !ui.fileListWidg->item( i )->text().isEmpty() )
-            fileList << ui.fileListWidg->item( i )->text();
-    }
+    /* File Listing */
+    if( dialogBox == NULL )
+        for( int i = 0; i < ui.fileListWidg->count(); i++ )
+        {
+            if( !ui.fileListWidg->item( i )->text().isEmpty() )
+                fileList << ui.fileListWidg->item( i )->text();
+        }
+    else
+        fileList = dialogBox->selectedFiles();
 
+    /* Options */
     if( ui.subCheckBox->isChecked() &&  !ui.subInput->text().isEmpty() ) {
         mrl.append( " :sub-file=" + colon_escape( ui.subInput->text() ) );
         int align = ui.alignSubComboBox->itemData(
diff --git a/modules/gui/qt4/components/open_panels.hpp b/modules/gui/qt4/components/open_panels.hpp
index 34a8c01..76b8c5c 100644
--- a/modules/gui/qt4/components/open_panels.hpp
+++ b/modules/gui/qt4/components/open_panels.hpp
@@ -95,6 +95,19 @@ signals:
     void methodChanged( QString method );
 };
 
+class FileOpenBox: public QFileDialog
+{
+    Q_OBJECT;
+public:
+    FileOpenBox( QWidget *parent, const QString &caption,
+                 const QString &directory, const QString &filter ):
+                QFileDialog( parent, caption, directory, filter ) {}
+public slots:
+    void accept(){}
+    void reject(){}
+};
+
+
 class FileOpenPanel: public OpenPanel
 {
     Q_OBJECT;
@@ -103,8 +116,22 @@ public:
     virtual ~FileOpenPanel();
     virtual void clear() ;
     virtual void accept() ;
+protected:
+    bool eventFilter(QObject *obj, QEvent *event)
+    {
+        if( event->type() == QEvent::Hide ||
+            event->type() == QEvent::HideToParent )
+        {
+            msg_Warn( p_intf, "here" );
+            event->accept();
+            return true;
+        }
+        return false;
+    }
 private:
     Ui::OpenFile ui;
+    FileOpenBox *dialogBox;
+    void BuildOldPanel();
 public slots:
     virtual void updateMRL();
 private slots:
diff --git a/modules/gui/qt4/qt4.cpp b/modules/gui/qt4/qt4.cpp
index 5aae67c..fb120e5 100644
--- a/modules/gui/qt4/qt4.cpp
+++ b/modules/gui/qt4/qt4.cpp
@@ -154,6 +154,7 @@ static void ShowDialog   ( intf_thread_t *, int, int, intf_dialog_args_t * );
 #define QT_MINIMAL_MODE_TEXT N_( "Minimal look with no menus" )
 
 #define QT_FULLSCREEN_TEXT N_( "Show a controller in fullscreen mode" )
+#define QT_NATIVEOPEN_TEXT N_( "Integrate the file browser in open dialog" )
 
 /* Various modes definition */
 static const int i_mode_list[] =
@@ -202,6 +203,8 @@ vlc_module_begin ()
         change_autosave ()
         change_internal ()
 
+    add_bool( "qt-embedded-open", false, NULL, QT_NATIVEOPEN_TEXT,
+               QT_NATIVEOPEN_TEXT, false )
     add_bool( "qt-recentplay", true, NULL, RECENTPLAY_TEXT,
               RECENTPLAY_TEXT, false )
     add_string( "qt-recentplay-filter", "", NULL,




More information about the vlc-devel mailing list