]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/dialogs/open.cpp
Qt4 - Codec Information direct access from menu.
[vlc] / modules / gui / qt4 / dialogs / open.cpp
index e9a532a14254194a6f9e8d48ff6146bb1bfb454d..0d519a790304d8e26fd83f339dba7f10be91cbb8 100644 (file)
@@ -23,6 +23,7 @@
 #include <QTabWidget>
 #include <QGridLayout>
 #include <QFileDialog>
+#include <QRegExp>
 
 #include "dialogs/open.hpp"
 #include "components/open.hpp"
@@ -38,15 +39,20 @@ OpenDialog *OpenDialog::instance = NULL;
 OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal ) :
                                                 QVLCDialog( parent, _p_intf )
 {
-    setWindowTitle( qtr("Open" ) );
     setModal( modal );
     ui.setupUi( this );
-    fileOpenPanel = new FileOpenPanel(this , p_intf );
-    diskOpenPanel = new DiskOpenPanel(this , p_intf );
-    netOpenPanel = new NetOpenPanel(this , p_intf );
-    ui.Tab->addTab(fileOpenPanel, qtr("File"));
-    ui.Tab->addTab(diskOpenPanel, qtr("Disk"));
-    ui.Tab->addTab(netOpenPanel, qtr("Network"));
+    setWindowTitle( qtr("Open" ) );
+    resize( 500, 300);
+
+    fileOpenPanel = new FileOpenPanel( this , p_intf );
+    diskOpenPanel = new DiskOpenPanel( this , p_intf );
+    netOpenPanel = new NetOpenPanel( this , p_intf );
+    captureOpenPanel = new CaptureOpenPanel( this, p_intf );
+
+    ui.Tab->addTab( fileOpenPanel, qtr( "&File" ) );
+    ui.Tab->addTab( diskOpenPanel, qtr( "&Disc" ) );
+    ui.Tab->addTab( netOpenPanel, qtr( "&Network" ) );
+    ui.Tab->addTab( captureOpenPanel, qtr( "Capture &Device" ) );
 
     ui.advancedFrame->hide();
 
@@ -56,6 +62,9 @@ OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal ) :
     CONNECT( fileOpenPanel, mrlUpdated( QString ), this, updateMRL(QString) );
     CONNECT( netOpenPanel, mrlUpdated( QString ), this, updateMRL(QString) );
     CONNECT( diskOpenPanel, mrlUpdated( QString ), this, updateMRL(QString) );
+    CONNECT( captureOpenPanel, mrlUpdated( QString ), this,
+            updateMRL(QString) );
+
 
     CONNECT( fileOpenPanel, methodChanged( QString ),
              this, newMethod(QString) );
@@ -67,8 +76,9 @@ OpenDialog::OpenDialog( QWidget *parent, intf_thread_t *_p_intf, bool modal ) :
     CONNECT( ui.slaveText, textChanged(QString), this, updateMRL());
     CONNECT( ui.cacheSpinBox, valueChanged(int), this, updateMRL());
 
-    BUTTONACT( ui.closeButton, ok());
+    BUTTONACT( ui.closeButton, play());
     BUTTONACT( ui.cancelButton, cancel());
+    BUTTONACT( ui.enqueueButton, enqueue());
     BUTTONACT( ui.advancedCheckBox , toggleAdvancedPanel() );
 
     /* Initialize caching */
@@ -102,22 +112,46 @@ void OpenDialog::cancel()
         reject();
 }
 
-void OpenDialog::ok()
+void OpenDialog::play()
+{
+    playOrEnqueue( false );
+}
+
+void OpenDialog::enqueue()
+{
+    playOrEnqueue( true );
+}
+
+void OpenDialog::playOrEnqueue( bool b_enqueue = false )
 {
     this->toggleVisible();
     mrl = ui.advancedLineInput->text();
-    QStringList tempMRL = mrl.split(" ");
+    QStringList tempMRL = mrl.split( QRegExp("\"\\s+\""),
+                                     QString::SkipEmptyParts );
     if( !isModal() )
     {
         for( size_t i = 0 ; i< tempMRL.size(); i++ )
         {
+             QString mrli = tempMRL[i].remove( QRegExp( "^\"" ) ).
+                                       remove( QRegExp( "\"\\s+$" ) );
              const char * psz_utf8 = qtu( tempMRL[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 );
-         }
+             if ( b_enqueue )
+             {
+                 /* Enqueue and Preparse all items*/
+                 playlist_Add( THEPL, psz_utf8, NULL,
+                                PLAYLIST_APPEND | PLAYLIST_PREPARSE,
+                                PLAYLIST_END, VLC_TRUE, VLC_FALSE );
+
+             }
+             else
+             {
+                 /* 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, VLC_FALSE );
+             }
+        }
 
     }
     else
@@ -126,6 +160,7 @@ void OpenDialog::ok()
 
 void OpenDialog::toggleAdvancedPanel()
 {
+    //FIXME does not work under Windows
     if (ui.advancedFrame->isVisible()) {
         ui.advancedFrame->hide();
         setMinimumHeight(1);