mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-11 18:34:58 +01:00
Saving and loading of Clone Sources.
This commit is contained in:
@@ -88,6 +88,32 @@ void SessionCreator::loadSession(XMLElement *sessionNode)
|
||||
// TODO : create other types of source
|
||||
|
||||
}
|
||||
|
||||
// create clones after all sources to potentially clone have been created
|
||||
sourceNode = sessionNode->FirstChildElement("Source");
|
||||
for( ; sourceNode ; sourceNode = sourceNode->NextSiblingElement())
|
||||
{
|
||||
xmlCurrent_ = sourceNode;
|
||||
counter++;
|
||||
|
||||
const char *pType = xmlCurrent_->Attribute("type");
|
||||
if (!pType)
|
||||
continue;
|
||||
|
||||
if ( std::string(pType) == "CloneSource") {
|
||||
XMLElement* originNode = xmlCurrent_->FirstChildElement("origin");
|
||||
if (originNode) {
|
||||
std::string sourcename = std::string ( originNode->GetText() );
|
||||
SourceList::iterator origin = session_->find(sourcename);
|
||||
if (origin != session_->end()) {
|
||||
CloneSource *new_clone_source = (*origin)->clone();
|
||||
new_clone_source->accept(*this);
|
||||
session_->addSource(new_clone_source);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
Log::Warning("Session seems empty.");
|
||||
@@ -244,11 +270,5 @@ void SessionCreator::visit (SessionSource& s)
|
||||
|
||||
}
|
||||
|
||||
void SessionCreator::visit (RenderSource& s)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@ public:
|
||||
void visit (Source& s) override;
|
||||
void visit (MediaSource& s) override;
|
||||
void visit (SessionSource& s) override;
|
||||
void visit (RenderSource& s) override;
|
||||
|
||||
static void XMLToNode(tinyxml2::XMLElement *xml, Node &n);
|
||||
};
|
||||
|
||||
@@ -354,3 +354,13 @@ void SessionVisitor::visit (RenderSource& s)
|
||||
{
|
||||
xmlCurrent_->SetAttribute("type", "RenderSource");
|
||||
}
|
||||
|
||||
void SessionVisitor::visit (CloneSource& s)
|
||||
{
|
||||
xmlCurrent_->SetAttribute("type", "CloneSource");
|
||||
|
||||
XMLElement *origin = xmlDoc_->NewElement("origin");
|
||||
xmlCurrent_->InsertEndChild(origin);
|
||||
XMLText *text = xmlDoc_->NewText( s.origin()->name().c_str() );
|
||||
origin->InsertEndChild( text );
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
void visit (MediaSource& s) override;
|
||||
void visit (SessionSource& s) override;
|
||||
void visit (RenderSource& s) override;
|
||||
void visit (CloneSource& s) override;
|
||||
|
||||
static tinyxml2::XMLElement *NodeToXML(Node &n, tinyxml2::XMLDocument *doc);
|
||||
};
|
||||
|
||||
3
Source.h
3
Source.h
@@ -138,7 +138,6 @@ class CloneSource : public Source
|
||||
friend class Source;
|
||||
|
||||
public:
|
||||
CloneSource(Source *origin);
|
||||
~CloneSource();
|
||||
|
||||
// implementation of source API
|
||||
@@ -151,6 +150,8 @@ public:
|
||||
inline Source *origin() const { return origin_; }
|
||||
|
||||
protected:
|
||||
// only Source class can create new CloneSource via clone();
|
||||
CloneSource(Source *origin);
|
||||
|
||||
void init() override;
|
||||
Surface *clonesurface_;
|
||||
|
||||
Reference in New Issue
Block a user