X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Ftracks.C;h=8cbf92cec4c927bc3a7732d7b8547e858f5bb85a;hb=000e295b1fdc93084a11b304cf0b65c158dab4ea;hp=419f26d93690dc20c14533d9127fc6270195f75c;hpb=9303c74f396d12f0fb48639ff6a835824cbc5987;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/tracks.C b/cinelerra-5.1/cinelerra/tracks.C index 419f26d9..8cbf92ce 100644 --- a/cinelerra-5.1/cinelerra/tracks.C +++ b/cinelerra-5.1/cinelerra/tracks.C @@ -126,6 +126,20 @@ void Tracks::get_selected_edits(ArrayList *drag_edits) } } +void Tracks::select_edits(double start, double end, int v) +{ + for( Track *track=first; track; track=track->next ) { + if( !track->is_armed() ) continue; + int64_t start_pos = track->to_units(start, 0); + int64_t end_pos = track->to_units(end, 0); + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + if( start_pos >= edit->startproject+edit->length ) continue; + if( edit->startproject >= end_pos ) continue; + edit->is_selected = v > 1 ? 1 : v < 0 ? 0 : !edit->is_selected ; + } + } +} + void Tracks::get_automation_extents(float *min, float *max, double start, @@ -322,8 +336,7 @@ int Tracks::delete_track(Track *track, int gang) gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0; Track *nxt = track->next; if( gang ) { - while( track && !track->master && track->previous ) - track = track->previous; + track = track->gang_master(); while( nxt && !nxt->master ) nxt = nxt->next; } @@ -769,7 +782,7 @@ Track *Tracks::get(int idx, int data_type) return 0; } -void Tracks::move_tracks(Track *src, Track *dst, int n) +void Tracks::roll_tracks(Track *src, Track *dst, int n) { if( src == dst ) return; while( --n >= 0 && src ) { @@ -805,3 +818,21 @@ double Tracks::align_timecodes() return offset; } +void Tracks::update_idxbl_length(int id, double dt) +{ + for( Track *track=first; track; track=track->next ) { + if( !track->is_armed() ) continue; + int64_t du = track->to_units(dt,0); + track->edits->update_idxbl_length(id, du); + track->optimize(); + } +} + +void Tracks::create_keyframes(double position, int mask, int mode) +{ + for( Track *track=first; track; track=track->next ) { + if( !track->is_armed() ) continue; + track->create_keyframes(position, mask, mode); + } +} +