diff --git a/src/Mixer.cpp b/src/Mixer.cpp index b5155bb..50a5ab0 100644 --- a/src/Mixer.cpp +++ b/src/Mixer.cpp @@ -531,7 +531,7 @@ bool Mixer::recreateSource(Source *s) // actually create the source with SessionLoader using xml description SessionLoader loader( session_ ); - Source *replacement = loader.createSource(sourceNode, SessionLoader::DUPLICATE); // not clone + Source *replacement = loader.createSource(sourceNode, SessionLoader::REPLACE); // not clone if (replacement == nullptr) { g_printerr("replacement failed \n"); return false; @@ -1543,11 +1543,15 @@ void Mixer::paste(const std::string& clipboard) for( ; sourceNode ; sourceNode = sourceNode->NextSiblingElement()) { - Source *s = loader.createSource(sourceNode); + Source *s = loader.createSource(sourceNode, SessionLoader::DUPLICATE); if (s) { - // Add source to Session - session_->addSource(s); - // Add source to Mixer +// // avoid name duplicates +// renameSource(s); +// // Add source to Session +// session_->addSource(s); +// // Add source to Mixer +// attach(s); + addSource(s); } } diff --git a/src/SessionCreator.cpp b/src/SessionCreator.cpp index 1d32fae..82c9514 100644 --- a/src/SessionCreator.cpp +++ b/src/SessionCreator.cpp @@ -22,8 +22,6 @@ #include "Log.h" #include "defines.h" #include "Scene.h" -#include "Primitives.h" -#include "Mesh.h" #include "Source.h" #include "SourceCallback.h" #include "CloneSource.h" @@ -551,14 +549,17 @@ Source *SessionLoader::createSource(tinyxml2::XMLElement *sourceNode, Mode mode) uint64_t id__ = 0; xmlCurrent_->QueryUnsigned64Attribute("id", &id__); - // check if a source with the given id exists in the session + // for CLONE, find the source with the given id in the session SourceList::iterator sit = session_->end(); - if (mode == CLONE) { + if (mode == CLONE) sit = session_->find(id__); - } // no source with this id exists or Mode DUPLICATE if ( sit == session_->end() ) { + // for DUPLICATE, a new id should be given + if (mode == DUPLICATE) + id__ = 0; + // create a new source depending on type const char *pType = xmlCurrent_->Attribute("type"); if (pType) { @@ -619,8 +620,7 @@ Source *SessionLoader::createSource(tinyxml2::XMLElement *sourceNode, Mode mode) // apply config to source if (load_source) { load_source->accept(*this); - // increment depth for clones (avoid supperposition) - if (is_clone) + if (mode != REPLACE) load_source->group(View::LAYER)->translation_.z += 0.2f; } diff --git a/src/SessionCreator.h b/src/SessionCreator.h index 60c28ee..fce9c01 100644 --- a/src/SessionCreator.h +++ b/src/SessionCreator.h @@ -25,6 +25,7 @@ public: typedef enum { CLONE, + REPLACE, DUPLICATE } Mode; Source *createSource(tinyxml2::XMLElement *sourceNode, Mode mode = CLONE);