add more handling to ensure that MarkerModel stays up to date with MarkerManager

This commit is contained in:
AdenKoperczak 2024-10-10 08:38:33 -04:00
parent aabf4fcbb0
commit aec937aa97
4 changed files with 38 additions and 0 deletions

View file

@ -181,6 +181,8 @@ MarkerManager::MarkerManager() : p(std::make_unique<Impl>(this))
// Read Marker settings on startup // Read Marker settings on startup
main::Application::WaitForInitialization(); main::Application::WaitForInitialization();
p->ReadMarkerSettings(); p->ReadMarkerSettings();
Q_EMIT MarkersInitialized(p->markerRecords_.size());
} }
catch (const std::exception& ex) catch (const std::exception& ex)
{ {
@ -219,6 +221,7 @@ void MarkerManager::set_marker(size_t index, const types::MarkerInfo& marker)
std::shared_ptr<MarkerManager::Impl::MarkerRecord>& markerRecord = std::shared_ptr<MarkerManager::Impl::MarkerRecord>& markerRecord =
p->markerRecords_[index]; p->markerRecords_[index];
markerRecord->markerInfo_ = marker; markerRecord->markerInfo_ = marker;
Q_EMIT MarkerChanged(index);
Q_EMIT MarkersUpdated(); Q_EMIT MarkersUpdated();
} }

View file

@ -30,7 +30,9 @@ public:
static std::shared_ptr<MarkerManager> Instance(); static std::shared_ptr<MarkerManager> Instance();
signals: signals:
void MarkersInitialized(size_t count);
void MarkersUpdated(); void MarkersUpdated();
void MarkerChanged(size_t index);
void MarkerAdded(); void MarkerAdded();
void MarkerRemoved(size_t index); void MarkerRemoved(size_t index);

View file

@ -38,11 +38,22 @@ public:
MarkerModel::MarkerModel(QObject* parent) : MarkerModel::MarkerModel(QObject* parent) :
QAbstractTableModel(parent), p(std::make_unique<Impl>()) QAbstractTableModel(parent), p(std::make_unique<Impl>())
{ {
connect(p->markerManager_.get(),
&manager::MarkerManager::MarkersInitialized,
this,
&MarkerModel::HandleMarkersInitialized);
connect(p->markerManager_.get(), connect(p->markerManager_.get(),
&manager::MarkerManager::MarkerAdded, &manager::MarkerManager::MarkerAdded,
this, this,
&MarkerModel::HandleMarkerAdded); &MarkerModel::HandleMarkerAdded);
connect(p->markerManager_.get(),
&manager::MarkerManager::MarkerChanged,
this,
&MarkerModel::HandleMarkerChanged);
connect(p->markerManager_.get(), connect(p->markerManager_.get(),
&manager::MarkerManager::MarkerRemoved, &manager::MarkerManager::MarkerRemoved,
this, this,
@ -235,6 +246,17 @@ bool MarkerModel::setData(const QModelIndex& index,
return result; return result;
} }
void MarkerModel::HandleMarkersInitialized(size_t count)
{
QModelIndex topLeft = createIndex(0, kFirstColumn);
QModelIndex bottomRight = createIndex(count - 1, kLastColumn);
beginInsertRows(QModelIndex(), 0, count - 1);
endInsertRows();
Q_EMIT dataChanged(topLeft, bottomRight);
}
void MarkerModel::HandleMarkerAdded() void MarkerModel::HandleMarkerAdded()
{ {
const int newIndex = static_cast<int>(p->markerManager_->marker_count() - 1); const int newIndex = static_cast<int>(p->markerManager_->marker_count() - 1);
@ -247,6 +269,15 @@ void MarkerModel::HandleMarkerAdded()
Q_EMIT dataChanged(topLeft, bottomRight); Q_EMIT dataChanged(topLeft, bottomRight);
} }
void MarkerModel::HandleMarkerChanged(size_t index)
{
const int changedIndex = static_cast<int>(index);
QModelIndex topLeft = createIndex(changedIndex, kFirstColumn);
QModelIndex bottomRight = createIndex(changedIndex, kLastColumn);
Q_EMIT dataChanged(topLeft, bottomRight);
}
void MarkerModel::HandleMarkerRemoved(size_t index) void MarkerModel::HandleMarkerRemoved(size_t index)
{ {
const int removedIndex = static_cast<int>(index); const int removedIndex = static_cast<int>(index);

View file

@ -39,7 +39,9 @@ public:
public slots: public slots:
void HandleMarkersInitialized(size_t count);
void HandleMarkerAdded(); void HandleMarkerAdded();
void HandleMarkerChanged(size_t index);
void HandleMarkerRemoved(size_t index); void HandleMarkerRemoved(size_t index);
private: private: