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 {
|
||||
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);
|
||||
}
|
|
@ -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; \
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue