this->pane = 0;
drag_operation = Tracks::NONE;
for(int i = 0; i < TRANSFER_TYPES; i++) mode_icons[i] = 0;
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("The Patchbay");
}
PatchBay::PatchBay(MWindow *mwindow,
this->pane = pane;
drag_operation = Tracks::NONE;
for(int i = 0; i < TRANSFER_TYPES; i++) mode_icons[i] = 0;
+// *** CONTEXT_HELP ***
+ context_help_set_keyword("The Patchbay");
// printf("PatchBay::PatchBay %d %d %d %d %d\n",
// __LINE__,
// x,
track;
track = track->next)
{
+ if( track->is_hidden() ) continue;
int y = track->y_pixel - mwindow->edl->local_session->track_start[pane->number];
int h = track->vertical_span(mwindow->theme);
if(cursor_y >= y && cursor_y < y + h)
}
break;
case Tracks::RECORD:
- if(track->record != new_status)
+ if(track->armed != new_status)
{
- track->record = new_status;
+ track->armed = new_status;
update_gui = 1;
}
break;
case Tracks::GANG:
- if(track->gang != new_status)
+ if(track->ganged != new_status)
{
- track->gang = new_status;
+ track->ganged = new_status;
update_gui = 1;
}
break;
// Every patch has a GUI regardless of whether or not it is visible.
// Make sure GUI's are allocated for every patch and deleted for non-existant
// patches.
- for(Track *current = mwindow->edl->tracks->first;
- current;
- current = NEXT, patch_count++)
+ for(Track *current = mwindow->edl->tracks->first; current; current = NEXT)
{
+ if( current->is_hidden() ) continue;
PatchGUI *patchgui = 0;
int y = current->y_pixel;
y -= mwindow->edl->local_session->track_start[pane->number];
patches.append(patchgui);
patchgui->create_objects();
}
+ ++patch_count;
}
while(patches.total > patch_count)
return 0;
}
-void PatchBay::synchronize_faders(float change, int data_type, Track *skip)
+void PatchBay::synchronize_faders(float dv, int data_type, Track *skip, int edge, int span)
{
- for(Track *current = mwindow->edl->tracks->first;
- current;
- current = NEXT)
- {
- if(current->data_type == data_type &&
- current->gang &&
- current->record &&
- current != skip)
- {
- FloatAutos *fade_autos = (FloatAutos*)current->automation->autos[AUTOMATION_FADE];
- double position = mwindow->edl->local_session->get_selectionstart(1);
-
-
- FloatAuto *keyframe = (FloatAuto*)fade_autos->get_auto_for_editing(position);
-
- float new_value = keyframe->get_value() + change;
- if(data_type == TRACK_AUDIO)
- CLAMP(new_value,
- mwindow->edl->local_session->automation_mins[AUTOGROUPTYPE_AUDIO_FADE],
- mwindow->edl->local_session->automation_maxs[AUTOGROUPTYPE_AUDIO_FADE]);
- else
- CLAMP(new_value,
- mwindow->edl->local_session->automation_mins[AUTOGROUPTYPE_VIDEO_FADE],
- mwindow->edl->local_session->automation_maxs[AUTOGROUPTYPE_VIDEO_FADE]);
-
- keyframe->set_value(new_value);
-
- PatchGUI *patch = get_patch_of(current);
- if(patch) patch->update(patch->x, patch->y);
- }
+ for( Track *current=mwindow->edl->tracks->first; current; current=NEXT ) {
+ if( current == skip ) continue;
+ if( skip && !current->armed_gang(skip) ) continue;
+ if( current->data_type != data_type ) continue;
+ if( !current->is_armed() ) continue;
+ FloatAutos *fade_autos = (FloatAutos*)current->automation->autos[AUTOMATION_FADE];
+ double position = mwindow->edl->local_session->get_selectionstart(1);
+ FloatAuto *float_auto = (FloatAuto*)fade_autos->get_auto_for_editing(position);
+ int64_t pos = float_auto->position;
+ float_auto->bump_update(pos, dv, edge, span);
+ PatchGUI *patch = get_patch_of(current);
+ if( patch ) patch->update(patch->x, patch->y);
}
}
void PatchBay::synchronize_nudge(int64_t value, Track *skip)
{
- for(Track *current = mwindow->edl->tracks->first;
- current;
- current = NEXT)
- {
- if(current->data_type == skip->data_type &&
- current->gang &&
- current->record &&
- current != skip)
- {
+ Track *current = mwindow->edl->tracks->first;
+ for( ; current; current = NEXT ) {
+ if( current->data_type == skip->data_type &&
+ current->armed_gang(skip) && current->is_armed() &&
+ current != skip ) {
current->nudge = value;
PatchGUI *patch = get_patch_of(current);
if(patch) patch->update(patch->x, patch->y);