[vlc-commits] qml: expose Selection API in SelectableDelegate model

Pierre Lamot git at videolan.org
Wed Jun 3 12:06:40 CEST 2020


vlc | branch: master | Pierre Lamot <pierre at videolabs.io> | Wed Feb 26 11:08:20 2020 +0100| [b9aa26434bdb203d274f9f9fbae8dbafc4aecbed] | committer: Pierre Lamot

qml: expose Selection API in SelectableDelegate model

  it follows ItemSelectionModel select API

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

 modules/gui/qt/medialibrary/qml/MusicAlbums.qml    |  3 +--
 .../qt/medialibrary/qml/MusicArtistsDisplay.qml    |  3 +--
 modules/gui/qt/medialibrary/qml/MusicGenres.qml    |  5 ++---
 modules/gui/qt/medialibrary/qml/VideoDisplay.qml   |  5 ++---
 .../gui/qt/network/qml/NetworkBrowseDisplay.qml    |  2 +-
 .../gui/qt/util/qml/SelectableDelegateModel.qml    | 22 ++++++++++++++++++++++
 .../gui/qt/widgets/qml/KeyNavigableTableView.qml   |  2 +-
 7 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/modules/gui/qt/medialibrary/qml/MusicAlbums.qml b/modules/gui/qt/medialibrary/qml/MusicAlbums.qml
index 8d35835f7e..16ab1375c9 100644
--- a/modules/gui/qt/medialibrary/qml/MusicAlbums.qml
+++ b/modules/gui/qt/medialibrary/qml/MusicAlbums.qml
@@ -66,8 +66,7 @@ Widgets.NavigableFocusScope {
         var initialIndex = root.initialIndex
         if (initialIndex >= delegateModelId.items.count)
             initialIndex = 0
-        delegateModelId.selectNone()
-        delegateModelId.items.get(initialIndex).inSelected = true
+        delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
         view.currentItem.currentIndex = initialIndex
         view.currentItem.positionViewAtIndex(initialIndex, ItemView.Contain)
     }
diff --git a/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml b/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml
index e6164c6e20..73badd0960 100644
--- a/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml
+++ b/modules/gui/qt/medialibrary/qml/MusicArtistsDisplay.qml
@@ -54,8 +54,7 @@ Widgets.NavigableFocusScope {
         if (initialIndex >= delegateModel.items.count)
             initialIndex = 0
         if (initialIndex !== artistList.currentIndex) {
-            delegateModel.selectNone()
-            delegateModel.items.get(initialIndex).inSelected = true
+            delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
             artistList.currentIndex = initialIndex
             artistList.positionViewAtIndex(initialIndex, ItemView.Contain)
         }
diff --git a/modules/gui/qt/medialibrary/qml/MusicGenres.qml b/modules/gui/qt/medialibrary/qml/MusicGenres.qml
index ca06179e5c..7c1a1fb9a1 100644
--- a/modules/gui/qt/medialibrary/qml/MusicGenres.qml
+++ b/modules/gui/qt/medialibrary/qml/MusicGenres.qml
@@ -66,8 +66,7 @@ Widgets.NavigableFocusScope {
         var initialIndex = root.initialIndex
         if (initialIndex >= delegateModelId.items.count)
             initialIndex = 0
-        delegateModelId.selectNone()
-        delegateModelId.items.get(initialIndex).inSelected = true
+        delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
         view.currentItem.currentIndex = initialIndex
         view.currentItem.positionViewAtIndex(initialIndex, ItemView.Contain)
     }
@@ -150,7 +149,7 @@ Widgets.NavigableFocusScope {
             var initialIndex = 0
             if (view.currentItem.currentIndex !== -1)
                 initialIndex = view.currentItem.currentIndex
-            delegateModelId.items.get(initialIndex).inSelected = true
+            delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
             view.currentItem.currentIndex = initialIndex
         }
     }
