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);
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<uint32_t>(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> actor)
void Item::setOverride(const bool in)
{
override_ = in;
ItemData::setOverride(in);
}
bool Item::getOverride()
{
return override_;
return ItemData::getOverride();
}
void Item::removeAllActors()

View file

@ -38,6 +38,7 @@ protected:
item_value_type_t type_;
QString groupName_;
std::vector<QString> 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<Actor> > 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;
}
};

View file

@ -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()