Added a ModelSummary class to make the overview over the model content accessible via QProperty system & a SummaryWidget to show this information. Only property rowCount as a proof of concept. Other properties will follow.
This commit is contained in:
22
libs/BeetRoundCore/model/modelsummary.cpp
Normal file
22
libs/BeetRoundCore/model/modelsummary.cpp
Normal file
@ -0,0 +1,22 @@
|
||||
#include "modelsummary.h"
|
||||
|
||||
#include "tablemodel.h"
|
||||
|
||||
ModelSummary::ModelSummary(std::shared_ptr<TableModel> model, QObject* parent)
|
||||
: QObject(parent)
|
||||
, m_model(model) {
|
||||
Q_ASSERT(model);
|
||||
connect(m_model.get(), &TableModel::rowCountChanged, this, &ModelSummary::rowCountChanged);
|
||||
}
|
||||
|
||||
ModelSummary::~ModelSummary() {}
|
||||
|
||||
int ModelSummary::rowCount() const {
|
||||
const int nRows = m_model->rowCount();
|
||||
return nRows;
|
||||
}
|
||||
|
||||
QBindable<int> ModelSummary::bindableRowCount() {
|
||||
m_rowCount = m_model->rowCount();
|
||||
return &m_rowCount;
|
||||
}
|
||||
32
libs/BeetRoundCore/model/modelsummary.h
Normal file
32
libs/BeetRoundCore/model/modelsummary.h
Normal file
@ -0,0 +1,32 @@
|
||||
#ifndef MODELSUMMARY_H
|
||||
#define MODELSUMMARY_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QProperty>
|
||||
|
||||
class TableModel;
|
||||
|
||||
using namespace std;
|
||||
|
||||
class ModelSummary : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(int rowCount READ rowCount NOTIFY rowCountChanged BINDABLE bindableRowCount)
|
||||
|
||||
public:
|
||||
ModelSummary(shared_ptr<TableModel> model, QObject* parent = nullptr);
|
||||
~ModelSummary();
|
||||
|
||||
int rowCount() const;
|
||||
QBindable<int> bindableRowCount();
|
||||
|
||||
signals:
|
||||
void rowCountChanged();
|
||||
|
||||
private:
|
||||
shared_ptr<TableModel> m_model;
|
||||
|
||||
Q_OBJECT_BINDABLE_PROPERTY(ModelSummary, int, m_rowCount, &ModelSummary::rowCountChanged);
|
||||
};
|
||||
|
||||
#endif // MODELSUMMARY_H
|
||||
@ -46,7 +46,10 @@ QByteArray TableModel::generateExampleItems() {
|
||||
|
||||
TableModel::TableModel(QUndoStack* undoStack, QObject* parent)
|
||||
: QAbstractTableModel{parent}
|
||||
, m_undoStack(undoStack) {}
|
||||
, m_undoStack(undoStack) {
|
||||
connect(this, &TableModel::rowsInserted, this, &TableModel::onRowCountChanged);
|
||||
connect(this, &TableModel::rowsRemoved, this, &TableModel::onRowCountChanged);
|
||||
}
|
||||
|
||||
Qt::ItemFlags TableModel::flags(const QModelIndex& index) const {
|
||||
if (!index.isValid()) {
|
||||
@ -279,6 +282,16 @@ void TableModel::insertItems(int startPosition,
|
||||
m_undoStack->push(insertCommand);
|
||||
}
|
||||
|
||||
void TableModel::onRowCountChanged(const QModelIndex& parent, int first, int last) {
|
||||
Q_UNUSED(first);
|
||||
Q_UNUSED(last);
|
||||
|
||||
if (parent != QModelIndex()) {
|
||||
return;
|
||||
}
|
||||
emit rowCountChanged();
|
||||
}
|
||||
|
||||
void TableModel::execInsertItems(const int firstRow, const QList<ModelItemValues> valueList) {
|
||||
const int nRows = valueList.size();
|
||||
qDebug() << "Inserting" << nRows << "items...";
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#define TABLEMODEL_H
|
||||
|
||||
#include <QAbstractTableModel>
|
||||
#include "metadata.h"
|
||||
|
||||
class QUndoStack;
|
||||
class ModelItem;
|
||||
@ -55,6 +56,12 @@ class TableModel : public QAbstractTableModel {
|
||||
const QList<ModelItemValues>& itemValuesList,
|
||||
const QModelIndex& parentIndex = QModelIndex());
|
||||
|
||||
signals:
|
||||
void rowCountChanged();
|
||||
|
||||
private slots:
|
||||
void onRowCountChanged(const QModelIndex& parent, int first, int last);
|
||||
|
||||
private:
|
||||
/// *** members ***
|
||||
// TODO shared_ptr -> unique_ptr
|
||||
|
||||
Reference in New Issue
Block a user