X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindowedit.C;h=d424d60879335f2f4dc267f2b57dedb9f88f47dc;hp=6336841b434dfbd73a51c5bf0a6f516c9299a57d;hb=9303c74f396d12f0fb48639ff6a835824cbc5987;hpb=9a75aafbc51be29b49351a51e9084bb34d255c0d diff --git a/cinelerra-5.1/cinelerra/mwindowedit.C b/cinelerra-5.1/cinelerra/mwindowedit.C index 6336841b..d424d608 100644 --- a/cinelerra-5.1/cinelerra/mwindowedit.C +++ b/cinelerra-5.1/cinelerra/mwindowedit.C @@ -85,7 +85,8 @@ void MWindow::add_audio_track_entry(int above, Track *dst) { undo_before(); - add_audio_track(above, dst); + Track *track = add_audio_track(above, dst); + track->master = 1; save_backup(); undo_after(_("add track"), LOAD_ALL); @@ -95,10 +96,11 @@ void MWindow::add_audio_track_entry(int above, Track *dst) cwindow->refresh_frame(CHANGE_EDL); } -void MWindow::add_video_track_entry(Track *dst) +void MWindow::add_video_track_entry(int above, Track *dst) { undo_before(); - add_video_track(1, dst); + Track *track = add_video_track(above, dst); + track->master = 1; undo_after(_("add track"), LOAD_ALL); restart_brender(); @@ -109,10 +111,11 @@ void MWindow::add_video_track_entry(Track *dst) save_backup(); } -void MWindow::add_subttl_track_entry(Track *dst) +void MWindow::add_subttl_track_entry(int above, Track *dst) { undo_before(); - add_subttl_track(1, dst); + Track *track = add_subttl_track(above, dst); + track->master = 1; undo_after(_("add track"), LOAD_ALL); restart_brender(); @@ -124,28 +127,28 @@ void MWindow::add_subttl_track_entry(Track *dst) } -int MWindow::add_audio_track(int above, Track *dst) +Track *MWindow::add_audio_track(int above, Track *dst) { - edl->tracks->add_audio_track(above, dst); + Track *track = edl->tracks->add_audio_track(above, dst); edl->tracks->update_y_pixels(theme); save_backup(); - return 0; + return track; } -int MWindow::add_video_track(int above, Track *dst) +Track *MWindow::add_video_track(int above, Track *dst) { - edl->tracks->add_video_track(above, dst); + Track *track = edl->tracks->add_video_track(above, dst); edl->tracks->update_y_pixels(theme); save_backup(); - return 0; + return track; } -int MWindow::add_subttl_track(int above, Track *dst) +Track *MWindow::add_subttl_track(int above, Track *dst) { - edl->tracks->add_subttl_track(above, dst); + Track *track = edl->tracks->add_subttl_track(above, dst); edl->tracks->update_y_pixels(theme); save_backup(); - return 0; + return track; } void MWindow::asset_to_all() @@ -1202,6 +1205,56 @@ void MWindow::move_tracks_up() } +void MWindow::swap_track_down(Track *track) +{ + undo_before(); + edl->tracks->swap_track_down(track); + save_backup(); + undo_after(_("swap track down"), LOAD_ALL); + + restart_brender(); + gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0); + sync_parameters(CHANGE_EDL); + save_backup(); +} + +void MWindow::swap_tracks_down() +{ + undo_before(); + edl->tracks->swap_tracks_down(); + save_backup(); + undo_after(_("swap tracks down"), LOAD_ALL); + + restart_brender(); + gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0); + sync_parameters(CHANGE_EDL); + save_backup(); +} + +void MWindow::swap_track_up(Track *track) +{ + undo_before(); + edl->tracks->swap_track_up(track); + save_backup(); + undo_after(_("swap track up"), LOAD_ALL); + restart_brender(); + gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0); + sync_parameters(CHANGE_EDL); + save_backup(); +} + +void MWindow::swap_tracks_up() +{ + undo_before(); + edl->tracks->swap_tracks_up(); + save_backup(); + undo_after(_("swap tracks up"), LOAD_ALL); + restart_brender(); + gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0); + sync_parameters(CHANGE_EDL); +} + + void MWindow::mute_selection() { double start = edl->local_session->get_selectionstart(); @@ -2657,3 +2710,103 @@ void MWindow::paste_effects() group->remove_user(); } +void MWindow::align_timecodes() +{ + undo_before(); + double offset = edl->tracks->align_timecodes(); + set_timecode_offset(offset); + save_backup(); + undo_after(_("align timecodes"), LOAD_ALL); + restart_brender(); + cwindow->refresh_frame(CHANGE_EDL); + update_plugin_guis(); +} + + +int MWindow::masters_to_mixers() +{ + Track *master_track = edl->tracks->first; + while( master_track && !master_track->master ) + master_track = master_track->next; + while( master_track ) { // test for track/mixer conflicts + int failed = 0; + Track *mixer_last = master_track; + Track *track = master_track->next; + for( ; track && !track->master; track=track->next ) + mixer_last = track; + Track *next_track = track; + Mixer *master_mixer = 0; + for( int i=0, n=edl->mixers.size(); iindex_in(edl->mixers[i]) >= 0 ) { + master_mixer = edl->mixers[i]; + break; + } + } + if( master_mixer ) { // existing mixer track group + for( track=master_track; !failed && track; track=track->next ) { + if( track->index_in(master_mixer) < 0 ) { + eprintf("Mixer: %s missing track: %s", + master_mixer->title, track->title); + failed = 1; + } + if( track == mixer_last ) break; + } + for( int i=0, n=master_mixer->mixer_ids.size(); !failed && imixer_ids[i], found = 0; + for( track=master_track; track; track=track->next ) { + if( track->mixer_id == mixer_id ) { + found = 1; + break; + } + if( track == mixer_last ) break; + } + if( !found ) { + eprintf("Mixer: %s track missing: %s", + master_mixer->title, track->title); + failed = 1; + } + } + } + else { // create mixer + for( track=master_track->next; !failed && track; track=track->next ) { + for( int i=0, n=edl->mixers.size(); !failed && imixers[i]; + if( track->index_in(mixer) >= 0 ) { + eprintf("Track: %s already exists in mixer: %s", + track->title, mixer->title); + failed = 1; + break; + } + } + if( track == mixer_last ) break; + } + if( !failed ) { // new mixer + ZWindow *zwindow = get_mixer(master_mixer); + zwindow->set_title(master_track->title); + sprintf(master_track->title, _("Mixer %d"), zwindow->idx); + for( track=master_track; track; track=track->next ) { + track->play = track->armed = 0; + master_mixer->mixer_ids.append(track->get_mixer_id()); + if( track == mixer_last ) break; + } + zwindow->start(); + } + } + master_track = next_track; + } + return 0; +} + +void MWindow::mix_masters() +{ + undo_before(); + masters_to_mixers(); + undo_after(_("mix masters"), LOAD_ALL); + + restart_brender(); + gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0); + gui->activate_timeline(); + cwindow->refresh_frame(CHANGE_EDL); + save_backup(); +} +