mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-12 02:40:00 +01:00
Copy&Paste source DUPLICATE content (not clone)
This commit is contained in:
@@ -531,7 +531,7 @@ bool Mixer::recreateSource(Source *s)
|
|||||||
|
|
||||||
// actually create the source with SessionLoader using xml description
|
// actually create the source with SessionLoader using xml description
|
||||||
SessionLoader loader( session_ );
|
SessionLoader loader( session_ );
|
||||||
Source *replacement = loader.createSource(sourceNode, SessionLoader::DUPLICATE); // not clone
|
Source *replacement = loader.createSource(sourceNode, SessionLoader::REPLACE); // not clone
|
||||||
if (replacement == nullptr) {
|
if (replacement == nullptr) {
|
||||||
g_printerr("replacement failed \n");
|
g_printerr("replacement failed \n");
|
||||||
return false;
|
return false;
|
||||||
@@ -1543,11 +1543,15 @@ void Mixer::paste(const std::string& clipboard)
|
|||||||
|
|
||||||
for( ; sourceNode ; sourceNode = sourceNode->NextSiblingElement())
|
for( ; sourceNode ; sourceNode = sourceNode->NextSiblingElement())
|
||||||
{
|
{
|
||||||
Source *s = loader.createSource(sourceNode);
|
Source *s = loader.createSource(sourceNode, SessionLoader::DUPLICATE);
|
||||||
if (s) {
|
if (s) {
|
||||||
// Add source to Session
|
// // avoid name duplicates
|
||||||
session_->addSource(s);
|
// renameSource(s);
|
||||||
// Add source to Mixer
|
// // Add source to Session
|
||||||
|
// session_->addSource(s);
|
||||||
|
// // Add source to Mixer
|
||||||
|
// attach(s);
|
||||||
|
|
||||||
addSource(s);
|
addSource(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,6 @@
|
|||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "Scene.h"
|
#include "Scene.h"
|
||||||
#include "Primitives.h"
|
|
||||||
#include "Mesh.h"
|
|
||||||
#include "Source.h"
|
#include "Source.h"
|
||||||
#include "SourceCallback.h"
|
#include "SourceCallback.h"
|
||||||
#include "CloneSource.h"
|
#include "CloneSource.h"
|
||||||
@@ -551,14 +549,17 @@ Source *SessionLoader::createSource(tinyxml2::XMLElement *sourceNode, Mode mode)
|
|||||||
uint64_t id__ = 0;
|
uint64_t id__ = 0;
|
||||||
xmlCurrent_->QueryUnsigned64Attribute("id", &id__);
|
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();
|
SourceList::iterator sit = session_->end();
|
||||||
if (mode == CLONE) {
|
if (mode == CLONE)
|
||||||
sit = session_->find(id__);
|
sit = session_->find(id__);
|
||||||
}
|
|
||||||
|
|
||||||
// no source with this id exists or Mode DUPLICATE
|
// no source with this id exists or Mode DUPLICATE
|
||||||
if ( sit == session_->end() ) {
|
if ( sit == session_->end() ) {
|
||||||
|
// for DUPLICATE, a new id should be given
|
||||||
|
if (mode == DUPLICATE)
|
||||||
|
id__ = 0;
|
||||||
|
|
||||||
// create a new source depending on type
|
// create a new source depending on type
|
||||||
const char *pType = xmlCurrent_->Attribute("type");
|
const char *pType = xmlCurrent_->Attribute("type");
|
||||||
if (pType) {
|
if (pType) {
|
||||||
@@ -619,8 +620,7 @@ Source *SessionLoader::createSource(tinyxml2::XMLElement *sourceNode, Mode mode)
|
|||||||
// apply config to source
|
// apply config to source
|
||||||
if (load_source) {
|
if (load_source) {
|
||||||
load_source->accept(*this);
|
load_source->accept(*this);
|
||||||
// increment depth for clones (avoid supperposition)
|
if (mode != REPLACE)
|
||||||
if (is_clone)
|
|
||||||
load_source->group(View::LAYER)->translation_.z += 0.2f;
|
load_source->group(View::LAYER)->translation_.z += 0.2f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ public:
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CLONE,
|
CLONE,
|
||||||
|
REPLACE,
|
||||||
DUPLICATE
|
DUPLICATE
|
||||||
} Mode;
|
} Mode;
|
||||||
Source *createSource(tinyxml2::XMLElement *sourceNode, Mode mode = CLONE);
|
Source *createSource(tinyxml2::XMLElement *sourceNode, Mode mode = CLONE);
|
||||||
|
|||||||
Reference in New Issue
Block a user