83 lines
1.7 KiB
C++
83 lines
1.7 KiB
C++
|
|
#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
|