diff --git a/modules/gui/qt/medialibrary/qml/VideoDisplay.qml b/modules/gui/qt/medialibrary/qml/VideoDisplay.qml
index d0fd13fe1c..5dc91a0028 100644
--- a/modules/gui/qt/medialibrary/qml/VideoDisplay.qml
+++ b/modules/gui/qt/medialibrary/qml/VideoDisplay.qml
@@ -57,8 +57,7 @@ Widgets.NavigableFocusScope {
         var initialIndex = root.initialIndex
         if (initialIndex >= videosDelegate.items.count)
             initialIndex = 0
-        videosDelegate.selectNone()
-        videosDelegate.items.get(initialIndex).inSelected = true
+        videosDelegate.select(initialIndex, ItemSelectionModel.ClearAndSelect)
         view.currentItem.currentIndex = initialIndex
         view.currentItem.positionViewAtIndex(initialIndex, ItemView.Contain)
     }
@@ -193,7 +192,7 @@ Widgets.NavigableFocusScope {
              */
             onActiveFocusChanged: {
                 if (activeFocus && videosDelegate.items.count > 0 && !videosDelegate.hasSelection) {
-                    videosDelegate.items.get(0).inSelected = true
+                    videosDelegate.select(0, ItemSelectionModel.ClearAndSelect)
                 }
             }
 
diff --git a/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml b/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml
index effe203786..e8f5c5049d 100644
--- a/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml
+++ b/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml
@@ -49,7 +49,7 @@ Widgets.NavigableFocusScope {
             var initialIndex = 0
             if (delegateModelId.currentIndex !== -1)
                 initialIndex = delegateModelId.currentIndex
-            delegateModelId.items.get(initialIndex).inSelected = true
+            delegateModelId.select(initialIndex, ItemSelectionModel.ClearAndSelect)
             delegateModelId.currentIndex = initialIndex
         }
     }
diff --git a/modules/gui/qt/util/qml/SelectableDelegateModel.qml b/modules/gui/qt/util/qml/SelectableDelegateModel.qml
index fa545f04eb..af7fa67ce1 100644
--- a/modules/gui/qt/util/qml/SelectableDelegateModel.qml
+++ b/modules/gui/qt/util/qml/SelectableDelegateModel.qml
@@ -58,6 +58,28 @@ DelegateModel {
         return list
     }
 
+    function select( index, command ) {
+        switch (command) {
+            case ItemSelectionModel.Select:
+                items.get(index).inSelected = true
+                break;
+            case ItemSelectionModel.Deselect:
+                items.get(index).inSelected = false
+                break;
+            case ItemSelectionModel.Toggle:
+                items.get(index).inSelected = !items.get(index).inSelected
+                break;
+            case ItemSelectionModel.Clear:
+                selectNone()
+                break;
+            case ItemSelectionModel.ClearAndSelect:
+                selectNone()
+                items.get(index).inSelected = true
+                selectionChanged()
+                break;
+        }
+    }
+
     function updateSelection( keymodifiers, oldIndex, newIndex ) {
         if ((keymodifiers & Qt.ShiftModifier)) {
             if ( shiftIndex === oldIndex) {
diff --git a/modules/gui/qt/widgets/qml/KeyNavigableTableView.qml b/modules/gui/qt/widgets/qml/KeyNavigableTableView.qml
index c5a7247ceb..ff07686edb 100644
--- a/modules/gui/qt/widgets/qml/KeyNavigableTableView.qml
+++ b/modules/gui/qt/widgets/qml/KeyNavigableTableView.qml
@@ -228,7 +228,7 @@ NavigableFocusScope {
             var initialIndex = 0
             if (view.currentIndex !== -1)
                 initialIndex = view.currentIndex
-            delegateModel.items.get(initialIndex).inSelected = true
+            delegateModel.select(initialIndex, ItemSelectionModel.ClearAndSelect)
             view.currentIndex = initialIndex
         }
     }



More information about the vlc-commits mailing list