rework proxy for 1:1 and new layout, fix proxy for resized assets, change track gang_...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / track.C
index c641778d89a30fe7be3b49bfb72b28fcdd4ec3e9..5c07480e249799bbc242512d11764591a357cc6e 100644 (file)
@@ -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)
 {