feat(autogen): split off InternalUpdateProperty

This commit is contained in:
maelstrom 2025-04-28 01:27:23 +02:00
parent 30d00a7de2
commit de30976dc0
4 changed files with 37 additions and 15 deletions

View file

@ -85,8 +85,6 @@ void writePropertySetHandler(std::ofstream& out, ClassAnalysis state) {
} else {
out << "\n this->" << prop.fieldName << " = " << castFromVariant("value", prop.backingFieldType) << ";";
}
if (!prop.onUpdateCallback.empty())
out << "\n " << prop.onUpdateCallback << "(name);";
out << "\n }";
first = false;
@ -106,6 +104,26 @@ void writePropertySetHandler(std::ofstream& out, ClassAnalysis state) {
out << "\n};\n\n";
}
void writePropertyUpdateHandler(std::ofstream& out, ClassAnalysis state) {
out << "void " << state.name << "::InternalUpdateProperty(std::string name) {";
out << "\n ";
bool first = true;
for (auto& prop : state.properties) {
if (prop.onUpdateCallback.empty()) continue;
out << (first ? "" : " else ") << "if (name == \"" << prop.name << "\") {";
out << "\n " << prop.onUpdateCallback << "(name);";
out << "\n }";
first = false;
}
out << "\n " << state.baseClass << "::InternalUpdateProperty(name);";
out << "\n};\n\n";
}
void writePropertyGetHandler(std::ofstream& out, ClassAnalysis state) {
out << "result<Data::Variant, MemberNotFound> " << state.name << "::InternalGetPropertyValue(std::string name) {";
@ -224,5 +242,6 @@ void writeCodeForClass(std::ofstream& out, ClassAnalysis& state) {
writePropertySetHandler(out, state);
writePropertyGetHandler(out, state);
writePropertyMetaHandler(out, state);
writePropertyUpdateHandler(out, state);
writePropertiesList(out, state);
}

View file

@ -24,10 +24,11 @@
#define AUTOGEN_PREAMBLE \
protected: \
result<PropertyMeta, MemberNotFound> InternalGetPropertyMeta(std::string name) override; \
fallible<MemberNotFound, AssignToReadOnlyMember> InternalSetPropertyValue(std::string name, Data::Variant value) override; \
result<Data::Variant, MemberNotFound> InternalGetPropertyValue(std::string name) override; \
std::vector<std::string> InternalGetProperties() override; \
virtual result<PropertyMeta, MemberNotFound> InternalGetPropertyMeta(std::string name) override; \
virtual fallible<MemberNotFound, AssignToReadOnlyMember> InternalSetPropertyValue(std::string name, Data::Variant value) override; \
virtual result<Data::Variant, MemberNotFound> InternalGetPropertyValue(std::string name) override; \
virtual void InternalUpdateProperty(std::string name) override; \
virtual std::vector<std::string> InternalGetProperties() override; \
public: \
const static InstanceType TYPE; \
virtual const InstanceType* GetClass() override; \

View file

@ -189,9 +189,12 @@ result<Data::Variant, MemberNotFound> Instance::GetPropertyValue(std::string nam
return InternalGetPropertyValue(name);
}
fallible<MemberNotFound, AssignToReadOnlyMember> Instance::SetPropertyValue(std::string name, Data::Variant value) {
fallible<MemberNotFound, AssignToReadOnlyMember> Instance::SetPropertyValue(std::string name, Data::Variant value, bool sendUpdateEvent) {
auto result = InternalSetPropertyValue(name, value);
if (result.isSuccess()) sendPropertyUpdatedSignal(shared_from_this(), name, value);
if (result.isSuccess() && sendUpdateEvent) {
InternalUpdateProperty(name);
sendPropertyUpdatedSignal(shared_from_this(), name, value);
}
return result;
}
@ -236,6 +239,9 @@ fallible<MemberNotFound, AssignToReadOnlyMember> Instance::InternalSetPropertyVa
return {};
}
void Instance::InternalUpdateProperty(std::string name) {
}
std::vector<std::string> Instance::InternalGetProperties() {
std::vector<std::string> members;
members.push_back("Name");
@ -245,12 +251,7 @@ std::vector<std::string> Instance::InternalGetProperties() {
}
void Instance::UpdateProperty(std::string name) {
// TODO: temporary workaround because I'm too lazy to implement this in autogen
InternalSetPropertyValue(name, InternalGetPropertyValue(name).expect()).expect();
// PropertyMeta meta = GetPropertyMeta(name).expect();
// if (!meta.updateCallback) return; // Nothing to update, exit.
// meta.updateCallback.value()(name);
InternalUpdateProperty(name);
}
std::vector<std::string> Instance::GetProperties() {

View file

@ -72,6 +72,7 @@ protected:
virtual result<Data::Variant, MemberNotFound> InternalGetPropertyValue(std::string name);
virtual fallible<MemberNotFound, AssignToReadOnlyMember> InternalSetPropertyValue(std::string name, Data::Variant value);
virtual result<PropertyMeta, MemberNotFound> InternalGetPropertyMeta(std::string name);
virtual void InternalUpdateProperty(std::string name);
virtual std::vector<std::string> InternalGetProperties();
virtual void OnParentUpdated(std::optional<std::shared_ptr<Instance>> oldParent, std::optional<std::shared_ptr<Instance>> newParent);
@ -110,7 +111,7 @@ public:
// Properties
result<Data::Variant, MemberNotFound> GetPropertyValue(std::string name);
fallible<MemberNotFound, AssignToReadOnlyMember> SetPropertyValue(std::string name, Data::Variant value);
fallible<MemberNotFound, AssignToReadOnlyMember> SetPropertyValue(std::string name, Data::Variant value, bool sendUpdateEvent = true);
result<PropertyMeta, MemberNotFound> GetPropertyMeta(std::string name);
// Manually trigger the update of a property. Useful internally when setting properties directly
void UpdateProperty(std::string name);