edl->session->edit_handle_mode[session->drag_button],
edl->session->labels_follow_edits,
edl->session->plugins_follow_edits,
- edl->session->autos_follow_edits);
+ edl->session->autos_follow_edits,
+ session->drag_edit->group_id);
finish_modify_handles();
//printf("MWindow::modify_handles 1\n");
{
if( !edits->size() ) return;
undo->update_undo_before();
+ if( edl->session->labels_follow_edits )
+ edl->delete_edit_labels(edits, collapse);
edl->delete_edits(edits, collapse);
edl->optimize();
save_backup();
void MWindow::move_edits(ArrayList<Edit*> *edits,
- Track *track,
- double position,
- int behaviour)
+ Track *track, double position, int mode)
{
undo->update_undo_before();
-
- EDL *clip = selected_edits_to_clip(1, 0, 0,
- edl->session->labels_follow_edits,
- edl->session->autos_follow_edits,
- edl->session->plugins_follow_edits);
- edl->delete_edits(edits, 0);
- paste_edits(clip, track, position, behaviour, 1,
+// lockout timebar labels update
+// labels can be deleted with tooltip repeater running
+ cwindow->gui->lock_window("Tracks::move_edits");
+ edl->tracks->move_edits(edits, track, position,
edl->session->labels_follow_edits,
- edl->session->autos_follow_edits,
- edl->session->plugins_follow_edits);
- edl->tracks->clear_selected_edits();
+ edl->session->plugins_follow_edits,
+ edl->session->autos_follow_edits, mode);
+ cwindow->gui->timebar->update(1);
+ cwindow->gui->unlock_window();
save_backup();
undo->update_undo_after(_("move edit"), LOAD_ALL);
for( ; plugin; plugin=(Plugin *)plugin->next ) {
if( plugin->startproject >= start )
plugin->startproject += edit->length;
+ else if( plugin->startproject+plugin->length > end )
+ plugin->length += edit->length;
Auto *default_keyframe = plugin->keyframes->default_auto;
if( default_keyframe->position >= start )
default_keyframe->position += edit->length;
keyframe->position += edit->length;
}
}
+ plugin_set->optimize();
}
}
}
for( ; plugin; plugin=(Plugin *)plugin->next ) {
int64_t start = pos + plugin->startproject;
int64_t end = start + plugin->length;
- if( overwrite )
+ if( overwrite || edit_edits )
dst_plugin_set->clear(start, end, 1);
- Plugin *dst = dst_plugin_set->insert_plugin(
- plugin->title, start, end-start,
- plugin->plugin_type, &plugin->shared_location,
+ Plugin *new_plugin = dst_plugin_set->insert_plugin(plugin->title,
+ start, end-start, plugin->plugin_type, &plugin->shared_location,
(KeyFrame*)plugin->keyframes->default_auto, 0);
KeyFrame *keyframe = (KeyFrame*)plugin->keyframes->first;
for( ; keyframe; keyframe=(KeyFrame*)keyframe->next ) {
int64_t keyframe_pos = pos + keyframe->position;
- dst->keyframes->insert_auto(keyframe_pos, keyframe);
+ new_plugin->keyframes->insert_auto(keyframe_pos, keyframe);
+ }
+ while( (new_plugin=(Plugin *)new_plugin->next) ) {
+ KeyFrame *keyframe = (KeyFrame*)new_plugin->keyframes->first;
+ for( ; keyframe; keyframe=(KeyFrame*)keyframe->next )
+ keyframe->position += plugin->length;
}
}
}
void MWindow::move_group(EDL *group, Track *first_track, double position, int overwrite)
{
undo->update_undo_before();
+// lockout timebar labels update
+// labels can be deleted with tooltip repeater running
+ cwindow->gui->lock_window("Tracks::move_group");
ArrayList<Edit *>edits;
edl->tracks->get_selected_edits(&edits);
+ if( edl->session->labels_follow_edits )
+ edl->delete_edit_labels(&edits, 0);
edl->delete_edits(&edits, 0);
paste_edits(group, first_track, position, overwrite, 1,
edl->session->labels_follow_edits,
edl->session->autos_follow_edits,
edl->session->plugins_follow_edits);
+ cwindow->gui->timebar->update(1);
+ cwindow->gui->unlock_window();
// big debate over whether to do this, must either clear selected, or no tweaking
// edl->tracks->clear_selected_edits();
if( load_mode != LOADMODE_RESOURCESONLY &&
load_mode != LOADMODE_ASSETSONLY ) {
// Insert labels
+ if( edl->session->labels_follow_edits ) {
//printf("MWindow::paste_edls %f %f\n", current_position, edl_length);
- if( load_mode == LOADMODE_PASTE ||
- load_mode == LOADMODE_NESTED )
- edl->labels->insert_labels(new_edl->labels,
- destination_tracks.total ? paste_position[0] : 0.0,
- edl_length,
- edit_labels);
- else
- edl->labels->insert_labels(new_edl->labels,
- current_position,
- edl_length,
- edit_labels);
+ if( load_mode == LOADMODE_PASTE || load_mode == LOADMODE_NESTED )
+ edl->labels->insert_labels(new_edl->labels,
+ destination_tracks.total ? paste_position[0] : 0.0,
+ edl_length, edit_labels);
+ else
+ edl->labels->insert_labels(new_edl->labels, current_position,
+ edl_length, edit_labels);
+ }
//PRINT_TRACE
double total_length = new_edl->tracks->total_length();
for( Track *new_track=new_edl->tracks->first;