X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fedit.C;fp=cinelerra-5.1%2Fcinelerra%2Fedit.C;h=f32d1c15cfef084a7c195eed0f3afbb63f5cda78;hp=f06194f8a1de251b2472662176155ac76a1efeaa;hb=48a6854a1ca58aa291ffc6fe3a48807492dfbef7;hpb=84b52741889e1afee840d7c24009cc139244ce74 diff --git a/cinelerra-5.1/cinelerra/edit.C b/cinelerra-5.1/cinelerra/edit.C index f06194f8..f32d1c15 100644 --- a/cinelerra-5.1/cinelerra/edit.C +++ b/cinelerra-5.1/cinelerra/edit.C @@ -247,12 +247,36 @@ int Edit::silence() void Edit::set_selected(int v) { - if( group_id ) - edl->tracks->set_group_selected(group_id, v); + if( !group_id ) { + if( v < 0 ) v = !is_selected ? 1 : 0; + int gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0; + select_affected_edits(v, gang); + } else - is_selected = v >= 0 ? v : !is_selected ? 1 : 0; + edl->tracks->set_group_selected(group_id, v); } +// gang<0: rest of tracks, gang==0: this track, gang>0: to next master +void Edit::select_affected_edits(int v, int gang) +{ + is_selected = v; + if( !gang ) return; + double position = track->from_units(startproject); + for( Track *current=track->next; current; current=current->next ) { + if( gang > 0 && current->master ) break; + if( !current->is_armed() ) continue; + for( Edit *edit=current->edits->first; edit; edit=edit->next ) { + if( edit->silence() ) continue; + double start = current->from_units(edit->startproject); + if( edl->equivalent(start, position) ) { + edit->is_selected = v; + break; + } + } + } +} + + void Edit::copy_from(Edit *edit) { this->orig_id = edit->orig_id;