From 0831b00a7764a009c6ddaaed25b05d813d838f3a Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Tue, 7 Mar 2023 01:56:17 +0100 Subject: [PATCH] Centralize the extraction of Lua values and fix bug when trying to extract the first parameter of a Lua parameter pack --- ext/ghoul | 2 +- .../properties/list/doublelistproperty.h | 2 - .../properties/list/intlistproperty.h | 2 - .../properties/list/stringlistproperty.h | 3 -- include/openspace/properties/listproperty.h | 4 ++ include/openspace/properties/listproperty.inl | 10 +++++ .../properties/matrix/dmat2property.h | 3 -- .../properties/matrix/dmat3property.h | 3 -- .../properties/matrix/dmat4property.h | 3 -- .../properties/matrix/mat2property.h | 3 -- .../properties/matrix/mat3property.h | 3 -- .../properties/matrix/mat4property.h | 3 -- .../openspace/properties/numericalproperty.h | 2 +- .../properties/numericalproperty.inl | 14 ++++--- .../properties/scalar/boolproperty.h | 2 - .../properties/scalar/doubleproperty.h | 3 -- .../properties/scalar/floatproperty.h | 3 -- .../openspace/properties/scalar/intproperty.h | 3 -- .../properties/scalar/longproperty.h | 3 -- .../properties/scalar/shortproperty.h | 3 -- .../properties/scalar/uintproperty.h | 3 -- .../properties/scalar/ulongproperty.h | 3 -- .../properties/scalar/ushortproperty.h | 3 -- .../openspace/properties/selectionproperty.h | 3 +- include/openspace/properties/stringproperty.h | 2 +- .../openspace/properties/templateproperty.h | 3 +- .../openspace/properties/templateproperty.inl | 6 +-- .../properties/vector/dvec2property.h | 3 -- .../properties/vector/dvec3property.h | 3 -- .../properties/vector/dvec4property.h | 3 -- .../properties/vector/ivec2property.h | 3 -- .../properties/vector/ivec3property.h | 3 -- .../properties/vector/ivec4property.h | 3 -- .../properties/vector/uvec2property.h | 3 -- .../properties/vector/uvec3property.h | 3 -- .../properties/vector/uvec4property.h | 3 -- .../properties/vector/vec2property.h | 3 -- .../properties/vector/vec3property.h | 3 -- .../properties/vector/vec4property.h | 3 -- modules/volume/transferfunctionproperty.cpp | 5 +-- modules/volume/transferfunctionproperty.h | 3 +- src/properties/list/doublelistproperty.cpp | 41 ------------------- src/properties/list/intlistproperty.cpp | 41 ------------------- src/properties/list/stringlistproperty.cpp | 37 ----------------- src/properties/matrix/dmat2property.cpp | 4 -- src/properties/matrix/dmat3property.cpp | 4 -- src/properties/matrix/dmat4property.cpp | 4 -- src/properties/matrix/mat2property.cpp | 4 -- src/properties/matrix/mat3property.cpp | 4 -- src/properties/matrix/mat4property.cpp | 4 -- src/properties/scalar/boolproperty.cpp | 9 ---- src/properties/scalar/doubleproperty.cpp | 11 ----- src/properties/scalar/floatproperty.cpp | 11 ----- src/properties/scalar/intproperty.cpp | 11 ----- src/properties/scalar/longproperty.cpp | 11 ----- src/properties/scalar/shortproperty.cpp | 11 ----- src/properties/scalar/uintproperty.cpp | 11 ----- src/properties/scalar/ulongproperty.cpp | 11 ----- src/properties/scalar/ushortproperty.cpp | 11 ----- src/properties/selectionproperty.cpp | 40 +++--------------- src/properties/stringproperty.cpp | 5 +-- src/properties/vector/dvec2property.cpp | 4 -- src/properties/vector/dvec3property.cpp | 4 -- src/properties/vector/dvec4property.cpp | 4 -- src/properties/vector/ivec2property.cpp | 4 -- src/properties/vector/ivec3property.cpp | 4 -- src/properties/vector/ivec4property.cpp | 4 -- src/properties/vector/uvec2property.cpp | 4 -- src/properties/vector/uvec3property.cpp | 4 -- src/properties/vector/uvec4property.cpp | 4 -- src/properties/vector/vec2property.cpp | 4 -- src/properties/vector/vec3property.cpp | 4 -- src/properties/vector/vec4property.cpp | 4 -- src/scene/scene_lua.inl | 5 ++- support/coding/codegen | 2 +- 75 files changed, 43 insertions(+), 438 deletions(-) diff --git a/ext/ghoul b/ext/ghoul index cbb8bbf7c3..24daa298c6 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit cbb8bbf7c3077f4a18551bad93d69e57278ccf7f +Subproject commit 24daa298c610ddf8ffb012b91f76eac8b6b05948 diff --git a/include/openspace/properties/list/doublelistproperty.h b/include/openspace/properties/list/doublelistproperty.h index 132ab472fc..03ee240b7b 100644 --- a/include/openspace/properties/list/doublelistproperty.h +++ b/include/openspace/properties/list/doublelistproperty.h @@ -41,8 +41,6 @@ public: using TemplateProperty>::operator=; protected: - std::vector fromLuaConversion(lua_State* state, bool& success) const override; - void toLuaConversion(lua_State* state) const override; std::string toStringConversion() const override; }; diff --git a/include/openspace/properties/list/intlistproperty.h b/include/openspace/properties/list/intlistproperty.h index ce9c224744..c898232d98 100644 --- a/include/openspace/properties/list/intlistproperty.h +++ b/include/openspace/properties/list/intlistproperty.h @@ -41,8 +41,6 @@ public: using TemplateProperty>::operator=; protected: - std::vector fromLuaConversion(lua_State* state, bool& success) const override; - void toLuaConversion(lua_State* state) const override; std::string toStringConversion() const override; }; diff --git a/include/openspace/properties/list/stringlistproperty.h b/include/openspace/properties/list/stringlistproperty.h index 80c82c6d46..4d6c1e2e53 100644 --- a/include/openspace/properties/list/stringlistproperty.h +++ b/include/openspace/properties/list/stringlistproperty.h @@ -42,9 +42,6 @@ public: using TemplateProperty>::operator=; protected: - std::vector fromLuaConversion(lua_State* state, - bool& success) const override; - void toLuaConversion(lua_State* state) const override; std::string toStringConversion() const override; }; diff --git a/include/openspace/properties/listproperty.h b/include/openspace/properties/listproperty.h index 22576fe392..061f5f9014 100644 --- a/include/openspace/properties/listproperty.h +++ b/include/openspace/properties/listproperty.h @@ -36,6 +36,10 @@ public: ListProperty(Property::PropertyInfo info, std::vector values); virtual ~ListProperty() override = 0; + +protected: + std::vector fromLuaConversion(lua_State* state) const override; + void toLuaConversion(lua_State* state) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/listproperty.inl b/include/openspace/properties/listproperty.inl index c817e934f7..b2c6fbcf2b 100644 --- a/include/openspace/properties/listproperty.inl +++ b/include/openspace/properties/listproperty.inl @@ -32,5 +32,15 @@ ListProperty::ListProperty(Property::PropertyInfo info, std::vector values template ListProperty::~ListProperty() {} +template +std::vector ListProperty::fromLuaConversion(lua_State* state) const { + return ghoul::lua::value>(state); +} + +template +void ListProperty::toLuaConversion(lua_State* state) const { + ghoul::lua::push(state, TemplateProperty>::_value); +} + } // namespace openspace::properties diff --git a/include/openspace/properties/matrix/dmat2property.h b/include/openspace/properties/matrix/dmat2property.h index fa22d6d1a4..18fbfe7155 100644 --- a/include/openspace/properties/matrix/dmat2property.h +++ b/include/openspace/properties/matrix/dmat2property.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::dmat2x2 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/matrix/dmat3property.h b/include/openspace/properties/matrix/dmat3property.h index 8b8845142f..e98ac3a1cf 100644 --- a/include/openspace/properties/matrix/dmat3property.h +++ b/include/openspace/properties/matrix/dmat3property.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::dmat3x3 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/matrix/dmat4property.h b/include/openspace/properties/matrix/dmat4property.h index 7e08312c69..6a1ae2f87e 100644 --- a/include/openspace/properties/matrix/dmat4property.h +++ b/include/openspace/properties/matrix/dmat4property.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::dmat4x4 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/matrix/mat2property.h b/include/openspace/properties/matrix/mat2property.h index 220d4a1cfe..14a7936200 100644 --- a/include/openspace/properties/matrix/mat2property.h +++ b/include/openspace/properties/matrix/mat2property.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::mat2x2 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/matrix/mat3property.h b/include/openspace/properties/matrix/mat3property.h index 35e990e191..26319be8ea 100644 --- a/include/openspace/properties/matrix/mat3property.h +++ b/include/openspace/properties/matrix/mat3property.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::mat3x3 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/matrix/mat4property.h b/include/openspace/properties/matrix/mat4property.h index 3383fdd6f7..ba6a3ecba6 100644 --- a/include/openspace/properties/matrix/mat4property.h +++ b/include/openspace/properties/matrix/mat4property.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::mat4x4 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/numericalproperty.h b/include/openspace/properties/numericalproperty.h index 2d2b1ceeec..2ae25ae160 100644 --- a/include/openspace/properties/numericalproperty.h +++ b/include/openspace/properties/numericalproperty.h @@ -66,7 +66,7 @@ protected: static const std::string SteppingValueKey; static const std::string ExponentValueKey; - virtual T fromLuaConversion(lua_State* state, bool& success) const override = 0; + T fromLuaConversion(lua_State* state) const override; virtual void toLuaConversion(lua_State* state) const override; virtual std::string toStringConversion() const override; diff --git a/include/openspace/properties/numericalproperty.inl b/include/openspace/properties/numericalproperty.inl index 58336fbc91..29c4a17458 100644 --- a/include/openspace/properties/numericalproperty.inl +++ b/include/openspace/properties/numericalproperty.inl @@ -166,12 +166,9 @@ void NumericalProperty::setInterpolationTarget(std::any value) { template void NumericalProperty::setLuaInterpolationTarget(lua_State* state) { - bool success = false; - T targetValue = fromLuaConversion(state, success); - if (success) { - _interpolationStart = TemplateProperty::_value; - _interpolationEnd = std::move(targetValue); - } + T targetValue = fromLuaConversion(state); + _interpolationStart = TemplateProperty::_value; + _interpolationEnd = std::move(targetValue); } template @@ -191,6 +188,11 @@ void NumericalProperty::toLuaConversion(lua_State* state) const { ghoul::lua::push(state, TemplateProperty::_value); } +template +T NumericalProperty::fromLuaConversion(lua_State* state) const { + return ghoul::lua::value(state); +} + template std::string NumericalProperty::toStringConversion() const { return formatJson(TemplateProperty::_value); diff --git a/include/openspace/properties/scalar/boolproperty.h b/include/openspace/properties/scalar/boolproperty.h index 0d003761ed..c7bf989ed0 100644 --- a/include/openspace/properties/scalar/boolproperty.h +++ b/include/openspace/properties/scalar/boolproperty.h @@ -43,8 +43,6 @@ public: using TemplateProperty::operator=; protected: - bool fromLuaConversion(lua_State* state, bool& success) const override; - void toLuaConversion(lua_State* state) const override; std::string toStringConversion() const override; }; diff --git a/include/openspace/properties/scalar/doubleproperty.h b/include/openspace/properties/scalar/doubleproperty.h index 60bf0bf645..fc8820cf4d 100644 --- a/include/openspace/properties/scalar/doubleproperty.h +++ b/include/openspace/properties/scalar/doubleproperty.h @@ -44,9 +44,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - double fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/scalar/floatproperty.h b/include/openspace/properties/scalar/floatproperty.h index dfcacc8eef..5cf7c28139 100644 --- a/include/openspace/properties/scalar/floatproperty.h +++ b/include/openspace/properties/scalar/floatproperty.h @@ -44,9 +44,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - float fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/scalar/intproperty.h b/include/openspace/properties/scalar/intproperty.h index d4d0ddbbb4..32e0864a3b 100644 --- a/include/openspace/properties/scalar/intproperty.h +++ b/include/openspace/properties/scalar/intproperty.h @@ -44,9 +44,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - int fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/scalar/longproperty.h b/include/openspace/properties/scalar/longproperty.h index e467122081..09c7dbc605 100644 --- a/include/openspace/properties/scalar/longproperty.h +++ b/include/openspace/properties/scalar/longproperty.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - long fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/scalar/shortproperty.h b/include/openspace/properties/scalar/shortproperty.h index 5584fb1b6c..c91c3999eb 100644 --- a/include/openspace/properties/scalar/shortproperty.h +++ b/include/openspace/properties/scalar/shortproperty.h @@ -58,9 +58,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - short fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/scalar/uintproperty.h b/include/openspace/properties/scalar/uintproperty.h index 1a25982776..b004d15e31 100644 --- a/include/openspace/properties/scalar/uintproperty.h +++ b/include/openspace/properties/scalar/uintproperty.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - unsigned int fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/scalar/ulongproperty.h b/include/openspace/properties/scalar/ulongproperty.h index 88ec4ed494..2dbc36cdad 100644 --- a/include/openspace/properties/scalar/ulongproperty.h +++ b/include/openspace/properties/scalar/ulongproperty.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - unsigned long fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/scalar/ushortproperty.h b/include/openspace/properties/scalar/ushortproperty.h index a6a845e512..a5c2f9c917 100644 --- a/include/openspace/properties/scalar/ushortproperty.h +++ b/include/openspace/properties/scalar/ushortproperty.h @@ -45,9 +45,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - unsigned short fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/selectionproperty.h b/include/openspace/properties/selectionproperty.h index cb5cc0c5ea..2207317070 100644 --- a/include/openspace/properties/selectionproperty.h +++ b/include/openspace/properties/selectionproperty.h @@ -114,8 +114,7 @@ public: using TemplateProperty>::operator=; protected: - std::set fromLuaConversion(lua_State* state, - bool& success) const override; + std::set fromLuaConversion(lua_State* state) const override; void toLuaConversion(lua_State* state) const override; diff --git a/include/openspace/properties/stringproperty.h b/include/openspace/properties/stringproperty.h index 2c4881ca25..cd0a470c8b 100644 --- a/include/openspace/properties/stringproperty.h +++ b/include/openspace/properties/stringproperty.h @@ -42,7 +42,7 @@ public: operator std::string_view() const; protected: - std::string fromLuaConversion(lua_State* state, bool& success) const override; + std::string fromLuaConversion(lua_State* state) const override; void toLuaConversion(lua_State* state) const override; std::string toStringConversion() const override; }; diff --git a/include/openspace/properties/templateproperty.h b/include/openspace/properties/templateproperty.h index 2033c66f05..6ce740af0e 100644 --- a/include/openspace/properties/templateproperty.h +++ b/include/openspace/properties/templateproperty.h @@ -188,10 +188,9 @@ protected: * and returns it. This method has to be specialized for each new type. * * \param state The Lua state from which the value will be decoded - * \param success Set to true `true` if the decoding succeeded; `false` otherwise * \return the decoded value */ - virtual T fromLuaConversion(lua_State* state, bool& success) const = 0; + virtual T fromLuaConversion(lua_State* state) const = 0; /** * Encodes the stored value into a Lua object and pushes that object onto diff --git a/include/openspace/properties/templateproperty.inl b/include/openspace/properties/templateproperty.inl index e5604037b1..7cb69893a6 100644 --- a/include/openspace/properties/templateproperty.inl +++ b/include/openspace/properties/templateproperty.inl @@ -87,11 +87,7 @@ bool TemplateProperty::getLuaValue(lua_State* state) const { template bool TemplateProperty::setLuaValue(lua_State* state) { try { - bool success; - T thisValue = fromLuaConversion(state, success); - if (!success) { - return false; - } + T thisValue = fromLuaConversion(state); set(std::any(thisValue)); return true; } diff --git a/include/openspace/properties/vector/dvec2property.h b/include/openspace/properties/vector/dvec2property.h index f97430e286..dcf6d4076f 100644 --- a/include/openspace/properties/vector/dvec2property.h +++ b/include/openspace/properties/vector/dvec2property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::dvec2 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/dvec3property.h b/include/openspace/properties/vector/dvec3property.h index 6fe23b828f..f757b781a2 100644 --- a/include/openspace/properties/vector/dvec3property.h +++ b/include/openspace/properties/vector/dvec3property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::dvec3 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/dvec4property.h b/include/openspace/properties/vector/dvec4property.h index 0e505ec96f..d4e13a4f38 100644 --- a/include/openspace/properties/vector/dvec4property.h +++ b/include/openspace/properties/vector/dvec4property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::dvec4 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/ivec2property.h b/include/openspace/properties/vector/ivec2property.h index 8929c1b04f..394e425c79 100644 --- a/include/openspace/properties/vector/ivec2property.h +++ b/include/openspace/properties/vector/ivec2property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::ivec2 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/ivec3property.h b/include/openspace/properties/vector/ivec3property.h index 070ec0528e..39185715ef 100644 --- a/include/openspace/properties/vector/ivec3property.h +++ b/include/openspace/properties/vector/ivec3property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::ivec3 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/ivec4property.h b/include/openspace/properties/vector/ivec4property.h index 8cecdb6959..73c6c236ad 100644 --- a/include/openspace/properties/vector/ivec4property.h +++ b/include/openspace/properties/vector/ivec4property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::ivec4 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/uvec2property.h b/include/openspace/properties/vector/uvec2property.h index dd44d23f79..2ffc25bcd6 100644 --- a/include/openspace/properties/vector/uvec2property.h +++ b/include/openspace/properties/vector/uvec2property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::uvec2 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/uvec3property.h b/include/openspace/properties/vector/uvec3property.h index 9e35173c7a..95f0342362 100644 --- a/include/openspace/properties/vector/uvec3property.h +++ b/include/openspace/properties/vector/uvec3property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::uvec3 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/uvec4property.h b/include/openspace/properties/vector/uvec4property.h index 88f52d901e..9bbffcd029 100644 --- a/include/openspace/properties/vector/uvec4property.h +++ b/include/openspace/properties/vector/uvec4property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::uvec4 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/vec2property.h b/include/openspace/properties/vector/vec2property.h index 73806945c0..bfbd996e1a 100644 --- a/include/openspace/properties/vector/vec2property.h +++ b/include/openspace/properties/vector/vec2property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::vec2 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/vec3property.h b/include/openspace/properties/vector/vec3property.h index 7482805d19..37f56da6ca 100644 --- a/include/openspace/properties/vector/vec3property.h +++ b/include/openspace/properties/vector/vec3property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::vec3 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/include/openspace/properties/vector/vec4property.h b/include/openspace/properties/vector/vec4property.h index 74405650f1..e9e0a20856 100644 --- a/include/openspace/properties/vector/vec4property.h +++ b/include/openspace/properties/vector/vec4property.h @@ -43,9 +43,6 @@ public: int typeLua() const override; using TemplateProperty::operator=; - -protected: - glm::vec4 fromLuaConversion(lua_State* state, bool& success) const override; }; } // namespace openspace::properties diff --git a/modules/volume/transferfunctionproperty.cpp b/modules/volume/transferfunctionproperty.cpp index a7fd72dc8c..fab076f252 100644 --- a/modules/volume/transferfunctionproperty.cpp +++ b/modules/volume/transferfunctionproperty.cpp @@ -41,10 +41,9 @@ int TransferFunctionProperty::typeLua() const { } openspace::volume::TransferFunction -TransferFunctionProperty::fromLuaConversion(lua_State* state, bool& success) const -{ +TransferFunctionProperty::fromLuaConversion(lua_State* state) const { openspace::volume::TransferFunction tf; - success = tf.setEnvelopesFromLua(state); + tf.setEnvelopesFromLua(state); return tf; } diff --git a/modules/volume/transferfunctionproperty.h b/modules/volume/transferfunctionproperty.h index 2fdc089c03..5d01977219 100644 --- a/modules/volume/transferfunctionproperty.h +++ b/modules/volume/transferfunctionproperty.h @@ -41,8 +41,7 @@ public: using TemplateProperty::operator=; protected: - volume::TransferFunction fromLuaConversion(lua_State* state, - bool& success) const override; + volume::TransferFunction fromLuaConversion(lua_State* state) const override; void toLuaConversion(lua_State* state) const override; std::string toStringConversion() const override; }; diff --git a/src/properties/list/doublelistproperty.cpp b/src/properties/list/doublelistproperty.cpp index 6d737e693e..0baf967fd2 100644 --- a/src/properties/list/doublelistproperty.cpp +++ b/src/properties/list/doublelistproperty.cpp @@ -45,47 +45,6 @@ int DoubleListProperty::typeLua() const { return LUA_TTABLE; } -std::vector DoubleListProperty::fromLuaConversion(lua_State* state, - bool& success) const -{ - if (!lua_istable(state, -1)) { - success = false; - LERRORC(className(), "Conversion from Lua failed. The input was not a table"); - return {}; - } - - std::vector result; - lua_pushnil(state); - while (lua_next(state, -2) != 0) { - if (lua_isnumber(state, -1)) { - result.emplace_back(lua_tonumber(state, -1)); - } - else { - success = false; - LERRORC( - className(), - "Conversion from Lua failed. The input table contains non-number values" - ); - return {}; - } - lua_pop(state, 1); - } - success = true; - return result; -} - -void DoubleListProperty::toLuaConversion(lua_State* state) const { - lua_createtable(state, static_cast(_value.size()), 0); - - int i = 1; - for (double v : _value) { - ghoul::lua::push(state, i); - ghoul::lua::push(state, v); - lua_settable(state, -3); - ++i; - } -} - std::string DoubleListProperty::toStringConversion() const { nlohmann::json json(_value); return json.dump(); diff --git a/src/properties/list/intlistproperty.cpp b/src/properties/list/intlistproperty.cpp index 3a2161cae6..dffad58a5b 100644 --- a/src/properties/list/intlistproperty.cpp +++ b/src/properties/list/intlistproperty.cpp @@ -44,47 +44,6 @@ int IntListProperty::typeLua() const { return LUA_TTABLE; } -std::vector IntListProperty::fromLuaConversion(lua_State* state, - bool& success) const -{ - if (!lua_istable(state, -1)) { - success = false; - LERRORC(className(), "Conversion from Lua failed. The input was not a table"); - return {}; - } - - std::vector result; - lua_pushnil(state); - while (lua_next(state, -2) != 0) { - if (lua_isnumber(state, -1)) { - result.emplace_back(static_cast(lua_tonumber(state, -1))); - } - else { - success = false; - LERRORC( - className(), - "Conversion from Lua failed. The input table contains non-number values" - ); - return {}; - } - lua_pop(state, 1); - } - success = true; - return result; -} - -void IntListProperty::toLuaConversion(lua_State* state) const { - lua_createtable(state, static_cast(_value.size()), 0); - - int i = 1; - for (int v : _value) { - ghoul::lua::push(state, i); - ghoul::lua::push(state, v); - lua_settable(state, -3); - ++i; - } -} - std::string IntListProperty::toStringConversion() const { nlohmann::json json(_value); return json.dump(); diff --git a/src/properties/list/stringlistproperty.cpp b/src/properties/list/stringlistproperty.cpp index 094a64b953..7e3bd7caf5 100644 --- a/src/properties/list/stringlistproperty.cpp +++ b/src/properties/list/stringlistproperty.cpp @@ -45,43 +45,6 @@ int StringListProperty::typeLua() const { return LUA_TTABLE; } -std::vector StringListProperty::fromLuaConversion(lua_State* state, - bool& success) const -{ - if (!lua_istable(state, -1)) { - success = false; - LERRORC(className(), "Conversion from Lua failed. The input was not a table"); - return {}; - } - - std::vector result; - lua_pushnil(state); - while (lua_next(state, -2) != 0) { - if (lua_isstring(state, -1)) { - result.emplace_back(lua_tostring(state, -1)); - } - else { - success = false; - return {}; - } - lua_pop(state, 1); - } - success = true; - return result; -} - -void StringListProperty::toLuaConversion(lua_State* state) const { - lua_createtable(state, static_cast(_value.size()), 0); - - int i = 1; - for (const std::string& v : _value) { - ghoul::lua::push(state, i); - ghoul::lua::push(state, v.c_str()); - lua_settable(state, -3); - ++i; - } -} - std::string StringListProperty::toStringConversion() const { nlohmann::json json(_value); return json.dump(); diff --git a/src/properties/matrix/dmat2property.cpp b/src/properties/matrix/dmat2property.cpp index 5dc81751cf..fc9425516b 100644 --- a/src/properties/matrix/dmat2property.cpp +++ b/src/properties/matrix/dmat2property.cpp @@ -49,8 +49,4 @@ int DMat2Property::typeLua() const { return LUA_TTABLE; } -glm::dmat2x2 DMat2Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/matrix/dmat3property.cpp b/src/properties/matrix/dmat3property.cpp index 00922058fa..74de77b43e 100644 --- a/src/properties/matrix/dmat3property.cpp +++ b/src/properties/matrix/dmat3property.cpp @@ -49,8 +49,4 @@ int DMat3Property::typeLua() const { return LUA_TTABLE; } -glm::dmat3x3 DMat3Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/matrix/dmat4property.cpp b/src/properties/matrix/dmat4property.cpp index 34775c28a8..1c645f70bf 100644 --- a/src/properties/matrix/dmat4property.cpp +++ b/src/properties/matrix/dmat4property.cpp @@ -49,8 +49,4 @@ int DMat4Property::typeLua() const { return LUA_TTABLE; } -glm::dmat4x4 DMat4Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/matrix/mat2property.cpp b/src/properties/matrix/mat2property.cpp index 043202389f..ad27ed35a9 100644 --- a/src/properties/matrix/mat2property.cpp +++ b/src/properties/matrix/mat2property.cpp @@ -49,8 +49,4 @@ int Mat2Property::typeLua() const { return LUA_TTABLE; } -glm::mat2x2 Mat2Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/matrix/mat3property.cpp b/src/properties/matrix/mat3property.cpp index bd5e456429..a352aeaa99 100644 --- a/src/properties/matrix/mat3property.cpp +++ b/src/properties/matrix/mat3property.cpp @@ -49,8 +49,4 @@ int Mat3Property::typeLua() const { return LUA_TTABLE; } -glm::mat3x3 Mat3Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/matrix/mat4property.cpp b/src/properties/matrix/mat4property.cpp index 13ceb4cc9c..57250251ef 100644 --- a/src/properties/matrix/mat4property.cpp +++ b/src/properties/matrix/mat4property.cpp @@ -49,8 +49,4 @@ int Mat4Property::typeLua() const { return LUA_TTABLE; } -glm::mat4x4 Mat4Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/scalar/boolproperty.cpp b/src/properties/scalar/boolproperty.cpp index 471e899301..3d0ae3e216 100644 --- a/src/properties/scalar/boolproperty.cpp +++ b/src/properties/scalar/boolproperty.cpp @@ -41,15 +41,6 @@ int BoolProperty::typeLua() const { return LUA_TBOOLEAN; } -bool BoolProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isboolean(state, -1) == 1); - return success ? (lua_toboolean(state, -1) == 1) : false; -} - -void BoolProperty::toLuaConversion(lua_State* state) const { - ghoul::lua::push(state, _value); -} - std::string BoolProperty::toStringConversion() const { return _value ? "true" : "false"; } diff --git a/src/properties/scalar/doubleproperty.cpp b/src/properties/scalar/doubleproperty.cpp index 3dffa7eda9..1ce8615e34 100644 --- a/src/properties/scalar/doubleproperty.cpp +++ b/src/properties/scalar/doubleproperty.cpp @@ -41,15 +41,4 @@ int DoubleProperty::typeLua() const { return LUA_TNUMBER; } -double DoubleProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - double val = lua_tonumber(state, -1); - return val; - } - else { - return 0.0; - } -} - } // namespace openspace::properties diff --git a/src/properties/scalar/floatproperty.cpp b/src/properties/scalar/floatproperty.cpp index cd3a43e707..46a64c2324 100644 --- a/src/properties/scalar/floatproperty.cpp +++ b/src/properties/scalar/floatproperty.cpp @@ -41,15 +41,4 @@ int FloatProperty::typeLua() const { return LUA_TNUMBER; } -float FloatProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - float val = static_cast(lua_tonumber(state, -1)); - return val; - } - else { - return 0.f; - } -} - } // namespace openspace::properties diff --git a/src/properties/scalar/intproperty.cpp b/src/properties/scalar/intproperty.cpp index 85e009e705..1675272d06 100644 --- a/src/properties/scalar/intproperty.cpp +++ b/src/properties/scalar/intproperty.cpp @@ -41,15 +41,4 @@ int IntProperty::typeLua() const { return LUA_TNUMBER; } -int IntProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - int val = static_cast(lua_tonumber(state, -1)); - return val; - } - else { - return 0; - } -} - } // namespace openspace::properties diff --git a/src/properties/scalar/longproperty.cpp b/src/properties/scalar/longproperty.cpp index 16267e34d1..a9ede12fa8 100644 --- a/src/properties/scalar/longproperty.cpp +++ b/src/properties/scalar/longproperty.cpp @@ -41,15 +41,4 @@ int LongProperty::typeLua() const { return LUA_TNUMBER; } -long LongProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - long val = static_cast(lua_tonumber(state, -1)); - return val; - } - else { - return 0; - } -} - } // namespace openspace::properties diff --git a/src/properties/scalar/shortproperty.cpp b/src/properties/scalar/shortproperty.cpp index 6791b96b6e..5eacfe2f88 100644 --- a/src/properties/scalar/shortproperty.cpp +++ b/src/properties/scalar/shortproperty.cpp @@ -41,15 +41,4 @@ int ShortProperty::typeLua() const { return LUA_TNUMBER; } -short ShortProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - short val = static_cast(lua_tonumber(state, -1)); - return val; - } - else { - return 0; - } -} - } // namespace openspace::properties diff --git a/src/properties/scalar/uintproperty.cpp b/src/properties/scalar/uintproperty.cpp index 2d32b72d84..b823aa5e3a 100644 --- a/src/properties/scalar/uintproperty.cpp +++ b/src/properties/scalar/uintproperty.cpp @@ -48,15 +48,4 @@ int UIntProperty::typeLua() const { return LUA_TNUMBER; } -unsigned int UIntProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - unsigned int val = static_cast(lua_tonumber(state, -1)); - return val; - } - else { - return 0; - } -} - } // namespace openspace::properties diff --git a/src/properties/scalar/ulongproperty.cpp b/src/properties/scalar/ulongproperty.cpp index ce0c43831e..2db4c589ee 100644 --- a/src/properties/scalar/ulongproperty.cpp +++ b/src/properties/scalar/ulongproperty.cpp @@ -48,15 +48,4 @@ int ULongProperty::typeLua() const { return LUA_TNUMBER; } -unsigned long ULongProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - unsigned long val = static_cast(lua_tonumber(state, -1)); - return val; - } - else { - return 0ul; - } -} - } // namespace openspace::properties diff --git a/src/properties/scalar/ushortproperty.cpp b/src/properties/scalar/ushortproperty.cpp index 27b9c2baa3..a61e3dba20 100644 --- a/src/properties/scalar/ushortproperty.cpp +++ b/src/properties/scalar/ushortproperty.cpp @@ -48,15 +48,4 @@ int UShortProperty::typeLua() const { return LUA_TNUMBER; } -unsigned short UShortProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = (lua_isnumber(state, -1) == 1); - if (success) { - unsigned short val = static_cast(lua_tonumber(state, -1)); - return val; - } - else { - return 0; - } -} - } // namespace openspace::properties diff --git a/src/properties/selectionproperty.cpp b/src/properties/selectionproperty.cpp index 94e1d1acff..d86e0e04b6 100644 --- a/src/properties/selectionproperty.cpp +++ b/src/properties/selectionproperty.cpp @@ -129,44 +129,14 @@ void SelectionProperty::clearOptions() { clearSelection(); } -std::set SelectionProperty::fromLuaConversion(lua_State* state, - bool& success) const -{ - constexpr int KEY = -2; - constexpr int VAL = -1; - - if (!lua_istable(state, VAL)) { - LERROR("Parameter passed to the property is not a table"); - success = false; - return {}; - } - - std::set result; - lua_pushnil(state); - while (lua_next(state, KEY) != 0) { - if (lua_isstring(state, VAL)) { - result.insert(lua_tostring(state, -1)); - } - else { - success = false; - return {}; - } - lua_pop(state, 1); - } - - success = true; - return result; +std::set SelectionProperty::fromLuaConversion(lua_State* state) const { + std::vector val = ghoul::lua::value>(state, -1); + return std::set(val.begin(), val.end()); } void SelectionProperty::toLuaConversion(lua_State* state) const { - lua_newtable(state); - int i = 1; - for (const std::string& v : _value) { - lua_pushinteger(state, i); - lua_pushstring(state, v.c_str()); - lua_settable(state, -3); - ++i; - } + std::vector value(_value.begin(), _value.end()); + ghoul::lua::push(state, value); } std::string SelectionProperty::toStringConversion() const { diff --git a/src/properties/stringproperty.cpp b/src/properties/stringproperty.cpp index 544f54f134..73699280d2 100644 --- a/src/properties/stringproperty.cpp +++ b/src/properties/stringproperty.cpp @@ -42,9 +42,8 @@ int StringProperty::typeLua() const { return LUA_TSTRING; } -std::string StringProperty::fromLuaConversion(lua_State* state, bool& success) const { - success = lua_isstring(state, -1) == 1; - return success ? lua_tostring(state, -1) : ""; +std::string StringProperty::fromLuaConversion(lua_State* state) const { + return ghoul::lua::value(state); } void StringProperty::toLuaConversion(lua_State* state) const { diff --git a/src/properties/vector/dvec2property.cpp b/src/properties/vector/dvec2property.cpp index 88f03759b8..5b894193b2 100644 --- a/src/properties/vector/dvec2property.cpp +++ b/src/properties/vector/dvec2property.cpp @@ -49,8 +49,4 @@ int DVec2Property::typeLua() const { return LUA_TTABLE; } -glm::dvec2 DVec2Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/dvec3property.cpp b/src/properties/vector/dvec3property.cpp index 32567d53ba..3565090d5d 100644 --- a/src/properties/vector/dvec3property.cpp +++ b/src/properties/vector/dvec3property.cpp @@ -49,8 +49,4 @@ int DVec3Property::typeLua() const { return LUA_TTABLE; } -glm::dvec3 DVec3Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/dvec4property.cpp b/src/properties/vector/dvec4property.cpp index f4ea6770b4..206cdcdf37 100644 --- a/src/properties/vector/dvec4property.cpp +++ b/src/properties/vector/dvec4property.cpp @@ -49,8 +49,4 @@ int DVec4Property::typeLua() const { return LUA_TTABLE; } -glm::dvec4 DVec4Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/ivec2property.cpp b/src/properties/vector/ivec2property.cpp index 5b1423e8da..831f47bd8b 100644 --- a/src/properties/vector/ivec2property.cpp +++ b/src/properties/vector/ivec2property.cpp @@ -49,8 +49,4 @@ int IVec2Property::typeLua() const { return LUA_TTABLE; } -glm::ivec2 IVec2Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/ivec3property.cpp b/src/properties/vector/ivec3property.cpp index 8fc3b48d2f..1693ab1bb2 100644 --- a/src/properties/vector/ivec3property.cpp +++ b/src/properties/vector/ivec3property.cpp @@ -49,8 +49,4 @@ int IVec3Property::typeLua() const { return LUA_TTABLE; } -glm::ivec3 IVec3Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/ivec4property.cpp b/src/properties/vector/ivec4property.cpp index 1ec75782db..66ff4fb49f 100644 --- a/src/properties/vector/ivec4property.cpp +++ b/src/properties/vector/ivec4property.cpp @@ -49,8 +49,4 @@ int IVec4Property::typeLua() const { return LUA_TTABLE; } -glm::ivec4 IVec4Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/uvec2property.cpp b/src/properties/vector/uvec2property.cpp index 7adeda9865..99d99c36ba 100644 --- a/src/properties/vector/uvec2property.cpp +++ b/src/properties/vector/uvec2property.cpp @@ -49,8 +49,4 @@ int UVec2Property::typeLua() const { return LUA_TTABLE; } -glm::uvec2 UVec2Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/uvec3property.cpp b/src/properties/vector/uvec3property.cpp index 650b57a37a..9bf2f2b7a7 100644 --- a/src/properties/vector/uvec3property.cpp +++ b/src/properties/vector/uvec3property.cpp @@ -49,8 +49,4 @@ int UVec3Property::typeLua() const { return LUA_TTABLE; } -glm::uvec3 UVec3Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/uvec4property.cpp b/src/properties/vector/uvec4property.cpp index 63f42ae8b5..ab770ede00 100644 --- a/src/properties/vector/uvec4property.cpp +++ b/src/properties/vector/uvec4property.cpp @@ -49,8 +49,4 @@ int UVec4Property::typeLua() const { return LUA_TTABLE; } -glm::uvec4 UVec4Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/vec2property.cpp b/src/properties/vector/vec2property.cpp index 1fd7355d22..f13a4a8fa9 100644 --- a/src/properties/vector/vec2property.cpp +++ b/src/properties/vector/vec2property.cpp @@ -48,8 +48,4 @@ int Vec2Property::typeLua() const { return LUA_TTABLE; } -glm::vec2 Vec2Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/vec3property.cpp b/src/properties/vector/vec3property.cpp index 3fe98ef71d..7da51eaef7 100644 --- a/src/properties/vector/vec3property.cpp +++ b/src/properties/vector/vec3property.cpp @@ -48,8 +48,4 @@ int Vec3Property::typeLua() const { return LUA_TTABLE; } -glm::vec3 Vec3Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/properties/vector/vec4property.cpp b/src/properties/vector/vec4property.cpp index 431f210fc5..a6f5c0a8b7 100644 --- a/src/properties/vector/vec4property.cpp +++ b/src/properties/vector/vec4property.cpp @@ -48,8 +48,4 @@ int Vec4Property::typeLua() const { return LUA_TTABLE; } -glm::vec4 Vec4Property::fromLuaConversion(lua_State* state, bool& success) const { - return ghoul::lua::value(state); -} - } // namespace openspace::properties diff --git a/src/scene/scene_lua.inl b/src/scene/scene_lua.inl index fe0a178d2c..0460bc619c 100644 --- a/src/scene/scene_lua.inl +++ b/src/scene/scene_lua.inl @@ -215,7 +215,6 @@ void applyRegularExpression(lua_State* L, const std::string& regex, // end of the loop, the property name regex was probably misspelled. bool foundMatching = false; for (properties::Property* prop : matchingProps) { - // Check that the types match if (type != prop->typeLua()) { LERRORC( @@ -233,6 +232,10 @@ void applyRegularExpression(lua_State* L, const std::string& regex, // value change if the types agree foundMatching = true; + // The setLuaInterpolationTarget and setLuaValue functions will remove the + // value from the stack, so we need to push it to the end + lua_pushvalue(L, -1); + if (global::sessionRecording->isRecording()) { global::sessionRecording->savePropertyBaseline(*prop); } diff --git a/support/coding/codegen b/support/coding/codegen index 3ceac9b873..e72b9d7852 160000 --- a/support/coding/codegen +++ b/support/coding/codegen @@ -1 +1 @@ -Subproject commit 3ceac9b8733bf8fa536d02bf5ca113140177f9f2 +Subproject commit e72b9d7852b57ce841dbf50a79360dadde290648