void Editor::undo() { if (mBackupList.size() > 0 && mBackupIndex > -1) { if (mBackupIndex == mBackupList.size() - 1) { BackupElement* lastBackupElement = mBackupList[mBackupIndex]; if (lastBackupElement->type() == BackupElement::BITMAP_MODIF) { BackupBitmapElement* lastBackupBitmapElement = static_cast<BackupBitmapElement*>(lastBackupElement); backup(lastBackupBitmapElement->layer, lastBackupBitmapElement->frame, "NoOp"); mBackupIndex--; } if (lastBackupElement->type() == BackupElement::VECTOR_MODIF) { BackupVectorElement* lastBackupVectorElement = static_cast<BackupVectorElement*>(lastBackupElement); backup(lastBackupVectorElement->layer, lastBackupVectorElement->frame, "NoOp"); mBackupIndex--; } if (lastBackupElement->type() == BackupElement::SOUND_MODIF) { BackupSoundElement* lastBackupSoundElement = static_cast<BackupSoundElement*>(lastBackupElement); backup(lastBackupSoundElement->layer, lastBackupSoundElement->frame, "NoOp"); mBackupIndex--; } } mBackupList[mBackupIndex]->restore(this); mBackupIndex--; mScribbleArea->cancelTransformedSelection(); mScribbleArea->calculateSelectionRect(); // really ugly -- to improve emit updateBackup(); } }
void Editor::undo() { if ( mBackupList.size() > 0 && mBackupIndex > -1 ) { if ( mBackupIndex == mBackupList.size() - 1 ) { BackupElement* lastBackupElement = mBackupList[ mBackupIndex ]; if ( lastBackupElement->type() == BackupElement::BITMAP_MODIF ) { BackupBitmapElement* lastBackupBitmapElement = ( BackupBitmapElement* )lastBackupElement; backup( lastBackupBitmapElement->layer, lastBackupBitmapElement->frame, "NoOp" ); mBackupIndex--; } if ( lastBackupElement->type() == BackupElement::VECTOR_MODIF ) { BackupVectorElement* lastBackupVectorElement = ( BackupVectorElement* )lastBackupElement; backup( lastBackupVectorElement->layer, lastBackupVectorElement->frame, "NoOp" ); mBackupIndex--; } } // mBackupList[ mBackupIndex ]->restore( this ); mBackupIndex--; mScribbleArea->calculateSelectionRect(); // really ugly -- to improve } }
void Editor::restoreKey() { BackupElement* lastBackupElement = mBackupList[mBackupIndex]; Layer* layer = nullptr; int frame = 0; int layerIndex = 0; if (lastBackupElement->type() == BackupElement::BITMAP_MODIF) { BackupBitmapElement* lastBackupBitmapElement = static_cast<BackupBitmapElement*>(lastBackupElement); layerIndex = lastBackupBitmapElement->layer; frame = lastBackupBitmapElement->frame; layer = object()->getLayer(layerIndex); addKeyFrame(layerIndex, frame); dynamic_cast<LayerBitmap*>(layer)->getBitmapImageAtFrame(frame)->paste(&lastBackupBitmapElement->bitmapImage); } if (lastBackupElement->type() == BackupElement::VECTOR_MODIF) { BackupVectorElement* lastBackupVectorElement = static_cast<BackupVectorElement*>(lastBackupElement); layerIndex = lastBackupVectorElement->layer; frame = lastBackupVectorElement->frame; layer = object()->getLayer(layerIndex); addKeyFrame(layerIndex, frame); dynamic_cast<LayerVector*>(layer)->getVectorImageAtFrame(frame)->paste(lastBackupVectorElement->vectorImage); } if (lastBackupElement->type() == BackupElement::SOUND_MODIF) { QString strSoundFile; BackupSoundElement* lastBackupSoundElement = static_cast<BackupSoundElement*>(lastBackupElement); layerIndex = lastBackupSoundElement->layer; frame = lastBackupSoundElement->frame; strSoundFile = lastBackupSoundElement->fileName; KeyFrame* key = addKeyFrame(layerIndex, frame); SoundClip* clip = dynamic_cast<SoundClip*>(key); if (clip) { if (strSoundFile.isEmpty()) { return; } else { //Status st = sound()->pasteSound(clip, strSoundFile); //Q_ASSERT(st.ok()); } } } }