feat(datatype): float parser
This commit is contained in:
parent
23ac7ee634
commit
28ed11fb53
5 changed files with 36 additions and 9 deletions
|
@ -4,7 +4,7 @@
|
||||||
#define IMPL_WRAPPER_CLASS(CLASS_NAME, WRAPPED_TYPE, TYPE_NAME) Data::CLASS_NAME::CLASS_NAME(WRAPPED_TYPE in) : value(in) {} \
|
#define IMPL_WRAPPER_CLASS(CLASS_NAME, WRAPPED_TYPE, TYPE_NAME) Data::CLASS_NAME::CLASS_NAME(WRAPPED_TYPE in) : value(in) {} \
|
||||||
Data::CLASS_NAME::~CLASS_NAME() = default; \
|
Data::CLASS_NAME::~CLASS_NAME() = default; \
|
||||||
Data::CLASS_NAME::operator const WRAPPED_TYPE() const { return value; } \
|
Data::CLASS_NAME::operator const WRAPPED_TYPE() const { return value; } \
|
||||||
const Data::TypeInfo Data::CLASS_NAME::TYPE = { .name = TYPE_NAME, .deserializer = &Data::CLASS_NAME::Deserialize }; \
|
const Data::TypeInfo Data::CLASS_NAME::TYPE = { .name = TYPE_NAME, .deserializer = &Data::CLASS_NAME::Deserialize, .fromString = &Data::CLASS_NAME::FromString }; \
|
||||||
const Data::TypeInfo& Data::CLASS_NAME::GetType() const { return Data::CLASS_NAME::TYPE; }; \
|
const Data::TypeInfo& Data::CLASS_NAME::GetType() const { return Data::CLASS_NAME::TYPE; }; \
|
||||||
void Data::CLASS_NAME::Serialize(pugi::xml_node* node) const { node->text().set(std::string(this->ToString())); }
|
void Data::CLASS_NAME::Serialize(pugi::xml_node* node) const { node->text().set(std::string(this->ToString())); }
|
||||||
|
|
||||||
|
@ -45,6 +45,11 @@ Data::Variant Data::Bool::Deserialize(pugi::xml_node* node) {
|
||||||
return Data::Bool(node->text().as_bool());
|
return Data::Bool(node->text().as_bool());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Data::Variant Data::Bool::FromString(std::string string) {
|
||||||
|
return Data::Bool(string[0] == 't' || string[0] == 'T' || string[0] == '1' || string[0] == 'y' || string[0] == 'Y');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const Data::String Data::Int::ToString() const {
|
const Data::String Data::Int::ToString() const {
|
||||||
return Data::String(std::to_string(value));
|
return Data::String(std::to_string(value));
|
||||||
}
|
}
|
||||||
|
@ -53,6 +58,11 @@ Data::Variant Data::Int::Deserialize(pugi::xml_node* node) {
|
||||||
return Data::Int(node->text().as_int());
|
return Data::Int(node->text().as_int());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Data::Variant Data::Int::FromString(std::string string) {
|
||||||
|
return Data::Int(std::stoi(string));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const Data::String Data::Float::ToString() const {
|
const Data::String Data::Float::ToString() const {
|
||||||
return Data::String(std::to_string(value));
|
return Data::String(std::to_string(value));
|
||||||
}
|
}
|
||||||
|
@ -61,10 +71,19 @@ Data::Variant Data::Float::Deserialize(pugi::xml_node* node) {
|
||||||
return Data::Float(node->text().as_float());
|
return Data::Float(node->text().as_float());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Data::Variant Data::Float::FromString(std::string string) {
|
||||||
|
return Data::Float(std::stof(string));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const Data::String Data::String::ToString() const {
|
const Data::String Data::String::ToString() const {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Data::Variant Data::String::Deserialize(pugi::xml_node* node) {
|
Data::Variant Data::String::Deserialize(pugi::xml_node* node) {
|
||||||
return Data::String(node->text().as_string());
|
return Data::String(node->text().as_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
Data::Variant Data::String::FromString(std::string string) {
|
||||||
|
return Data::String(string);
|
||||||
}
|
}
|
|
@ -16,15 +16,18 @@ public: \
|
||||||
virtual const Data::String ToString() const override; \
|
virtual const Data::String ToString() const override; \
|
||||||
virtual void Serialize(pugi::xml_node* node) const override; \
|
virtual void Serialize(pugi::xml_node* node) const override; \
|
||||||
static Data::Variant Deserialize(pugi::xml_node* node); \
|
static Data::Variant Deserialize(pugi::xml_node* node); \
|
||||||
|
static Data::Variant FromString(std::string); \
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Data {
|
namespace Data {
|
||||||
class Variant;
|
class Variant;
|
||||||
typedef std::function<Data::Variant(pugi::xml_node*)> Deserializer;
|
typedef std::function<Data::Variant(pugi::xml_node*)> Deserializer;
|
||||||
|
typedef std::function<Data::Variant(std::string)> FromString;
|
||||||
|
|
||||||
struct TypeInfo {
|
struct TypeInfo {
|
||||||
std::string name;
|
std::string name;
|
||||||
Deserializer deserializer;
|
Deserializer deserializer;
|
||||||
|
FromString fromString;
|
||||||
TypeInfo(const TypeInfo&) = delete;
|
TypeInfo(const TypeInfo&) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -69,33 +69,37 @@ Part::Part(PartConstructParams params): Instance(&TYPE), cframe(Data::CFrame(par
|
||||||
.type = &Data::Bool::TYPE,
|
.type = &Data::Bool::TYPE,
|
||||||
.codec = fieldCodecOf<Data::Bool, bool>(),
|
.codec = fieldCodecOf<Data::Bool, bool>(),
|
||||||
.updateCallback = memberFunctionOf(&Part::onUpdated, this)
|
.updateCallback = memberFunctionOf(&Part::onUpdated, this)
|
||||||
} }, { "Position", {
|
}}, { "Position", {
|
||||||
.backingField = &cframe,
|
.backingField = &cframe,
|
||||||
.type = &Data::Vector3::TYPE,
|
.type = &Data::Vector3::TYPE,
|
||||||
.codec = cframePositionCodec(),
|
.codec = cframePositionCodec(),
|
||||||
.updateCallback = memberFunctionOf(&Part::onUpdated, this),
|
.updateCallback = memberFunctionOf(&Part::onUpdated, this),
|
||||||
.flags = PropertyFlags::PROP_NOSAVE
|
.flags = PropertyFlags::PROP_NOSAVE
|
||||||
} }, { "Rotation", {
|
}}, { "Rotation", {
|
||||||
.backingField = &cframe,
|
.backingField = &cframe,
|
||||||
.type = &Data::Vector3::TYPE,
|
.type = &Data::Vector3::TYPE,
|
||||||
.codec = cframeRotationCodec(),
|
.codec = cframeRotationCodec(),
|
||||||
.updateCallback = memberFunctionOf(&Part::onUpdated, this),
|
.updateCallback = memberFunctionOf(&Part::onUpdated, this),
|
||||||
.flags = PropertyFlags::PROP_NOSAVE
|
.flags = PropertyFlags::PROP_NOSAVE
|
||||||
} }, { "CFrame", {
|
}}, { "CFrame", {
|
||||||
.backingField = &cframe,
|
.backingField = &cframe,
|
||||||
.type = &Data::CFrame::TYPE,
|
.type = &Data::CFrame::TYPE,
|
||||||
.codec = fieldCodecOf<Data::CFrame>(),
|
.codec = fieldCodecOf<Data::CFrame>(),
|
||||||
.updateCallback = memberFunctionOf(&Part::onUpdated, this),
|
.updateCallback = memberFunctionOf(&Part::onUpdated, this),
|
||||||
} }, { "Size", {
|
}}, { "Size", {
|
||||||
.backingField = &size,
|
.backingField = &size,
|
||||||
.type = &Data::Vector3::TYPE,
|
.type = &Data::Vector3::TYPE,
|
||||||
.codec = fieldCodecOf<Data::Vector3, glm::vec3>(),
|
.codec = fieldCodecOf<Data::Vector3, glm::vec3>(),
|
||||||
.updateCallback = memberFunctionOf(&Part::onUpdated, this)
|
.updateCallback = memberFunctionOf(&Part::onUpdated, this)
|
||||||
} }, { "Color", {
|
}}, { "Color", {
|
||||||
.backingField = &color,
|
.backingField = &color,
|
||||||
.type = &Data::Color3::TYPE,
|
.type = &Data::Color3::TYPE,
|
||||||
.codec = fieldCodecOf<Data::Color3>(),
|
.codec = fieldCodecOf<Data::Color3>(),
|
||||||
} }
|
}}, { "Transparency", {
|
||||||
|
.backingField = &transparency,
|
||||||
|
.type = &Data::Float::TYPE,
|
||||||
|
.codec = fieldCodecOf<Data::Float, float>(),
|
||||||
|
}}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ public:
|
||||||
Data::CFrame cframe;
|
Data::CFrame cframe;
|
||||||
glm::vec3 size;
|
glm::vec3 size;
|
||||||
Data::Color3 color;
|
Data::Color3 color;
|
||||||
|
float transparency = 0.f;
|
||||||
bool selected = false;
|
bool selected = false;
|
||||||
|
|
||||||
bool anchored = false;
|
bool anchored = false;
|
||||||
|
|
|
@ -56,10 +56,10 @@ bool PropertiesModel::setData(const QModelIndex &index, const QVariant &value, i
|
||||||
|
|
||||||
switch (role) {
|
switch (role) {
|
||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
if (meta.type != &Data::String::TYPE)
|
if (!meta.type->fromString)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
selectedItem->SetPropertyValue(propertyName, value.toString().toStdString());
|
selectedItem->SetPropertyValue(propertyName, meta.type->fromString(value.toString().toStdString()));
|
||||||
return true;
|
return true;
|
||||||
case Qt::CheckStateRole:
|
case Qt::CheckStateRole:
|
||||||
if (meta.type != &Data::Bool::TYPE)
|
if (meta.type != &Data::Bool::TYPE)
|
||||||
|
|
Loading…
Add table
Reference in a new issue