implemented much of the project loading logic

Still not functional, but much of the groundwork is done.
This commit is contained in:
itsmattkc
2020-01-13 04:09:06 +11:00
parent bb57884cac
commit 16878e3c25
32 changed files with 552 additions and 63 deletions
+88
View File
@@ -26,6 +26,7 @@
#include "common/bezier.h"
#include "common/lerp.h"
#include "common/xmlreadloop.h"
#include "node.h"
#include "output.h"
#include "inputarray.h"
@@ -84,6 +85,85 @@ QString NodeInput::name()
return NodeParam::name();
}
void NodeInput::Load(QXmlStreamReader *reader)
{
XMLAttributeLoop(reader, attr) {
if (attr.name() == "keyframing") {
set_is_keyframing(attr.value() == "1");
}
}
XMLReadLoop(reader, "input") {
if (reader->isStartElement()) {
if (reader->name() == "standard") {
// Load standard value
int val_index = 0;
XMLReadLoop(reader, "standard") {
if (reader->name() == "value") {
reader->readNext();
QString value_text = reader->text().toString();
if (value_text.isEmpty()) {
standard_value_.replace(val_index, QVariant());
} else {
standard_value_.replace(val_index, value_text);
}
val_index++;
}
}
} else if (reader->name() == "keyframes") {
int track = 0;
XMLReadLoop(reader, "keyframes") {
if (reader->name() == "track") {
XMLReadLoop(reader, "track") {
if (reader->name() == "key") {
rational key_time;
NodeKeyframe::Type key_type;
QVariant key_value;
QPointF key_in_handle;
QPointF key_out_handle;
XMLAttributeLoop(reader, attr) {
if (attr.name() == "time") {
key_time = rational::fromString(attr.value().toString());
} else if (attr.name() == "type") {
key_type = static_cast<NodeKeyframe::Type>(attr.value().toInt());
} else if (attr.name() == "inhandlex") {
key_in_handle.setX(attr.value().toDouble());
} else if (attr.name() == "inhandley") {
key_in_handle.setY(attr.value().toDouble());
} else if (attr.name() == "outhandlex") {
key_out_handle.setX(attr.value().toDouble());
} else if (attr.name() == "outhandley") {
key_out_handle.setY(attr.value().toDouble());
}
}
reader->readNext();
key_value = reader->text().toString();
NodeKeyframePtr key = NodeKeyframe::Create(key_time, key_value, key_type, track);
key->set_bezier_control_in(key_in_handle);
key->set_bezier_control_out(key_out_handle);
keyframe_tracks_[track].append(key);
}
}
track++;
}
}
} else {
}
}
}
}
void NodeInput::Save(QXmlStreamWriter *writer) const
{
writer->writeStartElement("input");
@@ -114,6 +194,10 @@ void NodeInput::Save(QXmlStreamWriter *writer) const
writer->writeAttribute("time", key->time().toString());
writer->writeAttribute("type", QString::number(key->type()));
writer->writeAttribute("inhandlex", QString::number(key->bezier_control_in().x()));
writer->writeAttribute("inhandley", QString::number(key->bezier_control_in().y()));
writer->writeAttribute("outhandlex", QString::number(key->bezier_control_out().x()));
writer->writeAttribute("outhandley", QString::number(key->bezier_control_out().y()));
writer->writeCharacters(key->value().toString());
@@ -137,6 +221,10 @@ const NodeParam::DataType &NodeInput::data_type() const
return data_type_;
}
void NodeInput::LoadInternal(QXmlStreamReader *reader)
{
}
void NodeInput::SaveInternal(QXmlStreamWriter *writer) const
{
}