void redo() { if (canRedo()) { bool inserted = false; for (int i = m_clonedElements.count() - 1; i >= 0; --i) { Clone &clone = m_clonedElements[i]; QMT_CHECK(clone.m_clonedElement); QMT_CHECK(clone.m_clonedElement->uid() == clone.m_elementKey); MObject *owner = m_modelController->findObject<MObject>(clone.m_ownerKey); QMT_CHECK(owner); QMT_CHECK(clone.m_indexOfElement >= 0); switch (clone.m_elementType) { case TypeObject: { emit m_modelController->beginInsertObject(clone.m_indexOfElement, owner); MObject *object = dynamic_cast<MObject *>(clone.m_clonedElement); QMT_CHECK(object); m_modelController->mapObject(object); owner->insertChild(clone.m_indexOfElement, object); clone.m_clonedElement = 0; emit m_modelController->endInsertObject(clone.m_indexOfElement, owner); inserted = true; break; } case TypeRelation: { emit m_modelController->beginInsertRelation(clone.m_indexOfElement, owner); MRelation *relation = dynamic_cast<MRelation *>(clone.m_clonedElement); QMT_CHECK(relation); m_modelController->mapRelation(relation); owner->insertRelation(clone.m_indexOfElement, relation); clone.m_clonedElement = 0; emit m_modelController->endInsertRelation(clone.m_indexOfElement, owner); inserted = true; break; } default: QMT_CHECK(false); break; } } if (inserted) { emit m_modelController->modified(); } m_modelController->verifyModelIntegrity(); UndoCommand::redo(); } }