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:
+2
-2
@@ -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
@@ -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:
|
||||
/**
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -32,6 +32,9 @@ public:
|
||||
signals:
|
||||
void SizeChanged(int size);
|
||||
|
||||
protected:
|
||||
virtual void SaveInternal(QXmlStreamWriter* writer) const override;
|
||||
|
||||
private:
|
||||
QVector<NodeInput*> sub_params_;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -42,6 +42,8 @@ public:
|
||||
|
||||
virtual QString name() override;
|
||||
|
||||
virtual void Save(QXmlStreamWriter* writer) const override;
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user