From 7c7e510b6b4fb84d248059b9c55f58490fccc339 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Tue, 6 May 2014 13:45:59 +0200 Subject: Fix the update of TabView.currentIndex when inserting/removing tabs - Update currentIndex when adding or inserting tabs. - Make sure that we update the current index before updating the array to avoid a state of currentIndex > count -1 when removing the last tab, where a property binding on TabView.count could try fetching a tab past the array limit through TabView.getTab. - Only decrease currentIndex when removedIndex <= currentIndex to keep the current tab active when possible. Activate the next tab instead of the previous one when the current tab is removed to make it more instinctive to remove multiple tabs successively. - Keep the current behavior of leaving currentIndex to 0 when removing the last tab. Change-Id: I030b86a03ce73f1177b1f04857abbdc2f7ec5835 Reviewed-by: J-P Nurmi --- tests/auto/controls/data/tst_tabview.qml | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'tests') diff --git a/tests/auto/controls/data/tst_tabview.qml b/tests/auto/controls/data/tst_tabview.qml index b7de67ba..9e556dd1 100644 --- a/tests/auto/controls/data/tst_tabview.qml +++ b/tests/auto/controls/data/tst_tabview.qml @@ -84,22 +84,53 @@ TestCase { function test_addRemoveTab() { var tabView = Qt.createQmlObject('import QtQuick 2.2; import QtQuick.Controls 1.2; TabView { }', testCase, ''); + + function verifyCurrentIndexCountDiff() { + verify(!tabView.currentIndex || tabView.count > tabView.currentIndex) + } + tabView.currentIndexChanged.connect(verifyCurrentIndexCountDiff) + tabView.countChanged.connect(verifyCurrentIndexCountDiff) + compare(tabView.count, 0) + compare(tabView.currentIndex, 0) tabView.addTab("title 1", newTab) compare(tabView.count, 1) + compare(tabView.currentIndex, 0) tabView.addTab("title 2", newTab) compare(tabView.count, 2) + compare(tabView.currentIndex, 0) compare(tabView.getTab(0).title, "title 1") compare(tabView.getTab(1).title, "title 2") + tabView.currentIndex = 1 + tabView.insertTab(1, "title 3") compare(tabView.count, 3) + compare(tabView.currentIndex, 2) compare(tabView.getTab(0).title, "title 1") compare(tabView.getTab(1).title, "title 3") compare(tabView.getTab(2).title, "title 2") tabView.insertTab(0, "title 4") compare(tabView.count, 4) + compare(tabView.currentIndex, 3) + compare(tabView.getTab(0).title, "title 4") + compare(tabView.getTab(1).title, "title 1") + compare(tabView.getTab(2).title, "title 3") + compare(tabView.getTab(3).title, "title 2") + + tabView.insertTab(tabView.count, "title 5") + compare(tabView.count, 5) + compare(tabView.currentIndex, 3) + compare(tabView.getTab(0).title, "title 4") + compare(tabView.getTab(1).title, "title 1") + compare(tabView.getTab(2).title, "title 3") + compare(tabView.getTab(3).title, "title 2") + compare(tabView.getTab(4).title, "title 5") + + tabView.removeTab(tabView.count - 1) + compare(tabView.count, 4) + compare(tabView.currentIndex, 3) compare(tabView.getTab(0).title, "title 4") compare(tabView.getTab(1).title, "title 1") compare(tabView.getTab(2).title, "title 3") @@ -107,21 +138,25 @@ TestCase { tabView.removeTab(0) compare(tabView.count, 3) + compare(tabView.currentIndex, 2) compare(tabView.getTab(0).title, "title 1") compare(tabView.getTab(1).title, "title 3") compare(tabView.getTab(2).title, "title 2") tabView.removeTab(1) compare(tabView.count, 2) + compare(tabView.currentIndex, 1) compare(tabView.getTab(0).title, "title 1") compare(tabView.getTab(1).title, "title 2") tabView.removeTab(1) compare(tabView.count, 1) + compare(tabView.currentIndex, 0) compare(tabView.getTab(0).title, "title 1") tabView.removeTab(0) compare(tabView.count, 0) + compare(tabView.currentIndex, 0) tabView.destroy() } -- cgit v1.2.1