X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftracksedit.C;h=a3dfca741e4a69f784285087a934e65b2ead7e98;hb=22c6251d37911a11e322bf7518e6a992ea0bb6c7;hp=f1684204d4fdb8d9f74296e7e41c000825b3789c;hpb=9a75aafbc51be29b49351a51e9084bb34d255c0d;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/tracksedit.C b/cinelerra-5.1/cinelerra/tracksedit.C index f1684204..a3dfca74 100644 --- a/cinelerra-5.1/cinelerra/tracksedit.C +++ b/cinelerra-5.1/cinelerra/tracksedit.C @@ -697,6 +697,7 @@ void Tracks::move_effect(Plugin *plugin, Track *track, int64_t position) start, length, plugin->plugin_type); result->copy_from(plugin); result->shift(position - plugin->startproject); + result->gui_id = plugin->gui_id; // Clear new plugin from old set plugin->plugin_set->clear(plugin->startproject, @@ -922,6 +923,61 @@ int Tracks::move_tracks_down() } +int Tracks::swap_track_up(Track *track) +{ + Track *next_track = track->previous; + if(!next_track) next_track = last; + + change_modules(number_of(track), number_of(next_track), 1); + swap(track, next_track); + return 0; +} + +int Tracks::swap_track_down(Track *track) +{ + Track *next_track = track->next; + if(!next_track) next_track = first; + + change_modules(number_of(track), number_of(next_track), 1); + swap(track, next_track); + return 0; +} + + +int Tracks::swap_tracks_up() +{ + int result = 0; + Track *next = first; + while( next ) { + Track *track = next; next = track->next; + if( !track->armed ) continue; + if( track->previous ) { + change_modules(number_of(track->previous), number_of(track), 1); + swap(track->previous, track); + result = 1; + } + } + + return result; +} + +int Tracks::swap_tracks_down() +{ + int result = 0; + Track *prev = last; + while( prev ) { + Track *track = prev; prev = track->previous; + if( !track->armed ) continue; + if( track->next ) { + change_modules(number_of(track), number_of(track->next), 1); + swap(track, track->next); + result = 1; + } + } + + return result; +} + void Tracks::paste_audio_transition(PluginServer *server) { for(Track *current = first; current; current = NEXT) @@ -957,7 +1013,6 @@ void Tracks::paste_automation(double selectionstart, Track* current_atrack = 0; Track* current_vtrack = 0; Track* dst_track = 0; - int src_type; int result = 0; double length; double frame_rate = edl->session->frame_rate; @@ -966,10 +1021,9 @@ void Tracks::paste_automation(double selectionstart, string[0] = 0; // Search for start - do{ - result = file->read_tag(); - }while(!result && - !file->tag.title_is("AUTO_CLIPBOARD")); + do { + result = file->read_tag(); + } while(!result && !file->tag.title_is("AUTO_CLIPBOARD")); if(!result) { @@ -977,7 +1031,6 @@ void Tracks::paste_automation(double selectionstart, frame_rate = file->tag.get_property("FRAMERATE", frame_rate); sample_rate = file->tag.get_property("SAMPLERATE", sample_rate); - do { result = file->read_tag(); @@ -992,15 +1045,9 @@ void Tracks::paste_automation(double selectionstart, if(file->tag.title_is("TRACK")) { file->tag.get_property("TYPE", string); - if(!strcmp(string, "AUDIO")) - { - src_type = TRACK_AUDIO; - } - else - { - src_type = TRACK_VIDEO; - } - + double src_rate = !strcmp(string, "AUDIO") ? + sample_rate : frame_rate; + double src_length = length / src_rate; // paste to any media type if(typeless) { @@ -1042,22 +1089,9 @@ void Tracks::paste_automation(double selectionstart, if(dst_track) { - double frame_rate2 = frame_rate; - double sample_rate2 = sample_rate; - - if(src_type != dst_track->data_type) - { - frame_rate2 = sample_rate; - sample_rate2 = frame_rate; - } - - dst_track->paste_automation(selectionstart, - length, - frame_rate2, - sample_rate2, - file, - default_only, - active_only); + dst_track->paste_automation(file, + selectionstart, src_length, src_rate, + default_only, active_only); } } }