diff -r 000000000000 -r 1918ee327afb tests/auto/qboxlayout/tst_qboxlayout.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/auto/qboxlayout/tst_qboxlayout.cpp Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,252 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include +#include + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QBoxLayout : public QObject +{ + Q_OBJECT + +public: + tst_QBoxLayout(); + virtual ~tst_QBoxLayout(); + +public slots: + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + +private slots: + void insertSpacerItem(); + void sizeHint(); + void sizeConstraints(); + void setGeometry(); + void setStyleShouldChangeSpacing(); +}; + +class CustomLayoutStyle : public QWindowsStyle +{ + Q_OBJECT +public: + CustomLayoutStyle() : QWindowsStyle() + { + hspacing = 5; + vspacing = 10; + } + + virtual int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, + const QWidget * widget = 0 ) const; + + int hspacing; + int vspacing; +}; + +int CustomLayoutStyle::pixelMetric(PixelMetric metric, const QStyleOption * option /*= 0*/, + const QWidget * widget /*= 0*/ ) const +{ + switch (metric) { + case PM_LayoutLeftMargin: + return 0; + break; + case PM_LayoutTopMargin: + return 3; + break; + case PM_LayoutRightMargin: + return 6; + break; + case PM_LayoutBottomMargin: + return 9; + break; + case PM_LayoutHorizontalSpacing: + return hspacing; + case PM_LayoutVerticalSpacing: + return vspacing; + break; + default: + break; + } + return QWindowsStyle::pixelMetric(metric, option, widget); +} + + +tst_QBoxLayout::tst_QBoxLayout() +{ +} + +tst_QBoxLayout::~tst_QBoxLayout() +{ +} + +void tst_QBoxLayout::initTestCase() +{ +} + +void tst_QBoxLayout::cleanupTestCase() +{ +} + +void tst_QBoxLayout::init() +{ +} + +void tst_QBoxLayout::cleanup() +{ +} + +void tst_QBoxLayout::insertSpacerItem() +{ + QWidget *window = new QWidget; + + QSpacerItem *spacer1 = new QSpacerItem(20, 10, QSizePolicy::Expanding, QSizePolicy::Expanding); + QSpacerItem *spacer2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Expanding); + + QBoxLayout *layout = new QHBoxLayout; + layout->addWidget(new QLineEdit("Foooooooooooooooooooooooooo")); + layout->addSpacerItem(spacer1); + layout->addWidget(new QLineEdit("Baaaaaaaaaaaaaaaaaaaaaaaaar")); + layout->insertSpacerItem(0, spacer2); + window->setLayout(layout); + + QVERIFY(layout->itemAt(0) == spacer2); + QVERIFY(layout->itemAt(2) == spacer1); + + window->show(); +} + +void tst_QBoxLayout::sizeHint() +{ + QWidget *window = new QWidget; + QHBoxLayout *lay1 = new QHBoxLayout; + QHBoxLayout *lay2 = new QHBoxLayout; + QLabel *label = new QLabel("widget twooooooooooooooooooooooooooooooooooooooooooooooooooooooo"); + lay2->addWidget(label); + lay1->addLayout(lay2); + window->setLayout(lay1); + window->show(); + label->setText("foooooooo baaaaaaar"); + QSize sh = lay1->sizeHint(); + QApplication::processEvents(); + // Note that this is not strictly required behaviour - actually + // the preferred behaviour would be that sizeHint returns + // the same value regardless of what's lying in the event queue. + // (i.e. we would check for equality here instead) + QVERIFY(lay1->sizeHint() != sh); +} + +void tst_QBoxLayout::sizeConstraints() +{ + QWidget *window = new QWidget; + QHBoxLayout *lay = new QHBoxLayout; + lay->addWidget(new QLabel("foooooooooooooooooooooooooooooooooooo")); + lay->addWidget(new QLabel("baaaaaaaaaaaaaaaaaaaaaaaaaaaaaar")); + lay->setSizeConstraint(QLayout::SetFixedSize); + window->setLayout(lay); + window->show(); + QApplication::processEvents(); + QSize sh = window->sizeHint(); + lay->takeAt(1); + QVERIFY(sh.width() >= window->sizeHint().width() && + sh.height() >= window->sizeHint().height()); + +} + +void tst_QBoxLayout::setGeometry() +{ + QWidget w; + QVBoxLayout *lay = new QVBoxLayout; + lay->setMargin(0); + lay->setSpacing(0); + QHBoxLayout *lay2 = new QHBoxLayout; + QDial *dial = new QDial; + lay2->addWidget(dial); + lay2->setAlignment(Qt::AlignTop); + lay2->setAlignment(Qt::AlignRight); + lay->addLayout(lay2); + w.setLayout(lay); + w.show(); + + QRect newGeom(0, 0, 70, 70); + lay2->setGeometry(newGeom); + QApplication::processEvents(); + QVERIFY2(newGeom.contains(dial->geometry()), "dial->geometry() should be smaller and within newGeom"); +} + +void tst_QBoxLayout::setStyleShouldChangeSpacing() +{ + + QWidget *window = new QWidget; + QHBoxLayout *hbox = new QHBoxLayout(window); + QPushButton *pb1 = new QPushButton(tr("The spacing between this")); + QPushButton *pb2 = new QPushButton(tr("and this button should depend on the style of the parent widget"));; + pb1->setAttribute(Qt::WA_LayoutUsesWidgetRect); + pb2->setAttribute(Qt::WA_LayoutUsesWidgetRect); + hbox->addWidget(pb1); + hbox->addWidget(pb2); + CustomLayoutStyle *style1 = new CustomLayoutStyle; + style1->hspacing = 6; + window->setStyle(style1); + window->show(); + + QTest::qWait(100); + int spacing = pb2->geometry().left() - pb1->geometry().right() - 1; + QCOMPARE(spacing, 6); + + CustomLayoutStyle *style2 = new CustomLayoutStyle(); + style2->hspacing = 10; + window->setStyle(style2); + QTest::qWait(100); + spacing = pb2->geometry().left() - pb1->geometry().right() - 1; + QCOMPARE(spacing, 10); + + delete window; + delete style1; + delete style2; +} + + +QTEST_MAIN(tst_QBoxLayout) +#include "tst_qboxlayout.moc"