X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftracks.C;h=7feb1f99cfc1febeec05653ee8843c244ec52f1f;hb=075cbf87b7e1d1eb484ea9185490d898c664b77f;hp=bab0b6b47679be66ca9b5b267e25a73c29be64fb;hpb=ee1879b1a1850e1d4e19c034d4a9c5459274bbb6;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/tracks.C b/cinelerra-5.1/cinelerra/tracks.C index bab0b6b4..7feb1f99 100644 --- a/cinelerra-5.1/cinelerra/tracks.C +++ b/cinelerra-5.1/cinelerra/tracks.C @@ -113,14 +113,16 @@ void Tracks::clear_selected_edits() } } -void Tracks::select_affected_edits(double position, Track *start_track) +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 ) { + if( edit->silence() ) continue; double startproject = track->from_units(edit->startproject); if( edl->equivalent(startproject, position) ) { - edit->is_selected = 1; + edit->is_selected = sense >= 0 ? sense : + edit->is_selected ? 0 : 1; break; } } @@ -131,6 +133,7 @@ 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); @@ -167,6 +170,8 @@ void Tracks::copy_from(Tracks *tracks) Track *new_track = 0; delete_all_tracks(); + int solo_track_id = tracks->edl->local_session->solo_track_id; + for(Track *current = tracks->first; current; current = NEXT) { switch(current->data_type) @@ -184,6 +189,9 @@ void Tracks::copy_from(Tracks *tracks) continue; } new_track->copy_from(current); + + if( current->get_id() == solo_track_id ) + edl->local_session->solo_track_id = new_track->get_id(); } } @@ -622,6 +630,12 @@ Track* Tracks::number(int number) return current; } +Track* Tracks::get_track_by_id(int id) +{ + Track *track = edl->tracks->first; + while( track && track->get_id() != id ) track = track->next; + return track; +} int Tracks::total_playable_vtracks() { @@ -651,6 +665,47 @@ 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->group_id > 0 ) continue; + 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) { @@ -662,4 +717,3 @@ Track *Tracks::get(int idx, int data_type) return 0; } -