X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftracks.C;h=b70b2b8a5543d4b6ca451081710e3b8c4b8fb358;hp=08952e429d3fbd06e50bfe9859b335a15e623ceb;hb=6fa206c4d00a5bb7418289064dd8466ff477f787;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/tracks.C b/cinelerra-5.1/cinelerra/tracks.C index 08952e42..b70b2b8a 100644 --- a/cinelerra-5.1/cinelerra/tracks.C +++ b/cinelerra-5.1/cinelerra/tracks.C @@ -105,32 +105,39 @@ void Tracks::equivalent_output(Tracks *tracks, double *result) } - - -void Tracks::get_affected_edits(ArrayList *drag_edits, double position, Track *start_track) +void Tracks::clear_selected_edits() { - drag_edits->remove_all(); + for( Track *track=first; track; track=track->next ) { + for( Edit *edit=track->edits->first; edit; edit=edit->next ) + edit->is_selected = 0; + } +} - for(Track *track = start_track; - track; - track = track->next) - { -//printf("Tracks::get_affected_edits 1 %p %d %d\n", track, track->data_type, track->record); - if(track->record) - { - for(Edit *edit = track->edits->first; edit; edit = edit->next) - { - double startproject = track->from_units(edit->startproject); -//printf("Tracks::get_affected_edits 1 %d\n", edl->equivalent(startproject, position)); - if(edl->equivalent(startproject, position)) - { - drag_edits->append(edit); - break; - } +void Tracks::select_affected_edits(double position, Track *start_track, int sense) +{ + for( Track *track=start_track; track; track=track->next ) { + if( !track->record ) continue; + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + double startproject = track->from_units(edit->startproject); + if( edl->equivalent(startproject, position) ) { + edit->is_selected = sense >= 0 ? sense : + edit->is_selected ? 0 : 1; + break; } } } +} +void Tracks::get_selected_edits(ArrayList *drag_edits) +{ + drag_edits->remove_all(); + for( Track *track=first; track; track=track->next ) { + if( !track->record ) continue; + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + if( !edit->is_selected ) continue; + drag_edits->append(edit); + } + } } void Tracks::get_automation_extents(float *min, @@ -646,6 +653,46 @@ int Tracks::track_exists(Track *track) return 0; } +int Tracks::new_group(int id) +{ + int count = 0; + for( Track *track=first; track; track=track->next ) { + if( !track->record ) continue; + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + if( !edit->is_selected ) continue; + edit->group_id = id; + ++count; + } + } + return count; +} + +int Tracks::set_group_selected(int id, int v) +{ + int count = 0; + for( Track *track=first; track; track=track->next ) { + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + if( edit->group_id != id ) continue; + edit->is_selected = v >= 0 ? v : !edit->is_selected ? 1 : 0; + ++count; + } + } + return count; +} + +int Tracks::del_group(int id) +{ + int count = 0; + for( Track *track=first; track; track=track->next ) { + for( Edit *edit=track->edits->first; edit; edit=edit->next ) { + if( edit->group_id != id ) continue; + edit->is_selected = 1; + edit->group_id = 0; + ++count; + } + } + return count; +} Track *Tracks::get(int idx, int data_type) { @@ -657,4 +704,3 @@ Track *Tracks::get(int idx, int data_type) return 0; } -