Files
BionxControl/nodes/services/ntxclipboard.cpp

83 lines
1.7 KiB
C++
Raw Permalink Normal View History

2026-04-02 15:15:28 +02:00
#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