rework undo compression, add shift viewer overwr/copy/clip/splice, fix paste edl...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / vwindow.C
index 243327cde48690b60ae7ed283ee3e956c7a5d19f..451c71320e3be4f4794fb9483b9c89f1abbed6a4 100644 (file)
@@ -212,10 +212,10 @@ void VWindow::change_source(Indexable *indexable)
        if( playback_engine->is_playing_back )
                stop_playback(1);
 
-       gui->lock_window("VWindow::change_source 2");
 //     if(asset && this->asset &&
 //             asset->id == this->asset->id &&
 //             asset == this->asset) return;
+       gui->lock_window("VWindow::change_source 2");
 
 //printf("VWindow::change_source %d\n", __LINE__);
 
@@ -255,7 +255,7 @@ void VWindow::change_source(Indexable *indexable)
        if(asset)
                mwindow->asset_to_edl(this->edl, asset);
        else
-               mwindow->edl_to_nested(this->edl, nested_edl);
+               this->edl->to_nested(nested_edl);
 
 // Update GUI
        gui->change_source(this->edl, title);
@@ -273,13 +273,14 @@ void VWindow::change_source(EDL *edl)
        if( playback_engine->is_playing_back )
                stop_playback(1);
 
-       gui->lock_window("VWindow::change_source 3");
 //printf("VWindow::change_source %d %p\n", __LINE__, edl);
 // EDLs are identical
 //     if(edl && mwindow->edl->vwindow_edl &&
 //             edl->id == mwindow->edl->vwindow_edl->id) return;
        if(edl && get_edl() && edl->id == get_edl()->id) return;
 
+       gui->lock_window("VWindow::change_source 3");
+
        delete_source(1, 0);
 
        if(edl)
@@ -413,22 +414,21 @@ void VWindow::unset_inoutpoint()
        }
 }
 
-void VWindow::copy()
+void VWindow::copy(int all)
 {
        EDL *edl = get_edl();
        if(edl)
        {
-               double start = edl->local_session->get_selectionstart();
-               double end = edl->local_session->get_selectionend();
+               double start = all ? 0 :
+                       edl->local_session->get_selectionstart();
+               double end = all ? edl->tracks->total_length() :
+                       edl->local_session->get_selectionend();
+               EDL *copy_edl = new EDL; // no parent or assets wont be copied
+               copy_edl->create_objects();
+               copy_edl->copy_all(edl);
                FileXML file;
-               edl->copy(start,
-                       end,
-                       0,
-                       0,
-                       0,
-                       &file,
-                       "",
-                       1);
+               copy_edl->copy(start, end, 0, &file, "", 1);
+               copy_edl->remove_user();
                const char *file_string = file.string();
                long file_length = strlen(file_string);
                mwindow->gui->lock_window();