48 #include <qdockwidget.h> |
48 #include <qdockwidget.h> |
49 #include <qmainwindow.h> |
49 #include <qmainwindow.h> |
50 #include <qlineedit.h> |
50 #include <qlineedit.h> |
51 #include <QDesktopWidget> |
51 #include <QDesktopWidget> |
52 #include <QtGui/QPainter> |
52 #include <QtGui/QPainter> |
|
53 #include "private/qdockwidget_p.h" |
53 |
54 |
54 bool hasFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature) |
55 bool hasFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature) |
55 { return (dockwidget->features() & feature) == feature; } |
56 { return (dockwidget->features() & feature) == feature; } |
56 |
57 |
57 void setFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature, bool on = true) |
58 void setFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature, bool on = true) |
84 void topLevelChanged(); |
85 void topLevelChanged(); |
85 void allowedAreasChanged(); |
86 void allowedAreasChanged(); |
86 void visibilityChanged(); |
87 void visibilityChanged(); |
87 void dockLocationChanged(); |
88 void dockLocationChanged(); |
88 void setTitleBarWidget(); |
89 void setTitleBarWidget(); |
|
90 void titleBarDoubleClick(); |
|
91 void restoreStateOfFloating(); |
89 // task specific tests: |
92 // task specific tests: |
90 void task165177_deleteFocusWidget(); |
93 void task165177_deleteFocusWidget(); |
91 void task169808_setFloating(); |
94 void task169808_setFloating(); |
92 void task237438_setFloatingCrash(); |
95 void task237438_setFloatingCrash(); |
93 void task248604_infiniteResize(); |
96 void task248604_infiniteResize(); |
94 void task258459_visibilityChanged(); |
97 void task258459_visibilityChanged(); |
|
98 void taskQTBUG_1665_closableChanged(); |
95 }; |
99 }; |
96 |
100 |
97 // Testing get/set functions |
101 // Testing get/set functions |
98 void tst_QDockWidget::getSetCheck() |
102 void tst_QDockWidget::getSetCheck() |
99 { |
103 { |
609 { |
613 { |
610 qRegisterMetaType<Qt::DockWidgetArea>("Qt::DockWidgetArea"); |
614 qRegisterMetaType<Qt::DockWidgetArea>("Qt::DockWidgetArea"); |
611 |
615 |
612 QMainWindow mw; |
616 QMainWindow mw; |
613 QDockWidget dw; |
617 QDockWidget dw; |
|
618 dw.setObjectName("dock1"); |
614 QSignalSpy spy(&dw, SIGNAL(dockLocationChanged(Qt::DockWidgetArea))); |
619 QSignalSpy spy(&dw, SIGNAL(dockLocationChanged(Qt::DockWidgetArea))); |
615 |
620 |
616 mw.addDockWidget(Qt::LeftDockWidgetArea, &dw); |
621 mw.addDockWidget(Qt::LeftDockWidgetArea, &dw); |
617 QCOMPARE(spy.count(), 1); |
622 QCOMPARE(spy.count(), 1); |
618 QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), |
623 QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), |
633 |
638 |
634 mw.removeDockWidget(&dw); |
639 mw.removeDockWidget(&dw); |
635 QCOMPARE(spy.count(), 0); |
640 QCOMPARE(spy.count(), 0); |
636 |
641 |
637 QDockWidget dw2; |
642 QDockWidget dw2; |
|
643 dw2.setObjectName("dock2"); |
638 mw.addDockWidget(Qt::TopDockWidgetArea, &dw2); |
644 mw.addDockWidget(Qt::TopDockWidgetArea, &dw2); |
639 mw.tabifyDockWidget(&dw2, &dw); |
645 mw.tabifyDockWidget(&dw2, &dw); |
640 QCOMPARE(spy.count(), 1); |
646 QCOMPARE(spy.count(), 1); |
641 QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), |
647 QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), |
642 Qt::TopDockWidgetArea); |
648 Qt::TopDockWidgetArea); |
654 QTest::qWait(100); |
660 QTest::qWait(100); |
655 QCOMPARE(spy.count(), 1); |
661 QCOMPARE(spy.count(), 1); |
656 QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), |
662 QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), |
657 Qt::TopDockWidgetArea); |
663 Qt::TopDockWidgetArea); |
658 spy.clear(); |
664 spy.clear(); |
|
665 |
|
666 QByteArray ba = mw.saveState(); |
|
667 mw.restoreState(ba); |
|
668 QCOMPARE(spy.count(), 1); |
|
669 QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), |
|
670 Qt::TopDockWidgetArea); |
659 } |
671 } |
660 |
672 |
661 void tst_QDockWidget::featuresChanged() |
673 void tst_QDockWidget::featuresChanged() |
662 { DEPENDS_ON("features()"); } |
674 { DEPENDS_ON("features()"); } |
663 |
675 |
690 //tries to reset the titlebarwidget to none |
702 //tries to reset the titlebarwidget to none |
691 dock.setTitleBarWidget(0); |
703 dock.setTitleBarWidget(0); |
692 qApp->processEvents(); |
704 qApp->processEvents(); |
693 QCOMPARE(w.isVisible(), false); |
705 QCOMPARE(w.isVisible(), false); |
694 QCOMPARE(w2.isVisible(), false); |
706 QCOMPARE(w2.isVisible(), false); |
|
707 } |
|
708 |
|
709 void tst_QDockWidget::titleBarDoubleClick() |
|
710 { |
|
711 QMainWindow win; |
|
712 QDockWidget dock(&win); |
|
713 win.show(); |
|
714 dock.setFloating(true); |
|
715 |
|
716 QEvent e(QEvent::NonClientAreaMouseButtonDblClick); |
|
717 QApplication::sendEvent(&dock, &e); |
|
718 QVERIFY(dock.isFloating()); |
|
719 QCOMPARE(win.dockWidgetArea(&dock), Qt::NoDockWidgetArea); |
|
720 |
|
721 win.addDockWidget(Qt::TopDockWidgetArea, &dock); |
|
722 dock.setFloating(true); |
|
723 QApplication::sendEvent(&dock, &e); |
|
724 QVERIFY(!dock.isFloating()); |
|
725 QCOMPARE(win.dockWidgetArea(&dock), Qt::TopDockWidgetArea); |
|
726 } |
|
727 |
|
728 void tst_QDockWidget::restoreStateOfFloating() |
|
729 { |
|
730 QMainWindow mw; |
|
731 QDockWidget dock; |
|
732 dock.setObjectName("dock1"); |
|
733 mw.addDockWidget(Qt::TopDockWidgetArea, &dock); |
|
734 QVERIFY(!dock.isFloating()); |
|
735 QByteArray ba = mw.saveState(); |
|
736 dock.setFloating(true); |
|
737 QVERIFY(dock.isFloating()); |
|
738 QVERIFY(mw.restoreState(ba)); |
|
739 QVERIFY(!dock.isFloating()); |
695 } |
740 } |
696 |
741 |
697 |
742 |
698 void tst_QDockWidget::task165177_deleteFocusWidget() |
743 void tst_QDockWidget::task165177_deleteFocusWidget() |
699 { |
744 { |
813 QCOMPARE(spy1.first().first().toBool(), false); //dock1 is invisible |
858 QCOMPARE(spy1.first().first().toBool(), false); //dock1 is invisible |
814 QCOMPARE(spy2.count(), 1); |
859 QCOMPARE(spy2.count(), 1); |
815 QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible |
860 QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible |
816 } |
861 } |
817 |
862 |
|
863 void tst_QDockWidget::taskQTBUG_1665_closableChanged() |
|
864 { |
|
865 QDockWidget dock; |
|
866 dock.show(); |
|
867 QTest::qWaitForWindowShown(&dock); |
|
868 |
|
869 QDockWidgetLayout *l = qobject_cast<QDockWidgetLayout*>(dock.layout()); |
|
870 |
|
871 if (l && !l->nativeWindowDeco()) |
|
872 QSKIP("this machine doesn't support native dock widget", SkipAll); |
|
873 |
|
874 QVERIFY(dock.windowFlags() & Qt::WindowCloseButtonHint); |
|
875 |
|
876 //now let's remove the closable attribute |
|
877 dock.setFeatures(dock.features() ^ QDockWidget::DockWidgetClosable); |
|
878 QVERIFY(!(dock.windowFlags() & Qt::WindowCloseButtonHint)); |
|
879 } |
|
880 |
|
881 |
818 QTEST_MAIN(tst_QDockWidget) |
882 QTEST_MAIN(tst_QDockWidget) |
819 #include "tst_qdockwidget.moc" |
883 #include "tst_qdockwidget.moc" |