added save functions to various classes

Each class is responsible for its own saving and loading from the XML data
in order to reduce the complexity of the save code.
This commit is contained in:
itsmattkc
2020-01-12 18:36:31 +11:00
parent fa95a61c7b
commit bb57884cac
30 changed files with 275 additions and 35 deletions
+2 -2
View File
@@ -72,12 +72,12 @@ void NodeGraph::TakeNode(Node *node, QObject* new_parent)
emit NodeRemoved(node);
}
const QList<Node *> &NodeGraph::nodes()
const QList<Node *> &NodeGraph::nodes() const
{
return node_children_;
}
bool NodeGraph::ContainsNode(Node *n)
bool NodeGraph::ContainsNode(Node *n) const
{
return (n->parent() == this);
}
+2 -2
View File
@@ -58,12 +58,12 @@ public:
/**
* @brief Retrieve a complete list of the nodes belonging to this graph
*/
const QList<Node*>& nodes();
const QList<Node*>& nodes() const;
/**
* @brief Returns whether a certain Node is in the graph or not
*/
bool ContainsNode(Node* n);
bool ContainsNode(Node* n) const;
signals:
/**
+52
View File
@@ -84,11 +84,63 @@ QString NodeInput::name()
return NodeParam::name();
}
void NodeInput::Save(QXmlStreamWriter *writer) const
{
writer->writeStartElement("input");
writer->writeAttribute("id", id());
writer->writeAttribute("ptr", QString::number(reinterpret_cast<quintptr>(this)));
writer->writeAttribute("keyframing", QString::number(keyframing_));
// Write standard value
writer->writeStartElement("standard");
foreach (const QVariant& v, standard_value_) {
writer->writeTextElement("value", v.toString());
}
writer->writeEndElement(); // standard
// Write keyframes
writer->writeStartElement("keyframes");
foreach (const KeyframeTrack& track, keyframe_tracks()) {
writer->writeStartElement("track");
foreach (NodeKeyframePtr key, track) {
writer->writeStartElement("key");
writer->writeAttribute("time", key->time().toString());
writer->writeAttribute("type", QString::number(key->type()));
writer->writeCharacters(key->value().toString());
writer->writeEndElement(); // key
}
writer->writeEndElement(); // track
}
writer->writeEndElement(); // keyframes
SaveConnections(writer);
SaveInternal(writer);
writer->writeEndElement(); // input
}
const NodeParam::DataType &NodeInput::data_type() const
{
return data_type_;
}
void NodeInput::SaveInternal(QXmlStreamWriter *writer) const
{
}
NodeOutput *NodeInput::get_connected_output() const
{
if (!edges_.isEmpty()) {
+5
View File
@@ -54,6 +54,8 @@ public:
virtual QString name() override;
virtual void Save(QXmlStreamWriter* writer) const override;
/**
* @brief The data type this parameter outputs
*
@@ -238,6 +240,9 @@ signals:
void KeyframeRemoved(NodeKeyframePtr key);
protected:
virtual void SaveInternal(QXmlStreamWriter* writer) const;
private:
/**
* @brief Returns whether a data type can be interpolated or not
+11
View File
@@ -166,3 +166,14 @@ void NodeInputArray::RemoveAt(int index)
RemoveLast();
}
void NodeInputArray::SaveInternal(QXmlStreamWriter *writer) const
{
writer->writeStartElement("subparameters");
foreach (NodeInput* sub, sub_params_) {
sub->Save(writer);
}
writer->writeEndElement(); // subparameters
}
+3
View File
@@ -32,6 +32,9 @@ public:
signals:
void SizeChanged(int size);
protected:
virtual void SaveInternal(QXmlStreamWriter* writer) const override;
private:
QVector<NodeInput*> sub_params_;
+13
View File
@@ -47,6 +47,19 @@ Node::~Node()
}
}
void Node::Save(QXmlStreamWriter *writer) const
{
writer->writeStartElement("node");
writer->writeAttribute("id", id());
foreach (NodeParam* param, parameters()) {
param->Save(writer);
}
writer->writeEndElement(); // node
}
QString Node::Category() const
{
// Return an empty category for any nodes that don't use one
+6
View File
@@ -25,6 +25,7 @@
#include <QMutex>
#include <QObject>
#include <QPointF>
#include <QXmlStreamWriter>
#include "common/rational.h"
#include "node/dependency.h"
@@ -64,6 +65,11 @@ public:
*/
virtual Node* copy() const = 0;
/**
* @brief Save this node into a text/XML format
*/
void Save(QXmlStreamWriter* writer) const;
/**
* @brief Return the name of the node
*
+13
View File
@@ -40,3 +40,16 @@ QString NodeOutput::name()
return NodeParam::name();
}
void NodeOutput::Save(QXmlStreamWriter *writer) const
{
writer->writeStartElement("output");
writer->writeAttribute("id", id());
writer->writeAttribute("ptr", QString::number(reinterpret_cast<quintptr>(this)));
SaveConnections(writer);
writer->writeEndElement(); // output
}
+2
View File
@@ -42,6 +42,8 @@ public:
virtual QString name() override;
virtual void Save(QXmlStreamWriter* writer) const override;
private:
};
+20
View File
@@ -282,3 +282,23 @@ QByteArray NodeParam::ValueToBytesInternal(const QVariant &v)
return bytes;
}
void NodeParam::SaveConnections(QXmlStreamWriter *writer) const
{
writer->writeStartElement("connections");
foreach (NodeEdgePtr edge, edges_) {
NodeParam* other;
if (edge->input() == this) {
other = edge->output();
} else {
other = edge->input();
}
writer->writeTextElement("connection",
QString::number(reinterpret_cast<quintptr>(other)));
}
writer->writeEndElement(); // connections
}
+8
View File
@@ -25,6 +25,7 @@
#include <QObject>
#include <QVariant>
#include <QVector>
#include <QXmlStreamWriter>
#include "common/rational.h"
#include "node/edge.h"
@@ -229,6 +230,11 @@ public:
virtual ~NodeParam() override;
/**
* @brief Save function
*/
virtual void Save(QXmlStreamWriter* writer) const = 0;
/**
* @brief Return ID of this parameter
*/
@@ -368,6 +374,8 @@ signals:
void EdgeRemoved(NodeEdgePtr edge);
protected:
void SaveConnections(QXmlStreamWriter* writer) const;
/**
* @brief Internal list of edges
*/