X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftrack.C;h=5c07480e249799bbc242512d11764591a357cc6e;hb=eabda9cf447580a974fd3d67a3d0a26f09aeb523;hp=c641778d89a30fe7be3b49bfb72b28fcdd4ec3e9;hpb=84ac8a2bb3357c04a3f67cf763b0f61ddbbd021d;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/track.C b/cinelerra-5.1/cinelerra/track.C index c641778d..5c07480e 100644 --- a/cinelerra-5.1/cinelerra/track.C +++ b/cinelerra-5.1/cinelerra/track.C @@ -1790,19 +1790,31 @@ void Track::set_camera(float x, float y, float z) set_fauto_xyz(AUTOMATION_CAMERA_X, x, y, z); } +int Track::is_hidden() +{ + if( master ) return 0; + if( edl->local_session->gang_tracks == GANG_MEDIA ) return 1; + if( edl->local_session->gang_tracks == GANG_CHANNELS ) { + for( Track *track=previous; track; track=track->previous ) { + if( track->data_type == data_type ) return 1; + if( track->master ) return 0; + } + } + return 0; +} + Track *Track::gang_master() { Track *track = this; - switch( edl->session->gang_tracks ) { + switch( edl->local_session->gang_tracks ) { case GANG_NONE: return track; case GANG_CHANNELS: { Track *current = track; int data_type = track->data_type; - while( current && !track->master ) { + while( current && !current->master ) { if( !(current = current->previous) ) break; if( current->data_type == data_type ) track = current; - if( track->master ) break; } break; } case GANG_MEDIA: { @@ -1813,32 +1825,31 @@ Track *Track::gang_master() return track; } -int Track::is_hidden() +int Track::in_gang(Track *track) { - if( master ) return 0; - if( edl->session->gang_tracks == GANG_MEDIA ) return 1; - if( edl->session->gang_tracks == GANG_CHANNELS ) { - for( Track *track=previous; track; track=track->previous ) { - if( track->data_type == data_type ) return 1; - if( track->master ) return 0; - } - } - return 0; + if( edl->local_session->gang_tracks == GANG_NONE ) return ganged; + Track *current = this; + while( current && !current->master ) current = current->previous; + while( track && !track->master ) track = track->previous; + return current == track ? 1 : 0; } + int Track::is_armed() { - return gang_master()->armed; + return armed && gang_master()->armed; } int Track::is_ganged() { - return gang_master()->ganged; + return ganged && gang_master()->ganged; } int Track::armed_gang(Track *track) { - if( edl->session->gang_tracks == GANG_NONE ) return ganged; + if( !track->ganged ) return 0; + if( edl->local_session->gang_tracks == GANG_NONE ) return ganged; Track *current = gang_master(); + if( !current->ganged ) return 0; for(;;) { if( track == current ) return 1; current = current->next; @@ -1847,6 +1858,10 @@ int Track::armed_gang(Track *track) return 1; } +int Track::plays() +{ + return play && gang_master()->play; +} int Track::index_in(Mixer *mixer) {