#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