#include "panauto.h"
#include "panautos.h"
#include "patchbay.h"
+#include "plugin.h"
#include "mainsession.h"
#include "strack.h"
#include "theme.h"
}
}
+void Tracks::select_edits(double start, double end, int v)
+{
+ for( Track *track=first; track; track=track->next ) {
+ if( !track->is_armed() ) continue;
+ int64_t start_pos = track->to_units(start, 0);
+ int64_t end_pos = track->to_units(end, 0);
+ for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
+ if( start_pos >= edit->startproject+edit->length ) continue;
+ if( edit->startproject >= end_pos ) continue;
+ edit->is_selected = v > 1 ? 1 : v < 0 ? 0 : !edit->is_selected ;
+ }
+ }
+}
+
void Tracks::get_automation_extents(float *min,
float *max,
double start,
}
-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->local_session->gang_tracks != GANG_NONE ? 1 : 0;
Track *nxt = track->next;
if( gang ) {
- while( track && !track->master && track->previous )
- track = track->previous;
+ track = track->gang_master();
while( nxt && !nxt->master )
nxt = nxt->next;
}
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->local_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)
{
IntAuto *mute_auto = (IntAuto *)mute_keyframe;
result +=
- (current->play && type == PLAY) ||
+ (current->plays() && type == PLAY) ||
(current->is_armed() && type == RECORD) ||
(current->is_ganged() && type == GANG) ||
(current->draw && type == DRAW) ||
for(Track *current = first; current; current = NEXT)
{
- if(current->data_type == TRACK_AUDIO && current->play)
+ if(current->data_type == TRACK_AUDIO && current->plays())
{
result++;
}
for(Track *current = first; current; current = NEXT)
{
- if(current->data_type == TRACK_VIDEO && current->play)
+ if(current->data_type == TRACK_VIDEO && current->plays())
{
result++;
}
double total = 0;
for(Track *current = first; current; current = NEXT)
{
- if( current->play )
+ if( current->plays() )
{
double length = current->get_length();
if(length > total) total = length;
int Tracks::set_group_selected(int id, int v)
{
int count = 0;
- int gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0;
+ int gang = edl->local_session->gang_tracks != GANG_NONE ? 1 : 0;
for( Track *track=first; track; track=track->next ) {
if( track->is_hidden() ) continue;
for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
return 0;
}
-void Tracks::move_tracks(Track *src, Track *dst, int n)
+void Tracks::roll_tracks(Track *src, Track *dst, int n)
{
if( src == dst ) return;
while( --n >= 0 && src ) {
}
}
+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();
+ }
+}
+
+void Tracks::create_keyframes(double position, int mask, int mode)
+{
+ for( Track *track=first; track; track=track->next ) {
+ if( !track->is_armed() ) continue;
+ track->create_keyframes(position, mask, mode);
+ }
+}
+