//printf("VWindow::delete_source %d %d %p %p\n", __LINE__, gui->get_window_lock(), edl, indexable);
if(do_main_edl) mwindow->edl->remove_vwindow_edl(get_edl());
- if(edl)
- {
+ if( edl ) {
edl->Garbage::remove_user();
-//printf("VWindow::delete_source %d\n", __LINE__);
edl = 0;
}
-// if(mwindow->edl->vwindow_edl && !mwindow->edl->vwindow_edl_shared)
-// {
-// mwindow->edl->vwindow_edl->Garbage::remove_user();
-// mwindow->edl->vwindow_edl = 0;
-// mwindow->edl->vwindow_edl_shared = 0;
-// }
-
-//printf("VWindow::delete_source %d\n", __LINE__);
- if(indexable) indexable->Garbage::remove_user();
- indexable = 0;
+ if( indexable ) {
+ indexable->Garbage::remove_user();
+ indexable = 0;
+ }
- if(update_gui) gui->change_source(0, _("Viewer"));
-//printf("VWindow::delete_source %d\n", __LINE__);
+ if( update_gui ) {
+ gui->change_source(0, _("Viewer"));
+ gui->clock->clear();
+ }
}
void VWindow::change_source(Indexable *indexable)
{
+ if( !indexable->is_asset ) {
+ change_source((EDL*)indexable);
+ return;
+ }
if(!running()) return;
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;
-
-//printf("VWindow::change_source %d\n", __LINE__);
char title[BCTEXTLEN];
FileSystem fs;
fs.extract_name(title, indexable->path);
-//printf("VWindow::change_source 1\n");
-
delete_source(1, 0);
-//printf("VWindow::change_source 1\n");
-
-// Generate EDL off of main EDL for cutting
- Asset *asset = 0;
- EDL *nested_edl = 0;
- if(indexable->is_asset)
- {
- this->indexable = asset = new Asset;
- asset->copy_from((Asset*)indexable, 0);
- }
- else
- {
- this->indexable = nested_edl = new EDL;
- nested_edl->create_objects();
- nested_edl->copy_all((EDL*)indexable);
- }
// Create EDL
this->edl = new EDL(mwindow->edl);
this->edl->create_objects();
mwindow->edl->append_vwindow_edl(this->edl, 1);
-// mwindow->edl->vwindow_edl = new EDL(mwindow->edl);
-// mwindow->edl->vwindow_edl_shared = 0;
-// mwindow->edl->vwindow_edl->create_objects();
-
-//printf("VWindow::change_source 1 %d %p %p\n", __LINE__, asset, nested_edl);
- if(asset)
- mwindow->asset_to_edl(this->edl, asset);
- else
- this->edl->to_nested(nested_edl);
+// Generate EDL off of main EDL for cutting
+ Asset *asset = new Asset;
+ asset->copy_from((Asset*)indexable, 0);
+ this->indexable = asset;
+ mwindow->asset_to_edl(this->edl, asset);
// Update GUI
gui->change_source(this->edl, title);
update_position(CHANGE_ALL, 1, 1, 1);
-
-
-//printf("VWindow::change_source 2\n");
gui->unlock_window();
}
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)
mwindow->edl->append_vwindow_edl(edl, 1);
this->edl = edl;
this->edl->Garbage::add_user();
-
+ edl->local_session->preview_start = 0;
+ edl->local_session->preview_end = -1;
// mwindow->edl->vwindow_edl = edl;
// in order not to later delete edl if it is shared
// edl->Garbage::add_user();
}
}
-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, &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();