[vlc-devel] [PATCH 13/16] qml: use count directly provided by models

Pierre Lamot pierre at videolabs.io
Wed May 27 17:06:54 CEST 2020


---
 .../gui/qt/medialibrary/qml/MusicAlbums.qml   | 32 +++++++++--------
 .../medialibrary/qml/MusicArtistsDisplay.qml  | 30 ++++++++--------
 .../gui/qt/medialibrary/qml/MusicGenres.qml   | 31 +++++++++--------
 .../gui/qt/medialibrary/qml/VideoDisplay.qml  | 34 +++++++++++--------
 4 files changed, 69 insertions(+), 58 deletions(-)

diff --git a/modules/gui/qt/medialibrary/qml/MusicAlbums.qml b/modules/gui/qt/medialibrary/qml/MusicAlbums.qml
index 6ee01252a5..68e80ca8e0 100644
--- a/modules/gui/qt/medialibrary/qml/MusicAlbums.qml
+++ b/modules/gui/qt/medialibrary/qml/MusicAlbums.qml
@@ -60,40 +60,42 @@ Widgets.NavigableFocusScope {
     onParentIdChanged: resetFocus()
 
     function resetFocus() {
-        if (delegateModelId.items.count === 0) {
+        if (albumModelId.count === 0) {
             return
         }
         var initialIndex = root.initialIndex
-        if (initialIndex >= delegateModelId.items.count)
+        if (initialIndex >= albumModelId.count)
             initialIndex = 0
         delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
         view.currentItem.currentIndex = initialIndex
         view.currentItem.positionViewAtIndex(initialIndex, ItemView.Contain)
     }
 
+    MLAlbumModel {
+        id: albumModelId
+        ml: medialib
+
+        onCountChanged: {
+            if (albumModelId.count > 0 && !delegateModelId.hasSelection) {
+                root.resetFocus()
+            }
+        }
+    }
+
     Util.SelectableDelegateModel {
         id: delegateModelId
         property alias parentId: albumModelId.parentId
 
-        model: MLAlbumModel {
-            id: albumModelId
-            ml: medialib
-        }
+        model: albumModelId
 
         delegate: Item {
         }
 
-        onCountChanged: {
-            if (delegateModelId.items.count > 0 && !delegateModelId.hasSelection) {
-                root.resetFocus()
-            }
-        }
-
         function actionAtIndex(index) {
             if (delegateModelId.selectedGroup.count > 1) {
                 medialib.addAndPlay( model.getIdsForIndexes( delegateModelId.selectedIndexes() ) )
             } else {
-                medialib.addAndPlay( model.getIdsForIndexes([index]) )
+                medialib.addAndPlay( model.getIdForIndex(index) )
             }
         }
     }
@@ -215,7 +217,7 @@ Widgets.NavigableFocusScope {
         id: view
 
         anchors.fill: parent
-        focus: delegateModelId.items.count !== 0
+        focus: albumModelId.count !== 0
 
         initialItem: medialib.gridView ? gridComponent : listComponent
 
@@ -241,7 +243,7 @@ Widgets.NavigableFocusScope {
 
     EmptyLabel {
         anchors.fill: parent
-        visible: delegateModelId.items.count === 0
+        visible: albumModelId.count === 0
         focus: visible
         text: i18n.qtr("No albums found\nPlease try adding sources, by going to the Network tab")
         navigationParent: root
diff --git a/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml b/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml
index 877d75f243..a097092061 100644
--- a/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml
+++ b/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml
@@ -47,11 +47,11 @@ Widgets.NavigableFocusScope {
     }
 
     function resetFocus() {
-        if (delegateModel.items.count === 0) {
+        if (artistModel.count === 0) {
             return
         }
         var initialIndex = root.initialIndex
-        if (initialIndex >= delegateModel.items.count)
+        if (initialIndex >= artistModel.count)
             initialIndex = 0
         if (initialIndex !== artistList.currentIndex) {
             delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
@@ -60,21 +60,23 @@ Widgets.NavigableFocusScope {
         }
     }
 
-    Util.SelectableDelegateModel {
-        id: delegateModel
-        model: MLArtistModel {
-            id: artistModel
-            ml: medialib
-        }
+    MLArtistModel {
+        id: artistModel
+        ml: medialib
 
         onCountChanged: {
-            if (delegateModel.items.count > 0 && !delegateModel.hasSelection) {
+            if (artistModel.count > 0 && !delegateModel.hasSelection) {
                 var initialIndex = root.initialIndex
-                if (initialIndex >= delegateModel.items.count)
+                if (initialIndex >= artistModel.count)
                     initialIndex = 0
                 artistList.currentIndex = initialIndex
             }
         }
+    }
+
+    Util.SelectableDelegateModel {
+        id: delegateModel
+        model: artistModel
 
         delegate: Item {}
 
@@ -84,7 +86,7 @@ Widgets.NavigableFocusScope {
     }
 
     FocusScope {
-        visible: delegateModel.count > 0
+        visible: artistModel.count > 0
         focus: visible
         anchors.fill: parent
 
@@ -106,8 +108,8 @@ Widgets.NavigableFocusScope {
             onSelectAll: delegateModel.selectAll()
             onSelectionUpdated: delegateModel.updateSelection( keyModifiers, oldIndex, newIndex )
             onCurrentIndexChanged: {
-                if (artistList.currentIndex < delegateModel.count) {
-                    root.artistId = delegateModel.items.get(artistList.currentIndex).model.id
+                if (artistList.currentIndex < artistModel.count) {
+                    root.artistId =  artistModel.getIdForIndex(artistList.currentIndex)
                 } else {
                     root.artistId = undefined
                 }
@@ -207,7 +209,7 @@ Widgets.NavigableFocusScope {
 
     EmptyLabel {
         anchors.fill: parent
-        visible: delegateModel.count === 0
+        visible: artistModel.count === 0
         focus: visible
         text: i18n.qtr("No artists found\nPlease try adding sources, by going to the Network tab")
         navigationParent: root
diff --git a/modules/gui/qt/medialibrary/qml/MusicGenres.qml b/modules/gui/qt/medialibrary/qml/MusicGenres.qml
index 92ac0e02a9..cdcb36a232 100644
--- a/modules/gui/qt/medialibrary/qml/MusicGenres.qml
+++ b/modules/gui/qt/medialibrary/qml/MusicGenres.qml
@@ -60,11 +60,11 @@ Widgets.NavigableFocusScope {
     }
 
     function resetFocus() {
-        if (delegateModelId.items.count === 0) {
+        if (genreModel.count === 0) {
             return
         }
         var initialIndex = root.initialIndex
-        if (initialIndex >= delegateModelId.items.count)
+        if (initialIndex >= genreModel.count)
             initialIndex = 0
         delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
         view.currentItem.currentIndex = initialIndex
@@ -83,22 +83,25 @@ Widgets.NavigableFocusScope {
             width: root.width
         }
     }
+    MLGenreModel {
+        id: genreModel
+        ml: medialib
+
+        onCountChanged: {
+            if (genreModel.count > 0 && !delegateModelId.hasSelection) {
+                root.resetFocus()
+            }
+        }
+    }
 
     Util.SelectableDelegateModel {
         id: delegateModelId
-        model: MLGenreModel {
-            id: genreModel
-            ml: medialib
-        }
+
+        model: genreModel
 
         delegate: Item {
         }
 
-        onCountChanged: {
-            if (delegateModelId.items.count > 0 && !delegateModelId.hasSelection) {
-                root.resetFocus()
-            }
-        }
 
         function actionAtIndex(index) {
             if (delegateModelId.selectedGroup.count > 1) {
@@ -115,7 +118,7 @@ Widgets.NavigableFocusScope {
      * selectedGroup update itself after this event
      */
     onActiveFocusChanged: {
-        if (activeFocus && delegateModelId.items.count > 0 && !delegateModelId.hasSelection) {
+        if (activeFocus && genreModel.count > 0 && !delegateModelId.hasSelection) {
             var initialIndex = 0
             if (view.currentItem.currentIndex !== -1)
                 initialIndex = view.currentItem.currentIndex
@@ -230,12 +233,12 @@ Widgets.NavigableFocusScope {
         initialItem: medialib.gridView ? gridComponent : listComponent
 
         anchors.fill: parent
-        focus: delegateModelId.items.count !== 0
+        focus: genreModel.count !== 0
     }
 
     EmptyLabel {
         anchors.fill: parent
-        visible: delegateModelId.items.count === 0
+        visible: genreModel.count === 0
         focus: visible
         text: i18n.qtr("No genres found\nPlease try adding sources, by going to the Network tab")
         navigationParent: root
diff --git a/modules/gui/qt/medialibrary/qml/VideoDisplay.qml b/modules/gui/qt/medialibrary/qml/VideoDisplay.qml
index db77718c09..9a819e46c6 100644
--- a/modules/gui/qt/medialibrary/qml/VideoDisplay.qml
+++ b/modules/gui/qt/medialibrary/qml/VideoDisplay.qml
@@ -32,7 +32,7 @@ Widgets.NavigableFocusScope {
     //the index to "go to" when the view is loaded
     property var initialIndex: 0
 
-    property alias contentModel: videosDelegate.model;
+    property alias contentModel: videoModel ;
 
     navigationCancel: function() {
         if (view.currentItem.currentIndex <= 0) {
@@ -51,11 +51,11 @@ Widgets.NavigableFocusScope {
     onContentModelChanged: resetFocus()
 
     function resetFocus() {
-        if (videosDelegate.items.count === 0) {
+        if (videoModel.count === 0) {
             return
         }
         var initialIndex = root.initialIndex
-        if (initialIndex >= videosDelegate.items.count)
+        if (initialIndex >= videoModel.count)
             initialIndex = 0
         videosDelegate.select(initialIndex, ItemSelectionModel.ClearAndSelect)
         view.currentItem.currentIndex = initialIndex
@@ -112,21 +112,25 @@ Widgets.NavigableFocusScope {
         onClosed: contextMenu.parent.forceActiveFocus()
 
     }
-    Util.SelectableDelegateModel {
-        id: videosDelegate
 
-        model: MLVideoModel {
-            id: videoModel
-            ml: medialib
-        }
-        delegate: Item{
-        }
+    MLVideoModel {
+        id: videoModel
+        ml: medialib
 
         onCountChanged: {
-            if (videosDelegate.items.count > 0 && !videosDelegate.hasSelection) {
+            if (videoModel.count > 0 && !videosDelegate.hasSelection) {
                 root.resetFocus()
             }
         }
+    }
+
+    Util.SelectableDelegateModel {
+        id: videosDelegate
+
+        model: videoModel
+
+        delegate: Item{
+        }
 
         function actionAtIndex(index) {
             medialib.addAndPlay( videoModel.getIdsForIndexes( videosDelegate.selectedIndexes() ) )
@@ -190,7 +194,7 @@ Widgets.NavigableFocusScope {
              * selectedGroup update itself after this event
              */
             onActiveFocusChanged: {
-                if (activeFocus && videosDelegate.items.count > 0 && !videosDelegate.hasSelection) {
+                if (activeFocus && videoModel.count > 0 && !videosDelegate.hasSelection) {
                     videosDelegate.select(0, ItemSelectionModel.ClearAndSelect)
                 }
             }
@@ -229,7 +233,7 @@ Widgets.NavigableFocusScope {
         id: view
         anchors.fill:parent
         clip: true
-        focus: videosDelegate.items.count !== 0
+        focus: videoModel.count !== 0
         initialItem: medialib.gridView ? gridComponent : listComponent
         Connections {
             target: medialib
@@ -245,7 +249,7 @@ Widgets.NavigableFocusScope {
 
     EmptyLabel {
         anchors.fill: parent
-        visible: videosDelegate.items.count === 0
+        visible: videoModel.count === 0
         focus: visible
         text: i18n.qtr("No video found\nPlease try adding sources, by going to the Network tab")
         navigationParent: root
-- 
2.25.1



More information about the vlc-devel mailing list