[vlc-commits] qt: keep files with local file representation and store them as URL in open dialog

Pierre Lamot git at videolan.org
Fri Jan 19 18:44:29 CET 2018


vlc/vlc-3.0 | branch: master | Pierre Lamot <pierre at videolabs.io> | Fri Jan 19 18:10:22 2018 +0100| [22bf04c4a42e7e87c29b662e440014148f4cc470] | committer: Jean-Baptiste Kempf

qt: keep files with local file representation and store them as URL in open dialog

- fields are now, read only and can be only edited throught the add/browse
    buttons

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
(cherry picked from commit 6b36c463f13cb3dea55bccbb8482e28fb6227e18)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=22bf04c4a42e7e87c29b662e440014148f4cc470
---

 modules/gui/qt/components/open_panels.cpp | 40 +++++++++++++++++--------------
 modules/gui/qt/components/open_panels.hpp |  2 ++
 modules/gui/qt/ui/open_file.ui            |  8 +++++--
 3 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/modules/gui/qt/components/open_panels.cpp b/modules/gui/qt/components/open_panels.cpp
index 9b154322e5..ef52b8e52e 100644
--- a/modules/gui/qt/components/open_panels.cpp
+++ b/modules/gui/qt/components/open_panels.cpp
@@ -211,6 +211,7 @@ void FileOpenPanel::dropEvent( QDropEvent *event )
                                          ui.fileListWidg );
             item->setFlags( Qt::ItemIsEditable | Qt::ItemIsEnabled );
             ui.fileListWidg->addItem( item );
+            urlList << url;
         }
     }
     updateMRL();
@@ -223,9 +224,14 @@ void FileOpenPanel::browseFile()
     QStringList files = THEDP->showSimpleOpen( qtr( "Select one or multiple files" ) );
     foreach( const QString &file, files )
     {
-        QListWidgetItem *item =
-            new QListWidgetItem( toNativeSeparators( file ), ui.fileListWidg );
-        item->setFlags( Qt::ItemIsEditable | Qt::ItemIsEnabled );
+        QUrl url(file);
+        urlList << url;
+        QListWidgetItem *item = nullptr;
+        item = new QListWidgetItem(
+            toNativeSeparators( url.toDisplayString(QUrl::RemovePassword | QUrl::PreferLocalFile | QUrl::NormalizePathSegments) ),
+            ui.fileListWidg
+            );
+        item->setFlags( Qt::ItemIsEnabled );
         ui.fileListWidg->addItem( item );
         savedirpathFromFile( file );
     }
@@ -240,6 +246,7 @@ void FileOpenPanel::removeFile()
     {
         QListWidgetItem *temp = ui.fileListWidg->takeItem( i );
         delete temp;
+        urlList.removeAt( i );
     }
 
     updateMRL();
@@ -252,15 +259,12 @@ void FileOpenPanel::browseFileSub()
     QStringList urls = THEDP->showSimpleOpen( qtr("Open subtitle file"),
                            EXT_FILTER_SUBTITLE, p_intf->p_sys->filepath );
 
-    if( urls.isEmpty() ) return;
-
-    // TODO Handle selection of more than one subtitles file
-    char *path = vlc_uri2path( qtu(urls[0]) );
-    if( path == NULL )
+    if( urls.isEmpty() ) {
         return;
+    }
 
-    ui.subInput->setText( qfu(path) );
-    free( path );
+    subUrl = QUrl(urls[0]);
+    ui.subInput->setText( subUrl.toDisplayString(QUrl::RemovePassword | QUrl::PreferLocalFile | QUrl::NormalizePathSegments) );
     updateMRL();
 }
 
@@ -272,11 +276,8 @@ void FileOpenPanel::updateMRL()
 
     /* File Listing */
     if( dialogBox == NULL )
-        for( int i = 0; i < ui.fileListWidg->count(); i++ )
-        {
-            if( !ui.fileListWidg->item( i )->text().isEmpty() )
-                fileList << toURI(ui.fileListWidg->item( i )->text());
-        }
+        foreach( const QUrl& url, urlList )
+            fileList << url.toEncoded();
     else
     {
         QList<QUrl> urls = dialogBox->selectedUrls();
@@ -285,8 +286,8 @@ void FileOpenPanel::updateMRL()
     }
 
     /* Options */
-    if( ui.subGroupBox->isChecked() &&  !ui.subInput->text().isEmpty() ) {
-        mrl.append( " :sub-file=" + colon_escape( ui.subInput->text() ) );
+    if( ui.subGroupBox->isChecked() &&  !subUrl.isEmpty() ) {
+        mrl.append( " :sub-file=" + colon_escape( subUrl.toEncoded() ) );
     }
 
     emit methodChanged( "file-caching" );
@@ -299,6 +300,7 @@ void FileOpenPanel::accept()
     if( dialogBox )
         p_intf->p_sys->filepath = dialogBox->directory().absolutePath();
     ui.fileListWidg->clear();
+    urlList.clear();
 }
 
 /* Function called by Open Dialog when clicked on cancel */
@@ -306,12 +308,14 @@ void FileOpenPanel::clear()
 {
     ui.fileListWidg->clear();
     ui.subInput->clear();
+    urlList.clear();
+    subUrl = QUrl();
 }
 
 /* Update buttons depending on current selection */
 void FileOpenPanel::updateButtons()
 {
-    bool b_has_files = ( ui.fileListWidg->count() > 0 );
+    bool b_has_files = !urlList.empty();
     ui.removeFileButton->setEnabled( b_has_files );
     ui.subGroupBox->setEnabled( b_has_files );
 }
diff --git a/modules/gui/qt/components/open_panels.hpp b/modules/gui/qt/components/open_panels.hpp
index d124a25ff6..71a983141d 100644
--- a/modules/gui/qt/components/open_panels.hpp
+++ b/modules/gui/qt/components/open_panels.hpp
@@ -129,6 +129,8 @@ protected:
     void dragLeaveEvent( QDragLeaveEvent * ) Q_DECL_OVERRIDE;
 private:
     Ui::OpenFile ui;
+    QList<QUrl> urlList;
+    QUrl subUrl; //url for subtitle
     FileOpenBox *dialogBox;
     void BuildOldPanel();
 public slots:
diff --git a/modules/gui/qt/ui/open_file.ui b/modules/gui/qt/ui/open_file.ui
index 8da3e20ec1..233b61cd47 100644
--- a/modules/gui/qt/ui/open_file.ui
+++ b/modules/gui/qt/ui/open_file.ui
@@ -40,7 +40,11 @@
      </property>
      <layout class="QHBoxLayout" name="horizontalLayout_2">
       <item>
-       <widget class="QLineEdit" name="subInput"/>
+       <widget class="QLineEdit" name="subInput">
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+       </widget>
       </item>
       <item>
        <widget class="QPushButton" name="subBrowseButton">
@@ -95,7 +99,7 @@
          <enum>Qt::ScrollBarAlwaysOff</enum>
         </property>
         <property name="editTriggers">
-         <set>QAbstractItemView::AllEditTriggers</set>
+         <set>QAbstractItemView::NoEditTriggers</set>
         </property>
         <property name="alternatingRowColors">
          <bool>true</bool>



More information about the vlc-commits mailing list