From 4d99f47974a5afaecffba354a58fe897ffb9f9c3 Mon Sep 17 00:00:00 2001 From: Jochen Becher Date: Sun, 7 Jan 2018 20:31:02 +0100 Subject: ModelEditor: Implement shared clipboard between all open model-editors Change-Id: Id2eb6f78f8aa1a698a49d35db6cfceab14a38e0b Reviewed-by: Tobias Hunger --- .../qmt/model_controller/modelcontroller.cpp | 27 +++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'src/libs/modelinglib/qmt/model_controller/modelcontroller.cpp') diff --git a/src/libs/modelinglib/qmt/model_controller/modelcontroller.cpp b/src/libs/modelinglib/qmt/model_controller/modelcontroller.cpp index fc3072da27..ff74d61ff3 100644 --- a/src/libs/modelinglib/qmt/model_controller/modelcontroller.cpp +++ b/src/libs/modelinglib/qmt/model_controller/modelcontroller.cpp @@ -604,16 +604,24 @@ void ModelController::setUndoController(UndoController *undoController) m_undoController = undoController; } +Uid ModelController::ownerKey(const Uid &key) const +{ + MElement *element = findElement(key); + if (!element) + return Uid::invalidUid(); + return ownerKey(element); +} + Uid ModelController::ownerKey(const MElement *element) const { QMT_ASSERT(element, return Uid()); MObject *owner = element->owner(); if (!owner) - return Uid(); + return Uid::invalidUid(); return owner->uid(); } -MElement *ModelController::findElement(const Uid &key) +MElement *ModelController::findElement(const Uid &key) const { if (MObject *object = findObject(key)) return object; @@ -915,17 +923,20 @@ MContainer ModelController::copyElements(const MSelection &modelSelection) return copiedElements; } -void ModelController::pasteElements(MObject *owner, const MContainer &modelContainer) +void ModelController::pasteElements(MObject *owner, const MReferences &modelContainer, PasteOption option) { // clone all elements and renew their keys QHash renewedKeys; QList clonedElements; foreach (MElement *element, modelContainer.elements()) { - MCloneDeepVisitor visitor; - element->accept(&visitor); - MElement *clonedElement = visitor.cloned(); - renewElementKey(clonedElement, &renewedKeys); - clonedElements.append(clonedElement); + if (option == PasteAlwaysWithNewKeys || option == PasteAlwaysAndKeepKeys || !findElement(element->uid())) { + MCloneDeepVisitor visitor; + element->accept(&visitor); + MElement *clonedElement = visitor.cloned(); + if (option == PasteAlwaysWithNewKeys || (option == PasteAlwaysAndKeepKeys && findElement(element->uid()))) + renewElementKey(clonedElement, &renewedKeys); + clonedElements.append(clonedElement); + } } // fix all keys referencing between pasting elements foreach (MElement *clonedElement, clonedElements) -- cgit v1.2.1