Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added new convenience readonly visibleChildren property to Item
Change-Id: I5ec541226fabd72c05ce8ccb8bb7e56f6ec7717a Task-number: 22724 Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
- Loading branch information
Mathias Malmqvist
authored and
Qt by Nokia
committed
Feb 9, 2012
1 parent
e299f0d
commit 9c17939
Showing
5 changed files
with
278 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
143 changes: 143 additions & 0 deletions
143
tests/auto/qtquick2/qquickitem2/data/visiblechildren.qml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
import QtQuick 2.0 | ||
|
||
Item { | ||
id: root | ||
width: 400 | ||
height: 300 | ||
|
||
Row { | ||
id: row | ||
Item { id: item1 | ||
Item { id: item1_1; visible: true } | ||
Item { id: item1_2; visible: true } | ||
} | ||
Item { id: item2 } | ||
Item { id: item3 | ||
Item { id: item3_1; visible: false } | ||
Item { id: item3_2; visible: false } | ||
} | ||
Item { id: item4; visible: false | ||
Item { id: item4_1 // implicitly invisible | ||
Item { id: item4_1_1 } // implicitly invisible | ||
Item { id: item4_1_2 } // implicitly invisible | ||
} | ||
} | ||
} | ||
|
||
property int row_changeEventCalls: 0 | ||
property int item1_changeEventCalls: 0 | ||
property int item2_changeEventCalls: 0 | ||
property int item3_changeEventCalls: 0 | ||
property int item4_1_changeEventCalls: 0 | ||
property int item4_1_1_changeEventCalls: 0 | ||
Connections { target: row; onVisibleChildrenChanged: row_changeEventCalls++ } | ||
Connections { target: item1; onVisibleChildrenChanged: item1_changeEventCalls++ } | ||
Connections { target: item2; onVisibleChildrenChanged: item2_changeEventCalls++ } | ||
Connections { target: item3; onVisibleChildrenChanged: item3_changeEventCalls++ } | ||
Connections { target: item4_1; onVisibleChildrenChanged: item4_1_changeEventCalls++ } | ||
Connections { target: item4_1_1; onVisibleChildrenChanged: item4_1_1_changeEventCalls++ } | ||
|
||
// Make sure there are three visible children and no signals fired yet | ||
property bool test1_1: row.visibleChildren.length == 3 | ||
property bool test1_2: row.visibleChildren[0] == item1 && row.visibleChildren[1] == item2 && row.visibleChildren[2] == item3 | ||
property bool test1_3: row_changeEventCalls == 0 | ||
property bool test1_4: item1_changeEventCalls == 0 && item2_changeEventCalls == 0 && item3_changeEventCalls == 0 | ||
|
||
// Next test | ||
function hideFirstAndLastRowChild() { | ||
item1.visible = false; | ||
item3.visible = false; | ||
} | ||
|
||
// Make sure row is signaled twice and item1 only once, and item3 not at all, and that item2 is the visible child | ||
property bool test2_1: row.visibleChildren.length == 1 | ||
property bool test2_2: row.visibleChildren[0] == item2 | ||
property bool test2_3: row_changeEventCalls == 2 | ||
property bool test2_4: item1_changeEventCalls == 1 && item2_changeEventCalls == 0 && item3_changeEventCalls == 0 | ||
|
||
// Next test | ||
function showLastRowChildsLastChild() { | ||
item3_2.visible = true; | ||
} | ||
|
||
// Make sure item3_changeEventCalls is not signaled | ||
property bool test3_1: row.visibleChildren.length == 1 | ||
property bool test3_2: row.visibleChildren[0] == item2 | ||
property bool test3_3: row_changeEventCalls == 2 | ||
property bool test3_4: item1_changeEventCalls == 1 && item2_changeEventCalls == 0 && item3_changeEventCalls == 0 | ||
|
||
// Next test | ||
function showLastRowChild() { | ||
item3.visible = true; | ||
} | ||
|
||
// Make sure row and item3 are signaled | ||
property bool test4_1: row.visibleChildren.length == 2 | ||
property bool test4_2: row.visibleChildren[0] == item2 && row.visibleChildren[1] == item3 | ||
property bool test4_3: row_changeEventCalls == 3 | ||
property bool test4_4: item1_changeEventCalls == 1 && item2_changeEventCalls == 0 && item3_changeEventCalls == 1 | ||
|
||
// Next test | ||
function tryWriteToReadonlyVisibleChildren() { | ||
var foo = fooComponent.createObject(root); | ||
if (Qt.isQtObject(foo) && foo.children.length == 3 && foo.visibleChildren.length == 3) { | ||
test5_1 = true; | ||
} | ||
|
||
foo.visibleChildren.length = 10; // make sure this has no effect | ||
test5_1 = (foo.visibleChildren.length == 3); | ||
delete foo; | ||
} | ||
|
||
Component { | ||
id: fooComponent | ||
Item { | ||
children: [ Item {},Item {},Item {} ] | ||
visibleChildren: [ Item {} ] | ||
} | ||
} | ||
|
||
// Make sure visibleChildren.length is 3 and stays that way | ||
property bool test5_1: false | ||
|
||
// Next test | ||
function reparentVisibleItem3() { | ||
item3.parent = hiddenItem; // item3 has one visible children | ||
} | ||
|
||
Item { id: hiddenItem; visible: false } | ||
|
||
property bool test6_1: row.visibleChildren.length == 1 && row_changeEventCalls == 4 | ||
property bool test6_2: item3_changeEventCalls == 2 | ||
property bool test6_3: item3.visible == false | ||
|
||
// Next test | ||
|
||
property bool test6_4: item4_1.visible == false && item4_1_changeEventCalls == 0 | ||
|
||
function reparentImlicitlyInvisibleItem4_1() { | ||
item4_1.parent = visibleItem; | ||
} | ||
|
||
Item { id: visibleItem; visible: true } | ||
property int visibleItem_changeEventCalls: 0 | ||
Connections { target: visibleItem; onVisibleChildrenChanged: visibleItem_changeEventCalls++ } | ||
|
||
|
||
// Make sure that an item with implictly invisible children will be signaled when reparented to a visible parent | ||
property bool test7_1: row.visibleChildren.length == 1 && row_changeEventCalls == 4 | ||
property bool test7_2: item4_1.visible == true | ||
property bool test7_3: item4_1_changeEventCalls == 1 | ||
property bool test7_4: visibleItem_changeEventCalls == 1 | ||
|
||
|
||
|
||
// FINALLY make sure nothing has changes while we weren't paying attention | ||
|
||
property bool test8_1: row.visibleChildren.length == 1 && row.visibleChildren[0] == item2 && row_changeEventCalls == 4 | ||
property bool test8_2: item1_changeEventCalls == 1 && item1.visible == false | ||
property bool test8_3: item2_changeEventCalls == 0 && item2.visible == true | ||
property bool test8_4: item3_changeEventCalls == 2 && item3.visible == false | ||
property bool test8_5: item4_1_1_changeEventCalls == 0 && item4_1_1.visible == true | ||
|
||
} |
Oops, something went wrong.