diff options
author | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-04-07 15:52:12 +0200 |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-04-16 09:06:16 +0000 |
commit | 235abf6486c221e4dc763b614ac33771abdd8f3f (patch) | |
tree | 979810fbb70d3c74a2d9ba3c68ce45363e5538d3 | |
parent | 564fdbc1985f6de95d68ed7c7e64614bf5fc7d76 (diff) | |
download | qtquickcontrols-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.qml | 14 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_treeview.qml | 57 |
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() + } } } |