[vlc-commits] qml: ExpandGridView allow to define a Header component

Pierre Lamot git at videolan.org
Fri Sep 6 18:01:50 CEST 2019


vlc | branch: master | Pierre Lamot <pierre at videolabs.io> | Tue Aug 27 14:46:04 2019 +0200| [e0257fbfbbe07c18455a7f86815d1a523f7240a3] | committer: Jean-Baptiste Kempf

qml: ExpandGridView allow to define a Header component

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

 modules/gui/qt/qml/utils/ExpandGridView.qml | 30 ++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/modules/gui/qt/qml/utils/ExpandGridView.qml b/modules/gui/qt/qml/utils/ExpandGridView.qml
index 0bc40ca3d4..bebb26d44e 100644
--- a/modules/gui/qt/qml/utils/ExpandGridView.qml
+++ b/modules/gui/qt/qml/utils/ExpandGridView.qml
@@ -51,6 +51,9 @@ NavigableFocusScope {
     property Component expandDelegate: Item{}
     property Item expanderItem: Item{}
 
+    property Component headerDelegate: Item{}
+    property int headerHeight: headerItemLoader.implicitHeight
+
     //signals emitted when selected items is updated from keyboard
     signal selectionUpdated( int keyModifiers, int oldIndex,int newIndex )
     signal selectAll()
@@ -91,6 +94,17 @@ NavigableFocusScope {
             anchors.left: flickable.left
         }
 
+        Loader {
+            id: headerItemLoader
+            visible: flickable.contentY < root.headerHeight
+            sourceComponent: headerDelegate
+            onLoaded: {
+                item.x = 0
+                item.y = 0
+            }
+        }
+
+
         property variant model
         property alias expandItem: expandItemLoader.item
         //root.expandDelegate.createObject(contentItem, {"height": 0})
@@ -125,7 +139,7 @@ NavigableFocusScope {
             var colCount = flickable.getNbItemsPerRow()
             var remainingSpace = flickable.width - colCount * root.cellWidth
             var rowCol = getItemRowCol(id)
-            return [(rowCol[0] * root.cellWidth) + (remainingSpace / 2), rowCol[1] * root.cellHeight]
+            return [(rowCol[0] * root.cellWidth) + (remainingSpace / 2), rowCol[1] * root.cellHeight + headerHeight]
         }
 
         function getExpandItemGridId() {
@@ -143,16 +157,18 @@ NavigableFocusScope {
         property variant idChildrenMap: ({})
 
         function getFirstAndLastInstanciatedItemIds() {
-            var contentYWithoutExpand = contentY
+            var myContentY = contentY - root.headerHeight
+
+            var contentYWithoutExpand = myContentY
             var heightWithoutExpand = height
             if (root._expandIndex !== -1) {
-                if (contentY >= expandItem.y && contentY < expandItem.y + expandItem.height)
+                if (myContentY >= expandItem.y && myContentY < expandItem.y + expandItem.height)
                     contentYWithoutExpand = expandItem.y
-                if (contentY >= expandItem.y + expandItem.height)
-                    contentYWithoutExpand = contentY - expandItem.height
+                if (myContentY >= expandItem.y + expandItem.height)
+                    contentYWithoutExpand = myContentY - expandItem.height
 
-                var expandYStart = Math.max(contentY, expandItem.y)
-                var expandYEnd = Math.min(contentY + height, expandItem.y + expandItem.height)
+                var expandYStart = Math.max(myContentY, expandItem.y)
+                var expandYEnd = Math.min(myContentY + height, expandItem.y + expandItem.height)
                 var expandDisplayedHeight = Math.max(expandYEnd - expandYStart, 0)
                 heightWithoutExpand -= expandDisplayedHeight
             }



More information about the vlc-commits mailing list