added nodes.
This commit is contained in:
83
nodes/services/ntxclipboard.cpp
Normal file
83
nodes/services/ntxclipboard.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#include "ntxclipboard.h"
|
||||
|
||||
namespace ntx
|
||||
{
|
||||
void NtxClipboard::copyNodes(const NtxNodeList& nodes)
|
||||
{
|
||||
m_nodeEntryList.clear();
|
||||
|
||||
for (const auto& node : nodes)
|
||||
{
|
||||
if (!node) continue;
|
||||
|
||||
NtxNodeEntry entry;
|
||||
entry.clone = createOrphanClone(node);
|
||||
entry.originalParent = node->getParent();
|
||||
entry.originalPosition = node->ownPos().value_or(0);
|
||||
|
||||
m_nodeEntryList.push_back(entry);
|
||||
}
|
||||
}
|
||||
|
||||
void NtxClipboard::cutNodes(const NtxNodeList& nodes)
|
||||
{
|
||||
// Identisch zu copyNodes - Der Unterschied liegt in NtxHeadNode
|
||||
copyNodes(nodes);
|
||||
}
|
||||
|
||||
NtxNodeList NtxClipboard::pasteNodes() const
|
||||
{
|
||||
NtxNodeList result;
|
||||
|
||||
for (const auto& entry : m_nodeEntryList)
|
||||
{
|
||||
if (!entry.clone) continue;
|
||||
|
||||
// Neuen Klon vom Clipboard-Clone erstellen (mehrfaches Paste möglich)
|
||||
auto freshClone = entry.clone->clone();
|
||||
if (freshClone)
|
||||
{
|
||||
result.push_back(freshClone);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool NtxClipboard::isEmpty() const
|
||||
{
|
||||
return m_nodeEntryList.empty();
|
||||
}
|
||||
|
||||
size_t NtxClipboard::getCount() const
|
||||
{
|
||||
return m_nodeEntryList.size();
|
||||
}
|
||||
|
||||
void NtxClipboard::clear()
|
||||
{
|
||||
m_nodeEntryList.clear();
|
||||
}
|
||||
|
||||
const NtxNodeEntryList& NtxClipboard::getEntries() const
|
||||
{
|
||||
return m_nodeEntryList;
|
||||
}
|
||||
|
||||
NtxNodePtr NtxClipboard::createOrphanClone(NtxNodePtr node) const
|
||||
{
|
||||
if (!node) return nullptr;
|
||||
|
||||
// Deep-Clone erstellen
|
||||
auto clone = node->clone();
|
||||
|
||||
// Parent-Verbindung trennen (Elternlos machen)
|
||||
if (clone)
|
||||
{
|
||||
clone->setParent(nullptr);
|
||||
}
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
} // namespace ntx
|
||||
Reference in New Issue
Block a user