[Ktutorial-commits] SF.net SVN: ktutorial:[241] trunk/ktutorial/ktutorial-library
Status: Alpha
Brought to you by:
danxuliu
From: <dan...@us...> - 2010-05-18 15:39:24
|
Revision: 241 http://ktutorial.svn.sourceforge.net/ktutorial/?rev=241&view=rev Author: danxuliu Date: 2010-05-18 15:39:17 +0000 (Tue, 18 May 2010) Log Message: ----------- Fix highlighting a parent widget of a currently highlighted widget. Modified Paths: -------------- trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.cpp trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.h trunk/ktutorial/ktutorial-library/tests/extendedinformation/WidgetHighlighterManagerTest.cpp Modified: trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.cpp =================================================================== --- trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.cpp 2010-05-18 15:37:12 UTC (rev 240) +++ trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.cpp 2010-05-18 15:39:17 UTC (rev 241) @@ -31,6 +31,11 @@ void WidgetHighlighterManager::highlight(QWidget* widget) { WidgetHighlighter* highlighter = widget->findChild<WidgetHighlighter*>(); + if (highlighter && !widget->children().contains(highlighter)) { + stopHighlighting(highlighter->parentWidget()); + highlighter = 0; + } + if (!highlighter) { highlighter = new WidgetHighlighter(widget); connect(highlighter, SIGNAL(stopped(extendedinformation::WidgetHighlighter*)), @@ -42,7 +47,7 @@ void WidgetHighlighterManager::stopHighlighting(QWidget* widget) { WidgetHighlighter* highlighter = widget->findChild<WidgetHighlighter*>(); - if (!highlighter) { + if (!highlighter || !widget->children().contains(highlighter)) { return; } Modified: trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.h =================================================================== --- trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.h 2010-05-18 15:37:12 UTC (rev 240) +++ trunk/ktutorial/ktutorial-library/src/extendedinformation/WidgetHighlighterManager.h 2010-05-18 15:39:17 UTC (rev 241) @@ -53,7 +53,9 @@ /** * Starts a WidgetHighlighter for the given widget. - * If the widget was already being highlighted nothing is done. + * If the widget was already being highlighted nothing is done. If a child + * widget was already being highlighted it is stopped, so only the parent + * highlighting is active. * * @param widget The widget to highlight. */ Modified: trunk/ktutorial/ktutorial-library/tests/extendedinformation/WidgetHighlighterManagerTest.cpp =================================================================== --- trunk/ktutorial/ktutorial-library/tests/extendedinformation/WidgetHighlighterManagerTest.cpp 2010-05-18 15:37:12 UTC (rev 240) +++ trunk/ktutorial/ktutorial-library/tests/extendedinformation/WidgetHighlighterManagerTest.cpp 2010-05-18 15:39:17 UTC (rev 241) @@ -37,9 +37,11 @@ void testHighlight(); void testHighlightWidgetAlreadyHighlighted(); + void testHighlightChildAlreadyHighlighted(); void testHighlightAfterStopHighlighting(); void testStopHighlighting(); + void testStopHighlightingWhenChildIsBeingHighlighted(); void testDeleteWidgetWhileHighlighting(); @@ -86,6 +88,23 @@ QCOMPARE(highlighterOf(&widget), highlighter); } +void WidgetHighlighterManagerTest::testHighlightChildAlreadyHighlighted() { + QWidget widget; + QWidget* child = new QWidget(&widget); + WidgetHighlighterManager* manager = WidgetHighlighterManager::self(); + + manager->highlight(child); + + WidgetHighlighter* childHighlighter = highlighterOf(child); + + manager->highlight(&widget); + + QCOMPARE(widget.findChildren<WidgetHighlighter*>().count(), 1); + QVERIFY(highlighterOf(&widget)); + QVERIFY(highlighterOf(&widget) != childHighlighter); + QVERIFY(!highlighterOf(child)); +} + void WidgetHighlighterManagerTest::testHighlightAfterStopHighlighting() { QWidget widget; WidgetHighlighterManager* manager = WidgetHighlighterManager::self(); @@ -126,6 +145,30 @@ QCOMPARE(widget.findChildren<WidgetHighlighter*>().count(), 0); } +void WidgetHighlighterManagerTest:: + testStopHighlightingWhenChildIsBeingHighlighted() { + QWidget widget; + QWidget* child = new QWidget(&widget); + WidgetHighlighterManager* manager = WidgetHighlighterManager::self(); + + manager->highlight(child); + + //Give it some time to update + QTest::qWait(100); + + manager->stopHighlighting(&widget); + + //Give it some time to update + QTest::qWait(200); + + //The highlighter should have not been stopped, as it was not highlighting + //the parent widget, but the child + QCOMPARE(widget.findChildren<WidgetHighlighter*>().count(), 1); + QVERIFY(highlighterOf(child)); + QVERIFY(highlighterOf(child)->mProgress > 0); + QVERIFY(highlighterOf(child)->mIncreasing); +} + void WidgetHighlighterManagerTest::testDeleteWidgetWhileHighlighting() { QWidget* widget = new QWidget(); WidgetHighlighterManager* manager = WidgetHighlighterManager::self(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |