mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-16 08:37:12 +00:00
parent
c22a15e8fa
commit
9332d1a2ed
@ -8,6 +8,7 @@ class QAbstractItemModel;
|
||||
class ModelCount : public QObject {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int count READ count NOTIFY countChanged)
|
||||
Q_PROPERTY(bool empty READ empty NOTIFY emptyChanged)
|
||||
|
||||
public:
|
||||
explicit ModelCount(QObject* parent = nullptr);
|
||||
@ -15,12 +16,14 @@ public:
|
||||
static ModelCount* qmlAttachedProperties(QObject* object);
|
||||
|
||||
int count() const;
|
||||
bool empty() const;
|
||||
|
||||
signals:
|
||||
void countChanged();
|
||||
void emptyChanged();
|
||||
|
||||
private:
|
||||
int m_intermediateCount = 0;
|
||||
int m_count = 0;
|
||||
};
|
||||
|
||||
QML_DECLARE_TYPEINFO(ModelCount, QML_HAS_ATTACHED_PROPERTIES)
|
||||
|
@ -9,25 +9,26 @@ ModelCount::ModelCount(QObject* parent) : QObject(parent)
|
||||
if (model == nullptr)
|
||||
return;
|
||||
|
||||
connect(model, &QAbstractItemModel::rowsInserted,
|
||||
this, &ModelCount::countChanged);
|
||||
connect(model, &QAbstractItemModel::rowsRemoved,
|
||||
this, &ModelCount::countChanged);
|
||||
m_count = model->rowCount();
|
||||
|
||||
auto storeIntermediateCount = [this, model] {
|
||||
this->m_intermediateCount = model->rowCount();
|
||||
auto update = [this, model] {
|
||||
auto wasEmpty = m_count == 0;
|
||||
auto count = model->rowCount();
|
||||
|
||||
if (m_count == count)
|
||||
return;
|
||||
|
||||
m_count = count;
|
||||
emit this->countChanged();
|
||||
|
||||
if (wasEmpty != (count == 0))
|
||||
this->emptyChanged();
|
||||
};
|
||||
|
||||
auto emitIfChanged = [this, model] {
|
||||
if (this->m_intermediateCount != model->rowCount())
|
||||
emit this->countChanged();
|
||||
};
|
||||
|
||||
connect(model, &QAbstractItemModel::modelAboutToBeReset, this, storeIntermediateCount);
|
||||
connect(model, &QAbstractItemModel::layoutAboutToBeChanged, storeIntermediateCount);
|
||||
|
||||
connect(model, &QAbstractItemModel::modelReset, this, emitIfChanged);
|
||||
connect(model, &QAbstractItemModel::layoutChanged, this, emitIfChanged);
|
||||
connect(model, &QAbstractItemModel::rowsInserted, this, update);
|
||||
connect(model, &QAbstractItemModel::rowsRemoved, this, update);
|
||||
connect(model, &QAbstractItemModel::modelReset, this, update);
|
||||
connect(model, &QAbstractItemModel::layoutChanged, this, update);
|
||||
}
|
||||
|
||||
ModelCount* ModelCount::qmlAttachedProperties(QObject* object)
|
||||
@ -37,8 +38,10 @@ ModelCount* ModelCount::qmlAttachedProperties(QObject* object)
|
||||
|
||||
int ModelCount::count() const
|
||||
{
|
||||
if (auto model = qobject_cast<QAbstractItemModel*>(parent()))
|
||||
return model->rowCount();
|
||||
|
||||
return 0;
|
||||
return m_count;
|
||||
}
|
||||
|
||||
bool ModelCount::empty() const
|
||||
{
|
||||
return m_count == 0;
|
||||
}
|
||||
|
@ -19,43 +19,59 @@ private slots:
|
||||
ModelCount modelCount(&model);
|
||||
|
||||
QCOMPARE(modelCount.count(), 4);
|
||||
QCOMPARE(modelCount.empty(), false);
|
||||
|
||||
QSignalSpy spy(&modelCount, &ModelCount::countChanged);
|
||||
QSignalSpy countSpy(&modelCount, &ModelCount::countChanged);
|
||||
QSignalSpy emptySpy(&modelCount, &ModelCount::emptyChanged);
|
||||
|
||||
model.insert(1, { "e" });
|
||||
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(countSpy.count(), 1);
|
||||
QCOMPARE(emptySpy.count(), 0);
|
||||
QCOMPARE(modelCount.count(), 5);
|
||||
QCOMPARE(modelCount.empty(), false);
|
||||
|
||||
model.remove(0);
|
||||
|
||||
QCOMPARE(spy.count(), 2);
|
||||
QCOMPARE(countSpy.count(), 2);
|
||||
QCOMPARE(emptySpy.count(), 0);
|
||||
QCOMPARE(modelCount.count(), 4);
|
||||
QCOMPARE(modelCount.empty(), false);
|
||||
|
||||
model.update(0, 0, "aa");
|
||||
|
||||
QCOMPARE(spy.count(), 2);
|
||||
QCOMPARE(countSpy.count(), 2);
|
||||
QCOMPARE(emptySpy.count(), 0);
|
||||
QCOMPARE(modelCount.count(), 4);
|
||||
QCOMPARE(modelCount.empty(), false);
|
||||
|
||||
model.invert();
|
||||
|
||||
QCOMPARE(spy.count(), 2);
|
||||
QCOMPARE(countSpy.count(), 2);
|
||||
QCOMPARE(emptySpy.count(), 0);
|
||||
QCOMPARE(modelCount.count(), 4);
|
||||
QCOMPARE(modelCount.empty(), false);
|
||||
|
||||
model.removeEverySecond();
|
||||
|
||||
QCOMPARE(spy.count(), 3);
|
||||
QCOMPARE(countSpy.count(), 3);
|
||||
QCOMPARE(emptySpy.count(), 0);
|
||||
QCOMPARE(modelCount.count(), 2);
|
||||
QCOMPARE(modelCount.empty(), false);
|
||||
|
||||
model.reset();
|
||||
|
||||
QCOMPARE(spy.count(), 3);
|
||||
QCOMPARE(countSpy.count(), 3);
|
||||
QCOMPARE(emptySpy.count(), 0);
|
||||
QCOMPARE(modelCount.count(), 2);
|
||||
QCOMPARE(modelCount.empty(), false);
|
||||
|
||||
model.resetAndClear();
|
||||
|
||||
QCOMPARE(spy.count(), 4);
|
||||
QCOMPARE(countSpy.count(), 4);
|
||||
QCOMPARE(emptySpy.count(), 1);
|
||||
QCOMPARE(modelCount.count(), 0);
|
||||
QCOMPARE(modelCount.empty(), true);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -116,7 +116,7 @@ QObject {
|
||||
if (!model.visible)
|
||||
return false
|
||||
|
||||
if (filteredBalances.ModelCount.count === 0)
|
||||
if (filteredBalances.ModelCount.empty)
|
||||
return false
|
||||
|
||||
if (hasCommunityId)
|
||||
|
Loading…
x
Reference in New Issue
Block a user