[vlc-devel] [PATCH v2 3/4] qml: support searching in NetworkBrowseDisplay

Prince Gupta guptaprince8832 at gmail.com
Tue Sep 29 20:34:54 CEST 2020


---
 .../qt/network/qml/NetworkBrowseDisplay.qml   | 45 +++++++++++++------
 modules/gui/qt/network/qml/NetworkDisplay.qml |  4 ++
 2 files changed, 35 insertions(+), 14 deletions(-)

diff --git a/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml b/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml
index 0d860df2ca..1ec12913c4 100644
--- a/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml
+++ b/modules/gui/qt/network/qml/NetworkBrowseDisplay.qml
@@ -32,6 +32,7 @@ import "qrc:///style/"
 Widgets.NavigableFocusScope {
     id: root
 
+    property alias model: filterModel
     property var providerModel
     property var contextMenu
     property var tree
@@ -44,16 +45,32 @@ Widgets.NavigableFocusScope {
         history.push(["mc", "network", { tree: new_tree }]);
     }
 
+    function playSelected() {
+        providerModel.addAndPlay(filterModel.mapIndexesToSource(selectionModel.selectedIndexes))
+    }
+
+    function playAt(index) {
+        providerModel.addAndPlay(filterModel.mapIndexToSource(index))
+    }
+
     Util.SelectableDelegateModel{
         id: selectionModel
-        model: providerModel
+
+        model: filterModel
+    }
+
+    SortFilterProxyModel {
+        id: filterModel
+
+        sourceModel: providerModel
+        searchRole: "name"
     }
 
     function resetFocus() {
         var initialIndex = root.initialIndex
-        if (initialIndex >= providerModel.count)
+        if (initialIndex >= filterModel.count)
             initialIndex = 0
-        selectionModel.select(providerModel.index(initialIndex, 0), ItemSelectionModel.ClearAndSelect)
+        selectionModel.select(filterModel.index(initialIndex, 0), ItemSelectionModel.ClearAndSelect)
         if (view.currentItem) {
             view.currentItem.currentIndex = initialIndex
             view.currentItem.positionViewAtIndex(initialIndex, ItemView.Contain)
@@ -63,14 +80,14 @@ Widgets.NavigableFocusScope {
 
     function _actionAtIndex(index) {
         if ( selectionModel.selectedIndexes.length > 1 ) {
-            providerModel.addAndPlay( selectionModel.selectedIndexes )
+            playSelected()
         } else {
-            var data = providerModel.getDataAt(index)
+            var data = filterModel.getDataAt(index)
             if (data.type === NetworkMediaModel.TYPE_DIRECTORY
                     || data.type === NetworkMediaModel.TYPE_NODE)  {
                 changeTree(data.tree)
             } else {
-                providerModel.addAndPlay( selectionModel.selectedIndexes )
+                playAt(index)
             }
         }
     }
@@ -82,7 +99,7 @@ Widgets.NavigableFocusScope {
             id: gridView
 
             delegateModel: selectionModel
-            model: providerModel
+            model: filterModel
 
             headerDelegate: Widgets.NavigableFocusScope {
                 width: view.width
@@ -137,19 +154,19 @@ Widgets.NavigableFocusScope {
                 subtitle: ""
                 height: VLCStyle.gridCover_network_height + VLCStyle.margin_xsmall + VLCStyle.fontHeight_normal
 
-                onPlayClicked: selectionModel.model.addAndPlay( index )
+                onPlayClicked: playAt(index)
                 onItemClicked : gridView.leftClickOnItem(modifier, index)
 
                 onItemDoubleClicked: {
                     if (model.type === NetworkMediaModel.TYPE_NODE || model.type === NetworkMediaModel.TYPE_DIRECTORY)
                         changeTree(model.tree)
                     else
-                        selectionModel.model.addAndPlay( index )
+                        playAt(index)
                 }
 
                 onContextMenuButtonClicked: {
                     gridView.rightClickOnItem(index)
-                    contextMenu.popup(selectionModel.selectedIndexes, globalMousePos)
+                    contextMenu.popup(filterModel.mapIndexesToSource(selectionModel.selectedIndexes), globalMousePos)
                 }
             }
 
@@ -184,12 +201,12 @@ Widgets.NavigableFocusScope {
             }
 
             property Component thumbnailColumn: NetworkThumbnailItem {
-                onPlayClicked: providerModel.addAndPlay(index)
+                onPlayClicked: playAt(index)
             }
 
             height: view.height
             width: view.width
-            model: providerModel
+            model: filterModel
             selectionDelegateModel: selectionModel
             focus: true
             headerColor: VLCStyle.colors.bg
@@ -250,8 +267,8 @@ Widgets.NavigableFocusScope {
             ]
 
             onActionForSelection: _actionAtIndex(selection[0].row)
-            onContextMenuButtonClicked: contextMenu.popup(selectionModel.selectedIndexes, menuParent.mapToGlobal(0,0))
-            onRightClick: contextMenu.popup(selectionModel.selectedIndexes, globalMousePos)
+            onContextMenuButtonClicked: contextMenu.popup(filterModel.mapIndexesToSource(selectionModel.selectedIndexes), menuParent.mapToGlobal(0,0))
+            onRightClick: contextMenu.popup(filterModel.mapIndexesToSource(selectionModel.selectedIndexes), globalMousePos)
         }
     }
 
diff --git a/modules/gui/qt/network/qml/NetworkDisplay.qml b/modules/gui/qt/network/qml/NetworkDisplay.qml
index f445cad47f..e81242c7c8 100644
--- a/modules/gui/qt/network/qml/NetworkDisplay.qml
+++ b/modules/gui/qt/network/qml/NetworkDisplay.qml
@@ -35,6 +35,8 @@ Widgets.NavigableFocusScope {
     onTreeChanged:  loadView()
     Component.onCompleted: loadView()
 
+    property var contentModel
+
     //reset view
     function loadDefaultView() {
         root.tree = undefined
@@ -50,6 +52,8 @@ Widgets.NavigableFocusScope {
             props = { providerModel: mediaModel, contextMenu: mediaContextMenu, tree: root.tree }
         }
         view.replace(page, props)
+        if (view.currentItem.model)
+            root.contentModel = view.currentItem.model
     }
 
     NetworkMediaModel {
-- 
2.25.1



More information about the vlc-devel mailing list