void tst_QGraphicsLayout::verifyActivate() { QGraphicsScene scene; QGraphicsView view(&scene); QGraphicsWidget *window = new QGraphicsWidget(); scene.addItem(window); TestLayout *lout = new TestLayout(window); QGraphicsWidget *w = new QGraphicsWidget(); lout->addItem(w); window->setLayout(lout); QCOMPARE(lout->m_count, 0); window->setVisible(false); QCOMPARE(lout->m_count, 0); window->setVisible(true); // on polish or the first time a widget is shown, the widget is resized. QCOMPARE(lout->m_count, 1); }
static void clearAllCounters(TestGraphicsWidget *widget) { if (!widget) return; widget->clearCounters(); TestLayout *layout = static_cast<TestLayout *>(widget->layout()); if (layout) { layout->clearCounters(); for (int i = layout->count() - 1; i >=0; --i) { QGraphicsLayoutItem *item = layout->itemAt(i); if (item->isLayout()) { // ### Not used ATM //TestLayout *lay = static_cast<TestLayout*>(static_cast<QGraphicsLayout*>(item)); //clearAllCounters(lay); } else { TestGraphicsWidget *wid = static_cast<TestGraphicsWidget *>(item); clearAllCounters(wid); } } } }
void tst_QGraphicsLayout::sizeHintOfHiddenLayout() { QGraphicsScene scene; QGraphicsWidget *window = new QGraphicsWidget(0, Qt::Window); scene.addItem(window); TestLayout *lout = new TestLayout(window); lout->setContentsMargins(1,2,2,1); QGraphicsWidget *w = new QGraphicsWidget; w->setPreferredSize(20, 20); w->setMaximumSize(50, 50); lout->addItem(w); window->setLayout(lout); for (int pass = 0; pass < 3; ++pass) { QCOMPARE(lout->sizeHint(Qt::MinimumSize), QSizeF(3,3)); QCOMPARE(lout->sizeHint(Qt::PreferredSize), QSizeF(23,23)); QCOMPARE(lout->sizeHint(Qt::MaximumSize), QSizeF(53,53)); window->setVisible(pass % 2); } }
void tst_QGraphicsLayout::invalidate() { QGraphicsLayout::setInstantInvalidatePropagation(true); QGraphicsScene scene; QGraphicsView view(&scene); TestGraphicsWidget *a = new TestGraphicsWidget; a->setData(0, QString("a")); scene.addItem(a); TestLayout *alay = new TestLayout(a); TestGraphicsWidget *b = new TestGraphicsWidget; b->setData(0, QString("b")); alay->addItem(b); TestLayout *blay = new TestLayout(b); TestGraphicsWidget *e = new TestGraphicsWidget; e->setData(0, QString("e")); blay->addItem(e); TestGraphicsWidget *c = new TestGraphicsWidget; c->setData(0, QString("c")); alay->addItem(c); TestLayout *clay = new TestLayout(c); TestGraphicsWidget *f = new TestGraphicsWidget; f->setData(0, QString("f")); clay->addItem(f); TestGraphicsWidget *d = new TestGraphicsWidget; d->setData(0, QString("d")); alay->addItem(d); TestLayout *dlay = new TestLayout(d); TestGraphicsWidget *g = new TestGraphicsWidget; g->setData(0, QString("g")); dlay->addItem(g); view.show(); { clearAllCounters(a); QCoreApplication::sendPostedEvents(); QCoreApplication::processEvents(); alay->activate(); QCOMPARE(alay->isActivated(), true); QCOMPARE(blay->isActivated(), true); QCOMPARE(clay->isActivated(), true); QCOMPARE(dlay->isActivated(), true); } { clearAllCounters(a); e->callUpdateGeometry(); QCOMPARE(alay->isActivated(), false); QCOMPARE(blay->isActivated(), false); QCOMPARE(clay->isActivated(), true); QCOMPARE(dlay->isActivated(), true); QCOMPARE(a->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0); // should only invalidate ascendants of e QCOMPARE(blay->functionCount[Invalidate], 1); QCOMPARE(alay->functionCount[Invalidate], 1); // not siblings QCOMPARE(clay->functionCount[Invalidate], 0); QCOMPARE(dlay->functionCount[Invalidate], 0); QApplication::sendPostedEvents(); QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(b->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0); } { activateAndReset(a); f->callUpdateGeometry(); QCOMPARE(alay->isActivated(), false); QCOMPARE(blay->isActivated(), true); QCOMPARE(clay->isActivated(), false); QCOMPARE(dlay->isActivated(), true); QCoreApplication::sendPostedEvents(); QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(c->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(a->functionCount[SetGeometry], 1); QCOMPARE(alay->functionCount[SetGeometry], 1); QCOMPARE(b->functionCount[SetGeometry], 1); QCOMPARE(c->functionCount[SetGeometry], 1); QCOMPARE(d->functionCount[SetGeometry], 1); // Since nothing really changed, blay and dlay don't need // to be resized. QCOMPARE(blay->functionCount[SetGeometry], 0); QCOMPARE(clay->functionCount[SetGeometry], 1); QCOMPARE(dlay->functionCount[SetGeometry], 0); QCOMPARE(f->functionCount[SetGeometry], 1); QCOMPARE(a->size(), QSizeF(150, 50)); } { activateAndReset(a); f->setPreferredSize(QSizeF(60,50)); QCOMPARE(alay->isActivated(), false); QCOMPARE(blay->isActivated(), true); QCOMPARE(clay->isActivated(), false); QCOMPARE(dlay->isActivated(), true); QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0); QCoreApplication::sendPostedEvents(); QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(c->eventCount(QEvent::GraphicsSceneResize), 1); QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(a->functionCount[SetGeometry], 1); QCOMPARE(alay->functionCount[SetGeometry], 1); QCOMPARE(b->functionCount[SetGeometry], 1); QCOMPARE(c->functionCount[SetGeometry], 1); QCOMPARE(d->functionCount[SetGeometry], 1); // f actually got wider, need to rearrange its siblings QCOMPARE(blay->functionCount[SetGeometry], 1); QCOMPARE(clay->functionCount[SetGeometry], 1); QCOMPARE(dlay->functionCount[SetGeometry], 1); QCOMPARE(e->functionCount[SetGeometry], 1); QCOMPARE(f->functionCount[SetGeometry], 1); QCOMPARE(g->functionCount[SetGeometry], 1); QVERIFY(e->size().width() < f->size().width()); QVERIFY(g->size().width() < f->size().width()); } { // resize f so much that it'll force a resize of the top widget // this will currently generate two setGeometry() calls on the child layout // of the top widget. activateAndReset(a); f->setPreferredSize(QSizeF()); f->setMinimumSize(QSizeF(200,50)); QCOMPARE(alay->isActivated(), false); QCOMPARE(blay->isActivated(), true); QCOMPARE(clay->isActivated(), false); QCOMPARE(dlay->isActivated(), true); QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0); QCoreApplication::sendPostedEvents(); QCOMPARE(a->eventCount(QEvent::GraphicsSceneResize), 1); QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(c->eventCount(QEvent::GraphicsSceneResize), 1); QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(a->functionCount[SetGeometry], 1); QCOMPARE(alay->functionCount[SetGeometry], 1); QCOMPARE(b->functionCount[SetGeometry], 1); QCOMPARE(c->functionCount[SetGeometry], 1); QCOMPARE(d->functionCount[SetGeometry], 1); // f actually got wider, need to rearrange its siblings QCOMPARE(blay->functionCount[SetGeometry], 1); QCOMPARE(clay->functionCount[SetGeometry], 1); QCOMPARE(dlay->functionCount[SetGeometry], 1); QCOMPARE(e->functionCount[SetGeometry], 1); QCOMPARE(f->functionCount[SetGeometry], 1); QCOMPARE(g->functionCount[SetGeometry], 1); QVERIFY(e->size().width() < f->size().width()); QVERIFY(g->size().width() < f->size().width()); } { f->setPreferredSize(QSizeF()); f->setMinimumSize(QSizeF()); a->adjustSize(); activateAndReset(a); // update two different leaf widgets, // eventCount and functionCount should never be >= 2 e->callUpdateGeometry(); g->callUpdateGeometry(); QCOMPARE(alay->isActivated(), false); QCOMPARE(blay->isActivated(), false); QCOMPARE(clay->isActivated(), true); QCOMPARE(dlay->isActivated(), false); QCoreApplication::sendPostedEvents(); QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(b->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0); QCOMPARE(d->eventCount(QEvent::LayoutRequest), 1); QCOMPARE(a->functionCount[SetGeometry], 1); QCOMPARE(alay->functionCount[SetGeometry], 1); QCOMPARE(b->functionCount[SetGeometry], 1); QCOMPARE(c->functionCount[SetGeometry], 1); QCOMPARE(d->functionCount[SetGeometry], 1); // f actually got wider, need to rearrange its siblings QCOMPARE(blay->functionCount[SetGeometry], 1); QCOMPARE(clay->functionCount[SetGeometry], 0); QCOMPARE(dlay->functionCount[SetGeometry], 1); QCOMPARE(e->functionCount[SetGeometry], 1); QCOMPARE(f->functionCount[SetGeometry], 0); QCOMPARE(g->functionCount[SetGeometry], 1); } QGraphicsLayout::setInstantInvalidatePropagation(false); }
void TestVSQt::testLayoutClicked() { TestLayout *t = new TestLayout(this); t->show(); }