[vlc-devel] [PATCH 47/49] qml: expose getNbItemsPerRow and getItemPos methods from ExpandGridView
Pierre Lamot
pierre at videolabs.io
Fri Oct 11 15:18:11 CEST 2019
---
modules/gui/qt/qml/utils/ExpandGridView.qml | 68 ++++++++++-----------
1 file changed, 33 insertions(+), 35 deletions(-)
diff --git a/modules/gui/qt/qml/utils/ExpandGridView.qml b/modules/gui/qt/qml/utils/ExpandGridView.qml
index 1d55377ebf..9280a119fb 100644
--- a/modules/gui/qt/qml/utils/ExpandGridView.qml
+++ b/modules/gui/qt/qml/utils/ExpandGridView.qml
@@ -38,7 +38,6 @@ NavigableFocusScope {
property alias contentHeight: flickable.contentHeight
property alias contentWidth: flickable.contentWidth
property alias contentX: flickable.contentX
- property bool isSingleRow: false
property bool isAnimating: animateRetractItem.running || animateExpandItem.running
/// the id of the item to be expanded
@@ -84,6 +83,25 @@ NavigableFocusScope {
flickable.retract()
}
+ function getNbItemsPerRow() {
+ return Math.max(Math.floor(width / root.cellWidth), 1)
+ }
+
+ function getItemRowCol(id) {
+ var nbItemsPerRow = getNbItemsPerRow()
+ var rowId = Math.floor(id / nbItemsPerRow)
+ var colId = id % nbItemsPerRow
+ return [colId, rowId]
+ }
+
+ function getItemPos(id) {
+ var colCount = root.getNbItemsPerRow()
+ var remainingSpace = flickable.width - colCount * root.cellWidth
+ var rowCol = getItemRowCol(id)
+ return [(rowCol[0] * root.cellWidth) + (remainingSpace / 2), rowCol[1] * root.cellHeight + headerHeight]
+ }
+
+
//Gridview visible above the expanded item
Flickable {
id: flickable
@@ -120,32 +138,12 @@ NavigableFocusScope {
onHeightChanged: { layout() }
onContentYChanged: { layout() }
- function getNbItemsPerRow() {
- if (isSingleRow)
- return model.count
- return Math.max(Math.floor(width / root.cellWidth), 1)
- }
-
- function getItemRowCol(id) {
- var nbItemsPerRow = getNbItemsPerRow()
- var rowId = Math.floor(id / nbItemsPerRow)
- var colId = id % nbItemsPerRow
- return [colId, rowId]
- }
-
- function getItemPos(id) {
- 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 + headerHeight]
- }
-
function getExpandItemGridId() {
var ret
if (root._expandIndex !== -1) {
- var rowCol = getItemRowCol(root._expandIndex)
+ var rowCol = root.getItemRowCol(root._expandIndex)
var rowId = rowCol[1] + 1
- ret = rowId * getNbItemsPerRow()
+ ret = rowId * root.getNbItemsPerRow()
} else {
ret = model.count
}
@@ -173,10 +171,10 @@ NavigableFocusScope {
}
var rowId = Math.floor(contentYWithoutExpand / root.cellHeight)
- var firstId = Math.max(rowId * getNbItemsPerRow(), 0)
+ var firstId = Math.max(rowId * root.getNbItemsPerRow(), 0)
rowId = Math.ceil((contentYWithoutExpand + heightWithoutExpand) / root.cellHeight)
- var lastId = Math.min(rowId * getNbItemsPerRow(), model.count)
+ var lastId = Math.min(rowId * root.getNbItemsPerRow(), model.count)
return [firstId, lastId]
}
@@ -234,7 +232,7 @@ NavigableFocusScope {
// Place the delegates before the expandItem
for (i = firstId; i < topGridEndId; ++i) {
- var pos = getItemPos(i)
+ var pos = root.getItemPos(i)
var item = getChild(i, _unusedItemList)
item.model = model.items.get(i).model
item.index = i
@@ -246,11 +244,11 @@ NavigableFocusScope {
}
if (root._expandIndex !== -1)
- expandItem.y = getItemPos(expandItemGridId)[1]
+ expandItem.y = root.getItemPos(expandItemGridId)[1]
// Place the delegates after the expandItem
for (i = topGridEndId; i < lastId; ++i) {
- pos = getItemPos(i)
+ pos = root.getItemPos(i)
item = getChild(i, _unusedItemList)
item.model = model.items.get(i).model
item.focus = false
@@ -262,11 +260,11 @@ NavigableFocusScope {
}
// Calculate and set the contentHeight
- var newContentHeight = getItemPos(model.count - 1)[1] + root.cellHeight
+ var newContentHeight = root.getItemPos(model.count - 1)[1] + root.cellHeight
if (root._expandIndex !== -1)
newContentHeight += expandItem.height
contentHeight = newContentHeight
- contentWidth = root.cellWidth * getNbItemsPerRow()
+ contentWidth = root.cellWidth * root.getNbItemsPerRow()
setCurrentItemFocus()
}
@@ -295,7 +293,7 @@ NavigableFocusScope {
}
onCurrentItemYChanged: {
var newContentY = flickable.contentY;
- var currentItemYPos = flickable.getItemPos(currentIndex)[1] + cellHeight + flickable.expandItem.currentItemY
+ var currentItemYPos = root.getItemPos(currentIndex)[1] + cellHeight + flickable.expandItem.currentItemY
if (currentItemYPos + flickable.expandItem.currentItemHeight > flickable.contentY + flickable.height) {
//move viewport to see current item bottom
newContentY = Math.min(
@@ -338,7 +336,7 @@ NavigableFocusScope {
// Sliding animation
var newContentY = flickable.contentY;
- var currentItemYPos = flickable.getItemPos(currentIndex)[1]
+ var currentItemYPos = root.getItemPos(currentIndex)[1]
if (currentItemYPos + cellHeight + expandItemHeight > flickable.contentY + flickable.height) {
if (cellHeight + expandItemHeight > flickable.height)
newContentY = currentItemYPos
@@ -405,7 +403,7 @@ NavigableFocusScope {
function animateToCurrentIndex() {
var newContentY = flickable.contentY;
- var currentItemYPos = flickable.getItemPos(currentIndex)[1]
+ var currentItemYPos = root.getItemPos(currentIndex)[1]
if (currentItemYPos + cellHeight > flickable.contentY + flickable.height) {
//move viewport to see current item bottom
newContentY = Math.min(
@@ -426,7 +424,7 @@ NavigableFocusScope {
}
Keys.onPressed: {
- var colCount = flickable.getNbItemsPerRow()
+ var colCount = root.getNbItemsPerRow()
var newIndex = -1
if (event.key === Qt.Key_Right || event.matches(StandardKey.MoveToNextChar)) {
@@ -438,7 +436,7 @@ NavigableFocusScope {
newIndex = Math.max(0, currentIndex - 1)
}
} else if (event.key === Qt.Key_Down || event.matches(StandardKey.MoveToNextLine) ||event.matches(StandardKey.SelectNextLine) ) {
- if (!isSingleRow && Math.floor(currentIndex / colCount) !== Math.floor(root.modelCount / colCount)) { //we are not on the last line
+ if (Math.floor(currentIndex / colCount) !== Math.floor(root.modelCount / colCount)) { //we are not on the last line
newIndex = Math.min(root.modelCount - 1, currentIndex + colCount)
}
} else if (event.key === Qt.Key_PageDown || event.matches(StandardKey.MoveToNextPage) ||event.matches(StandardKey.SelectNextPage)) {
--
2.20.1
More information about the vlc-devel
mailing list