diff --git a/src/libs/timeline/timelinemodel.cpp b/src/libs/timeline/timelinemodel.cpp index 2b1d7d50cc1d71258d8ac8702cf5fe23a0a746d4..5498077bfd80346d2a41e7ca8e0d9cd67c76bc75 100644 --- a/src/libs/timeline/timelinemodel.cpp +++ b/src/libs/timeline/timelinemodel.cpp @@ -121,8 +121,10 @@ void TimelineModel::setCollapsedRowCount(int rows) if (d->collapsedRowCount != rows) { d->collapsedRowCount = rows; emit collapsedRowCountChanged(); - if (!d->expanded) + if (!d->expanded) { emit rowCountChanged(); + emit heightChanged(); // collapsed rows have a fixed size + } } } @@ -136,12 +138,16 @@ void TimelineModel::setExpandedRowCount(int rows) { Q_D(TimelineModel); if (d->expandedRowCount != rows) { + int prevHeight = height(); if (d->rowOffsets.length() > rows) d->rowOffsets.resize(rows); d->expandedRowCount = rows; emit expandedRowCountChanged(); - if (d->expanded) + if (d->expanded) { emit rowCountChanged(); + if (height() != prevHeight) + emit heightChanged(); + } } } @@ -156,25 +162,16 @@ TimelineModel::TimelineModelPrivate::TimelineModelPrivate(int modelId, const QSt { } -void TimelineModel::TimelineModelPrivate::init(TimelineModel *q) -{ - q_ptr = q; - connect(q,SIGNAL(expandedChanged()),q,SIGNAL(heightChanged())); - connect(q,SIGNAL(hiddenChanged()),q,SIGNAL(heightChanged())); - connect(q,SIGNAL(emptyChanged()),q,SIGNAL(heightChanged())); -} - - TimelineModel::TimelineModel(TimelineModelPrivate &dd, QObject *parent) : QObject(parent), d_ptr(&dd) { - d_ptr->init(this); + d_ptr->q_ptr = this; } TimelineModel::TimelineModel(int modelId, const QString &displayName, QObject *parent) : QObject(parent), d_ptr(new TimelineModelPrivate(modelId, displayName)) { - d_ptr->init(this); + d_ptr->q_ptr = this; } TimelineModel::~TimelineModel() @@ -492,8 +489,11 @@ void TimelineModel::setExpanded(bool expanded) { Q_D(TimelineModel); if (expanded != d->expanded) { + int prevHeight = height(); d->expanded = expanded; emit expandedChanged(); + if (prevHeight != height()) + emit heightChanged(); if (d->collapsedRowCount != d->expandedRowCount) emit rowCountChanged(); } @@ -509,8 +509,11 @@ void TimelineModel::setHidden(bool hidden) { Q_D(TimelineModel); if (hidden != d->hidden) { + int prevHeight = height(); d->hidden = hidden; emit hiddenChanged(); + if (height() != prevHeight) + emit heightChanged(); } } diff --git a/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp b/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp index 078bcbb04eb7cd6a90c9008df1e20daf02632df9..0c8032ae7add7e6c15cc9550826056c2927abaf4 100644 --- a/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp +++ b/tests/auto/timeline/timelinemodel/tst_timelinemodel.cpp @@ -227,14 +227,23 @@ void tst_TimelineModel::rowOffset() void tst_TimelineModel::height() { DummyModel dummy; + QSignalSpy spy(&dummy, SIGNAL(heightChanged())); QCOMPARE(dummy.height(), 0); dummy.loadData(); + QCOMPARE(spy.count(), 1); QCOMPARE(dummy.height(), 2 * DefaultRowHeight); dummy.setExpanded(true); + QCOMPARE(spy.count(), 2); QCOMPARE(dummy.height(), 3 * DefaultRowHeight); dummy.setExpandedRowHeight(1, 80); + QCOMPARE(spy.count(), 3); QCOMPARE(dummy.height(), 2 * DefaultRowHeight + 80); + dummy.setHidden(true); + QCOMPARE(spy.count(), 4); + QCOMPARE(dummy.height(), 0); dummy.clear(); + // When clearing the height can change several times in a row. + QVERIFY(spy.count() > 4); dummy.loadData(); dummy.setExpanded(true); QCOMPARE(dummy.rowHeight(1), DefaultRowHeight); // Make sure the row height gets reset.