fix(StatusQ): Don't emit layoutChanged on source model reset in MovableModel
+ Update tests
This commit is contained in:
parent
49f7accbc2
commit
07ac4eb8a6
|
@ -55,6 +55,7 @@ private:
|
||||||
|
|
||||||
// other
|
// other
|
||||||
void connectSignalsForSyncedState();
|
void connectSignalsForSyncedState();
|
||||||
|
void syncOrderInternal();
|
||||||
|
|
||||||
QPointer<QAbstractItemModel> m_sourceModel;
|
QPointer<QAbstractItemModel> m_sourceModel;
|
||||||
bool m_synced = true;
|
bool m_synced = true;
|
||||||
|
|
|
@ -20,7 +20,7 @@ void MovableModel::setSourceModel(QAbstractItemModel* sourceModel)
|
||||||
disconnect(m_sourceModel, nullptr, this, nullptr);
|
disconnect(m_sourceModel, nullptr, this, nullptr);
|
||||||
|
|
||||||
m_sourceModel = sourceModel;
|
m_sourceModel = sourceModel;
|
||||||
syncOrder();
|
syncOrderInternal();
|
||||||
emit sourceModelChanged();
|
emit sourceModelChanged();
|
||||||
|
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
@ -120,11 +120,19 @@ void MovableModel::desyncOrder()
|
||||||
}
|
}
|
||||||
|
|
||||||
void MovableModel::syncOrder()
|
void MovableModel::syncOrder()
|
||||||
|
{
|
||||||
|
if (m_synced || m_sourceModel == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
emit layoutAboutToBeChanged();
|
||||||
|
syncOrderInternal();
|
||||||
|
emit layoutChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MovableModel::syncOrderInternal()
|
||||||
{
|
{
|
||||||
if (m_sourceModel)
|
if (m_sourceModel)
|
||||||
{
|
{
|
||||||
emit layoutAboutToBeChanged();
|
|
||||||
|
|
||||||
auto sourceModel = m_sourceModel;
|
auto sourceModel = m_sourceModel;
|
||||||
|
|
||||||
disconnect(m_sourceModel, nullptr, this, nullptr);
|
disconnect(m_sourceModel, nullptr, this, nullptr);
|
||||||
|
@ -138,8 +146,6 @@ void MovableModel::syncOrder()
|
||||||
|
|
||||||
changePersistentIndex(index(i, 0), index(idx.row(), 0));
|
changePersistentIndex(index(i, 0), index(idx.row(), 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
emit layoutChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -647,11 +647,9 @@ private slots:
|
||||||
|
|
||||||
model.setSourceModel(sourceModel2);
|
model.setSourceModel(sourceModel2);
|
||||||
|
|
||||||
QCOMPARE(signalsSpy.count(), 4);
|
QCOMPARE(signalsSpy.count(), 2);
|
||||||
QCOMPARE(signalsSpy.modelAboutToBeResetSpy.count(), 1);
|
QCOMPARE(signalsSpy.modelAboutToBeResetSpy.count(), 1);
|
||||||
QCOMPARE(signalsSpy.modelResetSpy.count(), 1);
|
QCOMPARE(signalsSpy.modelResetSpy.count(), 1);
|
||||||
QCOMPARE(signalsSpy.layoutAboutToBeChangedSpy.count(), 1);
|
|
||||||
QCOMPARE(signalsSpy.layoutChangedSpy.count(), 1);
|
|
||||||
|
|
||||||
|
|
||||||
QCOMPARE(syncedChangedSpy.count(), 1);
|
QCOMPARE(syncedChangedSpy.count(), 1);
|
||||||
|
@ -683,14 +681,18 @@ private slots:
|
||||||
QCOMPARE(signalsSpy.count(), 0);
|
QCOMPARE(signalsSpy.count(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelSignalsSpy signalsSpy(&model);
|
||||||
model.setSourceModel(sourceModel);
|
model.setSourceModel(sourceModel);
|
||||||
|
QCOMPARE(signalsSpy.count(), 2);
|
||||||
|
QCOMPARE(signalsSpy.modelAboutToBeResetSpy.count(), 1);
|
||||||
|
QCOMPARE(signalsSpy.modelResetSpy.count(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
ModelSignalsSpy signalsSpy(&model);
|
ModelSignalsSpy signalsSpy(&model);
|
||||||
model.syncOrder();
|
model.syncOrder();
|
||||||
QCOMPARE(signalsSpy.count(), 2);
|
QCOMPARE(signalsSpy.count(), 0); //already synced
|
||||||
QCOMPARE(signalsSpy.layoutAboutToBeChangedSpy.count(), 1);
|
|
||||||
QCOMPARE(signalsSpy.layoutChangedSpy.count(), 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PersistentIndexesTester indexesTester(&model);
|
PersistentIndexesTester indexesTester(&model);
|
||||||
|
@ -759,7 +761,7 @@ private slots:
|
||||||
QVERIFY(indexesTester.compare());
|
QVERIFY(indexesTester.compare());
|
||||||
}
|
}
|
||||||
|
|
||||||
void sourceModelReset()
|
void sourceModelResetTest()
|
||||||
{
|
{
|
||||||
QQmlEngine engine;
|
QQmlEngine engine;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue