summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-04-07 15:52:12 +0200
committerGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-04-16 09:06:16 +0000
commit235abf6486c221e4dc763b614ac33771abdd8f3f (patch)
tree979810fbb70d3c74a2d9ba3c68ce45363e5538d3
parent564fdbc1985f6de95d68ed7c7e64614bf5fc7d76 (diff)
downloadqtquickcontrols-235abf6486c221e4dc763b614ac33771abdd8f3f.tar.gz
TreeView: Add indexAt() function
Change-Id: I6a8105d074fd71d9d0dff35d07ba1622093e1d4b Task-number: QTBUG-45351 Reviewed-by: Filippo Cucchetto <filippocucchetto@gmail.com> Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
-rw-r--r--src/controls/TreeView.qml14
-rw-r--r--tests/auto/controls/data/tst_treeview.qml57
2 files changed, 71 insertions, 0 deletions
diff --git a/src/controls/TreeView.qml b/src/controls/TreeView.qml
index 8de10493..534f2e91 100644
--- a/src/controls/TreeView.qml
+++ b/src/controls/TreeView.qml
@@ -252,6 +252,20 @@ BasicTableView {
modelAdaptor.expand(index)
}
+ /*!
+ \qmlmethod QModelIndex TreeView::indexAt( int x, int y )
+
+ Returns the model index of the visible row at the point \a x, \a y in content
+ coordinates. If there is no visible row at the point specified, an invalid
+ \l QModelIndex is returned.
+
+ \note This method should only be called after the component has completed.
+ */
+ function indexAt(x, y) {
+ var obj = root.mapToItem(__listView.contentItem, x, y)
+ return modelAdaptor.mapRowToModelIndex(__listView.indexAt(obj.x, obj.y))
+ }
+
style: Settings.styleComponent(Settings.style, "TreeViewStyle.qml", root)
// Internal stuff. Do not look
diff --git a/tests/auto/controls/data/tst_treeview.qml b/tests/auto/controls/data/tst_treeview.qml
index 26f40494..458ddd75 100644
--- a/tests/auto/controls/data/tst_treeview.qml
+++ b/tests/auto/controls/data/tst_treeview.qml
@@ -754,5 +754,62 @@ Item {
tree.destroy()
}
+
+ function test_indexAt() {
+ var component = Qt.createComponent("treeview/treeview_1.qml")
+ compare(component.status, Component.Ready)
+ var tree = component.createObject(container);
+ verify(tree !== null, "tree created is null")
+ waitForRendering(tree)
+ var model = tree.model
+
+ // Sample each row and test
+ for (var row = 0; row < tree.__listView.count; row++) {
+ for (var x = 1; x < tree.getColumn(0).width; x += 10) {
+ var treeIndex = tree.indexAt(x, 50 * (row + 1) + 1) // offset by header height
+ var modelIndex = model.index(row, 0)
+ compare(treeIndex.row, modelIndex.row)
+ compare(treeIndex.column, modelIndex.column)
+ compare(treeIndex.internalId, modelIndex.internalId)
+ }
+ }
+
+ // Hide header, test again
+ tree.headerVisible = false
+ for (row = 0; row < tree.__listView.count; row++) {
+ for (x = 1; x < tree.getColumn(0).width; x += 10) {
+ treeIndex = tree.indexAt(x, 50 * row + 1)
+ modelIndex = model.index(row, 0)
+ compare(treeIndex.row, modelIndex.row)
+ compare(treeIndex.column, modelIndex.column)
+ compare(treeIndex.internalId, modelIndex.internalId)
+ }
+ }
+
+ // Test outside the view content area
+ modelIndex = model.index(-1,-1)
+
+ treeIndex = tree.indexAt(-10, 55)
+ compare(treeIndex.row, modelIndex.row)
+ compare(treeIndex.column, modelIndex.column)
+ compare(treeIndex.internalId, modelIndex.internalId)
+
+ treeIndex = tree.indexAt(-10, tree.getColumn(0).width + 10)
+ compare(treeIndex.row, modelIndex.row)
+ compare(treeIndex.column, modelIndex.column)
+ compare(treeIndex.internalId, modelIndex.internalId)
+
+ treeIndex = tree.indexAt(10, -10)
+ compare(treeIndex.row, modelIndex.row)
+ compare(treeIndex.column, modelIndex.column)
+ compare(treeIndex.internalId, modelIndex.internalId)
+
+ treeIndex = tree.indexAt(10, tree.__listView.contentHeight + 10)
+ compare(treeIndex.row, modelIndex.row)
+ compare(treeIndex.column, modelIndex.column)
+ compare(treeIndex.internalId, modelIndex.internalId)
+
+ tree.destroy()
+ }
}
}