From da50a89866282e2721d7593111eb673f20258505 Mon Sep 17 00:00:00 2001 From: Carl Philipp Klemm Date: Sun, 26 Apr 2026 18:08:10 +0200 Subject: [PATCH] Item: propagate override flag via item update requests --- src/items/item.cpp | 27 +++++++++++++++++++++++---- src/items/item.h | 8 ++++++-- src/ui/itemsettingsdialog.cpp | 5 ++++- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/items/item.cpp b/src/items/item.cpp index 0ff8cd5..6b2eb5b 100644 --- a/src/items/item.cpp +++ b/src/items/item.cpp @@ -67,6 +67,8 @@ void ItemData::storeWithChanges(QJsonObject& json, const ItemFieldChanges& chang valueNamesArray.append(name); json["ValueNames"] = valueNamesArray; } + if(changes.override) + json["override"] = override_; } void ItemData::load(const QJsonObject &json, const bool preserve) @@ -107,6 +109,11 @@ ItemFieldChanges ItemData::loadWithChanges(const QJsonObject& json, const bool p valueNames_.push_back(valueNamesArray[i].toString()); changes.valueNames = true; } + if(json.contains("override")) + { + override_ = json["override"].toBool(false); + changes.override = true; + } itemId_ = static_cast(json["ItemId"].toDouble(0)); } return changes; @@ -142,6 +149,8 @@ bool ItemData::hasChanged(const ItemData& other, const ItemFieldChanges& changes return true; if(changes.valueNames && other.getValueNames() != getValueNames()) return true; + if(changes.override && other.getOverride() != getOverride()) + return true; return false; } @@ -197,6 +206,16 @@ QString ItemData::indexToValueName(int index) const return QString(); } +bool ItemData::getOverride() const +{ + return override_; +} + +void ItemData::setOverride(bool overrideVal) +{ + override_ = overrideVal; +} + //item Item::Item(uint32_t itemIdIn, QString name, uint8_t value, QObject *parent): QObject(parent), ItemData (itemIdIn, name, @@ -217,7 +236,6 @@ Item::~Item() void Item::store(QJsonObject &json) { ItemData::store(json); - json["override"] = override_; if(!actors_.empty()) { QJsonArray actorsArray; @@ -237,7 +255,6 @@ void Item::store(QJsonObject &json) void Item::load(const QJsonObject &json, const bool preserve) { ItemData::load(json, preserve); - override_ = json["override"].toBool(false); if(json.contains("Actors")) { const QJsonArray actorsArray(json["Actors"].toArray(QJsonArray())); @@ -306,6 +323,8 @@ void Item::requestUpdate(ItemUpdateRequest update) } if(update.changes.valueNames) valueNames_ = update.payload.getValueNames(); + if(update.changes.override) + override_ = update.payload.getOverride(); update.payload = *this; updated(update); } @@ -351,12 +370,12 @@ bool Item::removeActor(std::shared_ptr actor) void Item::setOverride(const bool in) { - override_ = in; + ItemData::setOverride(in); } bool Item::getOverride() { - return override_; + return ItemData::getOverride(); } void Item::removeAllActors() diff --git a/src/items/item.h b/src/items/item.h index 4a70fae..6ddf6ef 100644 --- a/src/items/item.h +++ b/src/items/item.h @@ -38,6 +38,7 @@ protected: item_value_type_t type_; QString groupName_; std::vector valueNames_; + bool override_ = false; public: ItemData(uint32_t itemIdIn = QRandomGenerator::global()->generate(), @@ -78,6 +79,8 @@ public: void storeWithChanges(QJsonObject& json, const ItemFieldChanges& changes); ItemFieldChanges loadWithChanges(const QJsonObject& json, const bool preserve = false); virtual QString getName() const; + bool getOverride() const; + void setOverride(bool overrideVal); virtual void store(QJsonObject& json); virtual void load(const QJsonObject& json, const bool preserve = false); }; @@ -87,7 +90,6 @@ class Item: public QObject, public ItemData Q_OBJECT private: std::vector< std::shared_ptr > actors_; - bool override_ = false; signals: void updated(ItemUpdateRequest update); @@ -135,6 +137,7 @@ struct ItemFieldChanges bool groupName :1; bool actors :1; bool valueNames :1; + bool override :1; ItemFieldChanges(bool defaultVal = false) { name = defaultVal; @@ -144,10 +147,11 @@ struct ItemFieldChanges groupName = defaultVal; actors = false; valueNames = defaultVal; + override = defaultVal; } inline bool isNone() const { - return !name && !value && !hidden && !type && !groupName && !actors && !valueNames; + return !name && !value && !hidden && !type && !groupName && !actors && !valueNames && !override; } }; diff --git a/src/ui/itemsettingsdialog.cpp b/src/ui/itemsettingsdialog.cpp index d517312..adc3b06 100644 --- a/src/ui/itemsettingsdialog.cpp +++ b/src/ui/itemsettingsdialog.cpp @@ -96,7 +96,10 @@ void ItemSettingsDialog::changeGroup() void ItemSettingsDialog::changeOverride() { - item_->setOverride(ui->checkBox_Override->isChecked()); + ItemUpdateRequest update = item_->createValueUpdateRequest(ITEM_UPDATE_USER); + update.payload.setOverride(ui->checkBox_Override->isChecked()); + update.changes.override = true; + item_->requestUpdate(update); } void ItemSettingsDialog::loadActorList()