Пример #1
0
 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();
     }
 }