undo nested clip bug, wheel zoom redraw fix, uninited vars, shortcuts doc
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mainundo.C
index 3bc8d7cfde8af8135574fc4d1f2acadb13a8dbbc..14268e1d37709f5d0b57e17cb4b89c919c53450d 100644 (file)
@@ -260,6 +260,12 @@ int MainUndo::load_from_undo(FileXML *file, uint32_t load_flags)
                mwindow->close_mixers();
                mwindow->gui->lock_window("MainUndo::load_from_undo");
        }
+       if( (load_flags & LOAD_ALL) == LOAD_ALL ) {
+               EDL *edl = new EDL;
+               edl->create_objects();
+               mwindow->edl->remove_user();
+               mwindow->edl = edl;
+       }
        mwindow->edl->load_xml(file, load_flags);
        for( Asset *asset=mwindow->edl->assets->first; asset; asset=asset->next ) {
                mwindow->mainindexes->add_next_asset(0, asset);
@@ -292,3 +298,30 @@ void MainUndo::dump(FILE *fp)
        undo_stack->dump(fp);
 }
 
+void MainUndo::save(FILE *fp)
+{
+       undo_stack->save(fp);
+}
+
+void MainUndo::load(FILE *fp)
+{
+       undo_stack->load(fp);
+       UndoStackItem *current = undo_stack->current;
+       char *current_data = current ? current->get_data() : 0;
+       if( !current_data ) return;
+       mwindow->gui->lock_window("MainUndo::load");
+       UndoStackItem *next = current->next;
+       mwindow->gui->mainmenu->redo->
+               update_caption(next ? next->get_description() : "");
+       mwindow->set_filename(current->get_filename());
+       FileXML file;
+       file.read_from_string(current_data);
+       load_from_undo(&file, LOAD_ALL);
+       delete [] current_data;
+       UndoStackItem *prev = current->previous;
+       mwindow->gui->mainmenu->undo->
+               update_caption(prev ? prev->get_description() : "");
+       mwindow->update_project(LOADMODE_REPLACE);
+       mwindow->gui->unlock_window();
+}
+