+
+Track *Track::gang_master()
+{
+ Track *track = this;
+ 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 && !current->master ) {
+ if( !(current = current->previous) ) break;
+ if( current->data_type == data_type ) track = current;
+ }
+ break; }
+ case GANG_MEDIA: {
+ while( track && !track->master ) track = track->previous;
+ break; }
+ }
+ if( !track ) track = tracks->first;
+ return track;
+}
+
+int Track::in_gang(Track *track)
+{
+ 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;
+}
+