Item: propagate override flag via item update requests

This commit is contained in:
Carl Philipp Klemm 2026-04-26 18:08:10 +02:00
parent 51193a5d0b
commit da50a89866
3 changed files with 33 additions and 7 deletions

View file

@ -67,6 +67,8 @@ void ItemData::storeWithChanges(QJsonObject& json, const ItemFieldChanges& chang
valueNamesArray.append(name); valueNamesArray.append(name);
json["ValueNames"] = valueNamesArray; json["ValueNames"] = valueNamesArray;
} }
if(changes.override)
json["override"] = override_;
} }
void ItemData::load(const QJsonObject &json, const bool preserve) 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()); valueNames_.push_back(valueNamesArray[i].toString());
changes.valueNames = true; changes.valueNames = true;
} }
if(json.contains("override"))
{
override_ = json["override"].toBool(false);
changes.override = true;
}
itemId_ = static_cast<uint32_t>(json["ItemId"].toDouble(0)); itemId_ = static_cast<uint32_t>(json["ItemId"].toDouble(0));
} }
return changes; return changes;
@ -142,6 +149,8 @@ bool ItemData::hasChanged(const ItemData& other, const ItemFieldChanges& changes
return true; return true;
if(changes.valueNames && other.getValueNames() != getValueNames()) if(changes.valueNames && other.getValueNames() != getValueNames())
return true; return true;
if(changes.override && other.getOverride() != getOverride())
return true;
return false; return false;
} }
@ -197,6 +206,16 @@ QString ItemData::indexToValueName(int index) const
return QString(); return QString();
} }
bool ItemData::getOverride() const
{
return override_;
}
void ItemData::setOverride(bool overrideVal)
{
override_ = overrideVal;
}
//item //item
Item::Item(uint32_t itemIdIn, QString name, uint8_t value, QObject *parent): QObject(parent), ItemData (itemIdIn, name, 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) void Item::store(QJsonObject &json)
{ {
ItemData::store(json); ItemData::store(json);
json["override"] = override_;
if(!actors_.empty()) if(!actors_.empty())
{ {
QJsonArray actorsArray; QJsonArray actorsArray;
@ -237,7 +255,6 @@ void Item::store(QJsonObject &json)
void Item::load(const QJsonObject &json, const bool preserve) void Item::load(const QJsonObject &json, const bool preserve)
{ {
ItemData::load(json, preserve); ItemData::load(json, preserve);
override_ = json["override"].toBool(false);
if(json.contains("Actors")) if(json.contains("Actors"))
{ {
const QJsonArray actorsArray(json["Actors"].toArray(QJsonArray())); const QJsonArray actorsArray(json["Actors"].toArray(QJsonArray()));
@ -306,6 +323,8 @@ void Item::requestUpdate(ItemUpdateRequest update)
} }
if(update.changes.valueNames) if(update.changes.valueNames)
valueNames_ = update.payload.getValueNames(); valueNames_ = update.payload.getValueNames();
if(update.changes.override)
override_ = update.payload.getOverride();
update.payload = *this; update.payload = *this;
updated(update); updated(update);
} }
@ -351,12 +370,12 @@ bool Item::removeActor(std::shared_ptr<Actor> actor)
void Item::setOverride(const bool in) void Item::setOverride(const bool in)
{ {
override_ = in; ItemData::setOverride(in);
} }
bool Item::getOverride() bool Item::getOverride()
{ {
return override_; return ItemData::getOverride();
} }
void Item::removeAllActors() void Item::removeAllActors()

View file

@ -38,6 +38,7 @@ protected:
item_value_type_t type_; item_value_type_t type_;
QString groupName_; QString groupName_;
std::vector<QString> valueNames_; std::vector<QString> valueNames_;
bool override_ = false;
public: public:
ItemData(uint32_t itemIdIn = QRandomGenerator::global()->generate(), ItemData(uint32_t itemIdIn = QRandomGenerator::global()->generate(),
@ -78,6 +79,8 @@ public:
void storeWithChanges(QJsonObject& json, const ItemFieldChanges& changes); void storeWithChanges(QJsonObject& json, const ItemFieldChanges& changes);
ItemFieldChanges loadWithChanges(const QJsonObject& json, const bool preserve = false); ItemFieldChanges loadWithChanges(const QJsonObject& json, const bool preserve = false);
virtual QString getName() const; virtual QString getName() const;
bool getOverride() const;
void setOverride(bool overrideVal);
virtual void store(QJsonObject& json); virtual void store(QJsonObject& json);
virtual void load(const QJsonObject& json, const bool preserve = false); virtual void load(const QJsonObject& json, const bool preserve = false);
}; };
@ -87,7 +90,6 @@ class Item: public QObject, public ItemData
Q_OBJECT Q_OBJECT
private: private:
std::vector< std::shared_ptr<Actor> > actors_; std::vector< std::shared_ptr<Actor> > actors_;
bool override_ = false;
signals: signals:
void updated(ItemUpdateRequest update); void updated(ItemUpdateRequest update);
@ -135,6 +137,7 @@ struct ItemFieldChanges
bool groupName :1; bool groupName :1;
bool actors :1; bool actors :1;
bool valueNames :1; bool valueNames :1;
bool override :1;
ItemFieldChanges(bool defaultVal = false) ItemFieldChanges(bool defaultVal = false)
{ {
name = defaultVal; name = defaultVal;
@ -144,10 +147,11 @@ struct ItemFieldChanges
groupName = defaultVal; groupName = defaultVal;
actors = false; actors = false;
valueNames = defaultVal; valueNames = defaultVal;
override = defaultVal;
} }
inline bool isNone() const inline bool isNone() const
{ {
return !name && !value && !hidden && !type && !groupName && !actors && !valueNames; return !name && !value && !hidden && !type && !groupName && !actors && !valueNames && !override;
} }
}; };

View file

@ -96,7 +96,10 @@ void ItemSettingsDialog::changeGroup()
void ItemSettingsDialog::changeOverride() 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() void ItemSettingsDialog::loadActorList()