Updated MarkerModel to update correctly on add/remove

This commit is contained in:
AdenKoperczak 2024-10-06 12:18:22 -04:00
parent 57625b9680
commit 491a33794f
2 changed files with 19 additions and 1 deletions

View file

@ -42,6 +42,11 @@ MarkerModel::MarkerModel(QObject* parent) :
&manager::MarkerManager::MarkerAdded, &manager::MarkerManager::MarkerAdded,
this, this,
&MarkerModel::HandleMarkerAdded); &MarkerModel::HandleMarkerAdded);
connect(p->markerManager_.get(),
&manager::MarkerManager::MarkerRemoved,
this,
&MarkerModel::HandleMarkerRemoved);
} }
MarkerModel::~MarkerModel() = default; MarkerModel::~MarkerModel() = default;
@ -240,8 +245,8 @@ bool MarkerModel::setData(const QModelIndex& index,
void MarkerModel::HandleMarkerAdded() void MarkerModel::HandleMarkerAdded()
{ {
QModelIndex topLeft = createIndex(0, kFirstColumn);
const int newIndex = static_cast<int>(p->markerManager_->marker_count() - 1); const int newIndex = static_cast<int>(p->markerManager_->marker_count() - 1);
QModelIndex topLeft = createIndex(newIndex, kFirstColumn);
QModelIndex bottomRight = createIndex(newIndex, kLastColumn); QModelIndex bottomRight = createIndex(newIndex, kLastColumn);
beginInsertRows(QModelIndex(), newIndex, newIndex); beginInsertRows(QModelIndex(), newIndex, newIndex);
@ -250,6 +255,18 @@ void MarkerModel::HandleMarkerAdded()
Q_EMIT dataChanged(topLeft, bottomRight); Q_EMIT dataChanged(topLeft, bottomRight);
} }
void MarkerModel::HandleMarkerRemoved(size_t index)
{
const int removedIndex = static_cast<int>(index);
QModelIndex topLeft = createIndex(removedIndex, kFirstColumn);
QModelIndex bottomRight = createIndex(removedIndex, kLastColumn);
beginRemoveRows(QModelIndex(), removedIndex, removedIndex);
endRemoveRows();
Q_EMIT dataChanged(topLeft, bottomRight);
}
} // namespace model } // namespace model
} // namespace qt } // namespace qt
} // namespace scwx } // namespace scwx

View file

@ -40,6 +40,7 @@ public:
public slots: public slots:
void HandleMarkerAdded(); void HandleMarkerAdded();
void HandleMarkerRemoved(size_t index);
private: private:
class Impl; class Impl;