void Edit::detach_transition()
{
- if(transition) delete transition;
+ delete transition;
transition = 0;
+ if( edl->session->gang_tracks == GANG_NONE ) return;
+ double pos = track->from_units(startproject);
+ Track *current = edl->tracks->first;
+ for( ; current; current=current->next ) {
+ if( current == track ) continue;
+ if( current->data_type != track->data_type ) continue;
+ if( !current->armed_gang(track) ) continue;
+ int64_t track_pos = current->to_units(pos, 1);
+ Edit *edit = current->edits->editof(track_pos, PLAY_FORWARD, 0);
+ if( !edit ) continue;
+ double edit_pos = track->from_units(edit->startproject);
+ if( !edl->equivalent(pos, edit_pos) ) continue;
+ delete edit->transition;
+ edit->transition = 0;
+ }
}
int Edit::silence()
void Edit::set_selected(int v)
{
- if( group_id )
- edl->tracks->set_group_selected(group_id, v);
+ if( !group_id ) {
+ if( v < 0 ) v = !is_selected ? 1 : 0;
+ int gang = edl->session->gang_tracks != GANG_NONE ? 1 : 0;
+ select_affected_edits(v, gang);
+ }
else
- is_selected = v >= 0 ? v : !is_selected ? 1 : 0;
+ edl->tracks->set_group_selected(group_id, v);
}
+// gang<0: rest of tracks, gang==0: this track, gang>0: to next master
+void Edit::select_affected_edits(int v, int gang)
+{
+ is_selected = v;
+ if( !gang ) return;
+ double position = track->from_units(startproject);
+ for( Track *current=track->next; current; current=current->next ) {
+ if( gang > 0 && current->master ) break;
+ if( !current->is_armed() ) continue;
+ for( Edit *edit=current->edits->first; edit; edit=edit->next ) {
+ if( edit->silence() ) continue;
+ double start = current->from_units(edit->startproject);
+ if( edl->equivalent(start, position) ) {
+ edit->is_selected = v;
+ break;
+ }
+ }
+ }
+}
+
+
void Edit::copy_from(Edit *edit)
{
this->orig_id = edit->orig_id;
w = nested_edl->session->output_w;
h = nested_edl->session->output_h;
}
- return w>0 && h>0 ? ((double)edl->local_session->zoom_track*w)/h : 0;
+ return w>0 && h>0 ? ((double)track->data_h*w)/h : 0;
}
int Edit::picon_h()
{
- return edl->local_session->zoom_track;
+ return track->data_h;
}