From 54c2dc7c72a2aba693cc1c9e30b5dfb1adf883b2 Mon Sep 17 00:00:00 2001 From: Filippo Gentile Date: Mon, 6 Feb 2023 23:17:12 +0100 Subject: [PATCH] model: HACK to let client refresh after object is removed When an object is removed from a list, Clients need to clear cached values and reload the model. This could be more efficient but it will be adressed in a separate pull request. --- server/src/core/objectlist.hpp | 6 ++++++ server/src/core/tablemodel.cpp | 11 +++++++++++ server/src/core/tablemodel.hpp | 2 ++ 3 files changed, 19 insertions(+) diff --git a/server/src/core/objectlist.hpp b/server/src/core/objectlist.hpp index c29856f5..89873c0a 100644 --- a/server/src/core/objectlist.hpp +++ b/server/src/core/objectlist.hpp @@ -153,6 +153,12 @@ class ObjectList : public AbstractObjectList m_propertyChanged.erase(object.get()); m_items.erase(it); rowCountChanged(); + + uint32_t row = std::distance(m_items.begin(), it); + for(auto& model : m_models) + { + model->rowRemovedHack(row); + } } } }; diff --git a/server/src/core/tablemodel.cpp b/server/src/core/tablemodel.cpp index 53df8139..fc455bb8 100644 --- a/server/src/core/tablemodel.cpp +++ b/server/src/core/tablemodel.cpp @@ -53,6 +53,17 @@ void TableModel::setRegion(const Region& value) } } +void TableModel::rowRemovedHack(uint32_t row) +{ + //Hack, tell clients to refresh from row onwards + Region update = m_region; + if(update.rowMin <= row && update.rowMax >= row) + { + update.rowMin = row; + updateRegion(shared_ptr(), update); + } +} + void TableModel::setColumnHeaders(std::vector values) { m_columnHeaders = std::move(values); diff --git a/server/src/core/tablemodel.hpp b/server/src/core/tablemodel.hpp index 43ef19ed..ee39b5a8 100644 --- a/server/src/core/tablemodel.hpp +++ b/server/src/core/tablemodel.hpp @@ -110,6 +110,8 @@ class TableModel : public Object virtual std::string getText(uint32_t column, uint32_t row) const = 0; void setRegion(const Region& value); + + void rowRemovedHack(uint32_t row); }; #endif