#include "panauto.h"
#include "panautos.h"
#include "patchbay.h"
+#include "plugin.h"
#include "mainsession.h"
#include "strack.h"
#include "theme.h"
}
-int Tracks::delete_track(Track *track)
+int Tracks::delete_track(Track *track, int gang)
{
if( !track ) return 0;
- int gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0;
+ if( gang < 0 )
+ gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0;
Track *nxt = track->next;
if( gang ) {
while( track && !track->master && track->previous )
int Tracks::detach_shared_effects(int module)
{
- for(Track *current = first; current; current = NEXT)
- {
+ for( Track *current=first; current; current=NEXT ) {
current->detach_shared_effects(module);
}
-
return 0;
- }
+}
+int Tracks::detach_ganged_effects(Plugin *plugin)
+{
+ if( edl->session->gang_tracks == GANG_NONE ) return 1;
+ for( Track *current=first; current; current=NEXT ) {
+ if( current == plugin->track ) continue;
+ if( !current->armed_gang(plugin->track) ) continue;
+ current->detach_ganged_effects(plugin);
+ }
+ return 0;
+}
int Tracks::total_of(int type)
{
}
}
+double Tracks::align_timecodes()
+{
+ double offset = -1;
+ for( Track *track=first; track; track=track->next ) {
+ if( !track->is_armed() ) continue;
+ double early_offset = track->edits->early_timecode();
+ if( offset < 0 || offset > early_offset )
+ offset = early_offset;
+ }
+ if( offset >= 0 ) {
+ for( Track *track=first; track; track=track->next ) {
+ if( !track->is_armed() ) continue;
+ track->edits->align_timecodes(offset);
+ }
+ }
+ return offset;
+}
+
+void Tracks::update_idxbl_length(int id, double dt)
+{
+ for( Track *track=first; track; track=track->next ) {
+ if( !track->is_armed() ) continue;
+ int64_t du = track->to_units(dt,0);
+ track->edits->update_idxbl_length(id, du);
+ track->optimize();
+ }
+}
+