feat(autogen): split off InternalUpdateProperty
This commit is contained in:
parent
30d00a7de2
commit
de30976dc0
4 changed files with 37 additions and 15 deletions
|
@ -85,8 +85,6 @@ void writePropertySetHandler(std::ofstream& out, ClassAnalysis state) {
|
||||||
} else {
|
} else {
|
||||||
out << "\n this->" << prop.fieldName << " = " << castFromVariant("value", prop.backingFieldType) << ";";
|
out << "\n this->" << prop.fieldName << " = " << castFromVariant("value", prop.backingFieldType) << ";";
|
||||||
}
|
}
|
||||||
if (!prop.onUpdateCallback.empty())
|
|
||||||
out << "\n " << prop.onUpdateCallback << "(name);";
|
|
||||||
|
|
||||||
out << "\n }";
|
out << "\n }";
|
||||||
first = false;
|
first = false;
|
||||||
|
@ -106,6 +104,26 @@ void writePropertySetHandler(std::ofstream& out, ClassAnalysis state) {
|
||||||
out << "\n};\n\n";
|
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) {
|
void writePropertyGetHandler(std::ofstream& out, ClassAnalysis state) {
|
||||||
out << "result<Data::Variant, MemberNotFound> " << state.name << "::InternalGetPropertyValue(std::string name) {";
|
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);
|
writePropertySetHandler(out, state);
|
||||||
writePropertyGetHandler(out, state);
|
writePropertyGetHandler(out, state);
|
||||||
writePropertyMetaHandler(out, state);
|
writePropertyMetaHandler(out, state);
|
||||||
|
writePropertyUpdateHandler(out, state);
|
||||||
writePropertiesList(out, state);
|
writePropertiesList(out, state);
|
||||||
}
|
}
|
|
@ -24,10 +24,11 @@
|
||||||
|
|
||||||
#define AUTOGEN_PREAMBLE \
|
#define AUTOGEN_PREAMBLE \
|
||||||
protected: \
|
protected: \
|
||||||
result<PropertyMeta, MemberNotFound> InternalGetPropertyMeta(std::string name) override; \
|
virtual result<PropertyMeta, MemberNotFound> InternalGetPropertyMeta(std::string name) override; \
|
||||||
fallible<MemberNotFound, AssignToReadOnlyMember> InternalSetPropertyValue(std::string name, Data::Variant value) override; \
|
virtual fallible<MemberNotFound, AssignToReadOnlyMember> InternalSetPropertyValue(std::string name, Data::Variant value) override; \
|
||||||
result<Data::Variant, MemberNotFound> InternalGetPropertyValue(std::string name) override; \
|
virtual result<Data::Variant, MemberNotFound> InternalGetPropertyValue(std::string name) override; \
|
||||||
std::vector<std::string> InternalGetProperties() override; \
|
virtual void InternalUpdateProperty(std::string name) override; \
|
||||||
|
virtual std::vector<std::string> InternalGetProperties() override; \
|
||||||
public: \
|
public: \
|
||||||
const static InstanceType TYPE; \
|
const static InstanceType TYPE; \
|
||||||
virtual const InstanceType* GetClass() override; \
|
virtual const InstanceType* GetClass() override; \
|
||||||
|
|
|
@ -189,9 +189,12 @@ result<Data::Variant, MemberNotFound> Instance::GetPropertyValue(std::string nam
|
||||||
return InternalGetPropertyValue(name);
|
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);
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,6 +239,9 @@ fallible<MemberNotFound, AssignToReadOnlyMember> Instance::InternalSetPropertyVa
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Instance::InternalUpdateProperty(std::string name) {
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::string> Instance::InternalGetProperties() {
|
std::vector<std::string> Instance::InternalGetProperties() {
|
||||||
std::vector<std::string> members;
|
std::vector<std::string> members;
|
||||||
members.push_back("Name");
|
members.push_back("Name");
|
||||||
|
@ -245,12 +251,7 @@ std::vector<std::string> Instance::InternalGetProperties() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Instance::UpdateProperty(std::string name) {
|
void Instance::UpdateProperty(std::string name) {
|
||||||
// TODO: temporary workaround because I'm too lazy to implement this in autogen
|
InternalUpdateProperty(name);
|
||||||
InternalSetPropertyValue(name, InternalGetPropertyValue(name).expect()).expect();
|
|
||||||
|
|
||||||
// PropertyMeta meta = GetPropertyMeta(name).expect();
|
|
||||||
// if (!meta.updateCallback) return; // Nothing to update, exit.
|
|
||||||
// meta.updateCallback.value()(name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> Instance::GetProperties() {
|
std::vector<std::string> Instance::GetProperties() {
|
||||||
|
|
|
@ -72,6 +72,7 @@ protected:
|
||||||
virtual result<Data::Variant, MemberNotFound> InternalGetPropertyValue(std::string name);
|
virtual result<Data::Variant, MemberNotFound> InternalGetPropertyValue(std::string name);
|
||||||
virtual fallible<MemberNotFound, AssignToReadOnlyMember> InternalSetPropertyValue(std::string name, Data::Variant value);
|
virtual fallible<MemberNotFound, AssignToReadOnlyMember> InternalSetPropertyValue(std::string name, Data::Variant value);
|
||||||
virtual result<PropertyMeta, MemberNotFound> InternalGetPropertyMeta(std::string name);
|
virtual result<PropertyMeta, MemberNotFound> InternalGetPropertyMeta(std::string name);
|
||||||
|
virtual void InternalUpdateProperty(std::string name);
|
||||||
virtual std::vector<std::string> InternalGetProperties();
|
virtual std::vector<std::string> InternalGetProperties();
|
||||||
|
|
||||||
virtual void OnParentUpdated(std::optional<std::shared_ptr<Instance>> oldParent, std::optional<std::shared_ptr<Instance>> newParent);
|
virtual void OnParentUpdated(std::optional<std::shared_ptr<Instance>> oldParent, std::optional<std::shared_ptr<Instance>> newParent);
|
||||||
|
@ -110,7 +111,7 @@ public:
|
||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
result<Data::Variant, MemberNotFound> GetPropertyValue(std::string name);
|
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);
|
result<PropertyMeta, MemberNotFound> GetPropertyMeta(std::string name);
|
||||||
// Manually trigger the update of a property. Useful internally when setting properties directly
|
// Manually trigger the update of a property. Useful internally when setting properties directly
|
||||||
void UpdateProperty(std::string name);
|
void UpdateProperty(std::string name);
|
||||||
|
|
Loading…
Add table
Reference in a new issue