#include "gwindow.h"
#include "gwindowgui.h"
#include "keyframe.h"
+#include "keyframes.h"
#include "language.h"
#include "labels.h"
#include "levelwindow.h"
void MWindow::add_audio_track_entry(int above, Track *dst)
{
- undo->update_undo_before();
+ undo_before();
add_audio_track(above, dst);
save_backup();
- undo->update_undo_after(_("add track"), LOAD_ALL);
+ undo_after(_("add track"), LOAD_ALL);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
void MWindow::add_video_track_entry(Track *dst)
{
- undo->update_undo_before();
+ undo_before();
add_video_track(1, dst);
- undo->update_undo_after(_("add track"), LOAD_ALL);
+ undo_after(_("add track"), LOAD_ALL);
restart_brender();
void MWindow::add_subttl_track_entry(Track *dst)
{
- undo->update_undo_before();
+ undo_before();
add_subttl_track(1, dst);
- undo->update_undo_after(_("add track"), LOAD_ALL);
+ undo_after(_("add track"), LOAD_ALL);
restart_brender();
{
int w, h;
- undo->update_undo_before();
+ undo_before();
// Get w and h
w = indexable->get_w();
save_backup();
- undo->update_undo_after(_("asset to all"), LOAD_ALL);
+ undo_after(_("asset to all"), LOAD_ALL);
restart_brender();
gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 0);
sync_parameters(CHANGE_ALL);
if( indexable->have_video() ) {
int w, h;
- undo->update_undo_before();
+ undo_before();
// Get w and h
w = indexable->get_w();
save_backup();
- undo->update_undo_after(_("asset to size"), LOAD_ALL);
+ undo_after(_("asset to size"), LOAD_ALL);
restart_brender();
sync_parameters(CHANGE_ALL);
}
session->drag_assets->get(0)->have_video() ) {
double new_framerate = session->drag_assets->get(0)->get_frame_rate();
double old_framerate = edl->session->frame_rate;
- undo->update_undo_before();
+ undo_before();
edl->session->frame_rate = new_framerate;
edl->resample(old_framerate, new_framerate, TRACK_VIDEO);
save_backup();
- undo->update_undo_after(_("asset to rate"), LOAD_ALL);
+ undo_after(_("asset to rate"), LOAD_ALL);
restart_brender();
gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 0);
sync_parameters(CHANGE_ALL);
void MWindow::clear_entry()
{
- undo->update_undo_before();
+ undo_before();
clear(1);
edl->optimize();
save_backup();
- undo->update_undo_after(_("clear"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("clear"), LOAD_EDITS | LOAD_TIMEBAR);
restart_brender();
update_plugin_guis();
void MWindow::set_automation_mode(int mode)
{
- undo->update_undo_before();
+ undo_before();
speed_before();
edl->tracks->set_automation_mode(
edl->local_session->get_selectionstart(),
save_backup();
char string[BCSTRLEN];
sprintf(string,"set %s", FloatAuto::curve_name(mode));
- undo->update_undo_after(string,
+ undo_after(string,
!changed_edl ? LOAD_AUTOMATION :
LOAD_AUTOMATION + LOAD_EDITS + LOAD_TIMEBAR);
update_gui(changed_edl);
void MWindow::clear_automation()
{
- undo->update_undo_before();
+ undo_before();
speed_before();
edl->tracks->clear_automation(edl->local_session->get_selectionstart(),
edl->local_session->get_selectionend());
int changed_edl = speed_after(1);
save_backup();
- undo->update_undo_after(_("clear keyframes"),
+ undo_after(_("clear keyframes"),
!changed_edl ? LOAD_AUTOMATION :
LOAD_AUTOMATION + LOAD_EDITS + LOAD_TIMEBAR);
update_gui(changed_edl);
int MWindow::clear_default_keyframe()
{
- undo->update_undo_before();
+ undo_before();
speed_before();
edl->tracks->clear_default_keyframe();
int changed_edl = speed_after(1);
save_backup();
- undo->update_undo_after(_("clear default keyframe"),
+ undo_after(_("clear default keyframe"),
!changed_edl ? LOAD_AUTOMATION :
LOAD_AUTOMATION + LOAD_EDITS + LOAD_TIMEBAR);
update_gui(changed_edl);
void MWindow::clear_labels()
{
- undo->update_undo_before();
+ undo_before();
clear_labels(edl->local_session->get_selectionstart(),
edl->local_session->get_selectionend());
- undo->update_undo_after(_("clear labels"), LOAD_TIMEBAR);
+ undo_after(_("clear labels"), LOAD_TIMEBAR);
gui->update_timebar(1);
cwindow->update(0, 0, 0, 0, 1);
void MWindow::concatenate_tracks()
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->concatenate_tracks(edl->session->plugins_follow_edits,
edl->session->autos_follow_edits);
save_backup();
- undo->update_undo_after(_("concatenate tracks"), LOAD_EDITS);
+ undo_after(_("concatenate tracks"), LOAD_EDITS);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
}
+int MWindow::copy_flags(int copy_flags)
+{
+ if( !edl->session->labels_follow_edits )
+ copy_flags &= ~COPY_LABELS;
+ if( !edl->session->autos_follow_edits )
+ copy_flags &= ~COPY_AUTOS;
+ if( !edl->session->plugins_follow_edits )
+ copy_flags &= ~COPY_PLUGINS;
+ return copy_flags;
+}
+
void MWindow::copy()
{
copy(edl->local_session->get_selectionstart(),
if( start == end ) return 1;
FileXML file;
- edl->copy(start, end, 0, &file, "", 1);
+ edl->copy(copy_flags(), start, end, &file, "", 1);
const char *file_string = file.string();
long file_length = strlen(file_string);
gui->to_clipboard(file_string, file_length, BC_PRIMARY_SELECTION);
void MWindow::crop_video()
{
- undo->update_undo_before();
+ undo_before();
// Clamp EDL crop region
if( edl->session->crop_x1 > edl->session->crop_x2 ) {
edl->session->crop_x1 ^= edl->session->crop_x2;
edl->session->output_h);
}
- undo->update_undo_after(_("crop"), LOAD_ALL);
+ undo_after(_("crop"), LOAD_ALL);
restart_brender();
cwindow->refresh_frame(CHANGE_ALL);
void MWindow::blade(double position)
{
- undo->update_undo_before();
+ undo_before();
edl->blade(position);
edl->optimize();
save_backup();
- undo->update_undo_after(_("blade"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("blade"), LOAD_EDITS | LOAD_TIMEBAR);
restart_brender();
update_plugin_guis();
gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 0);
void MWindow::cut(double start, double end, double new_position)
{
- undo->update_undo_before();
+ undo_before();
copy(start, end);
edl->clear(start, end,
edl->session->labels_follow_edits,
edl->optimize();
save_backup();
- undo->update_undo_after(_("split | cut"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("split | cut"), LOAD_EDITS | LOAD_TIMEBAR);
if( new_position >= 0 ) {
edl->local_session->set_selectionstart(new_position);
edl->local_session->set_selectionend(new_position);
int MWindow::cut_automation()
{
- undo->update_undo_before();
+ undo_before();
speed_before();
copy_automation();
edl->tracks->clear_automation(edl->local_session->get_selectionstart(),
edl->local_session->get_selectionend());
int changed_edl = speed_after(1);
save_backup();
- undo->update_undo_after(_("cut keyframes"),
+ undo_after(_("cut keyframes"),
!changed_edl ? LOAD_AUTOMATION :
LOAD_AUTOMATION + LOAD_EDITS + LOAD_TIMEBAR);
update_gui(changed_edl);
int MWindow::cut_default_keyframe()
{
- undo->update_undo_before();
+ undo_before();
speed_before();
copy_default_keyframe();
edl->tracks->clear_default_keyframe();
int changed_edl = speed_after(1);
save_backup();
- undo->update_undo_after(_("cut default keyframe"),
+ undo_after(_("cut default keyframe"),
!changed_edl ? LOAD_AUTOMATION :
LOAD_AUTOMATION + LOAD_EDITS + LOAD_TIMEBAR);
update_gui(changed_edl);
}
-void MWindow::delete_track()
-{
- if( edl->tracks->last )
- delete_track(edl->tracks->last);
-}
-
void MWindow::delete_tracks()
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->delete_tracks();
- undo->update_undo_after(_("delete tracks"), LOAD_ALL);
+ undo_after(_("delete tracks"), LOAD_ALL);
save_backup();
restart_brender();
void MWindow::delete_track(Track *track)
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->delete_track(track);
- undo->update_undo_after(_("delete track"), LOAD_ALL);
+ undo_after(_("delete track"), LOAD_ALL);
restart_brender();
update_plugin_states();
Track *dest_track = session->track_highlighted;
if( !dest_track ) return;
- undo->update_undo_before();
+ undo_before();
for( int i=0; i<session->drag_pluginservers->total; ++i ) {
PluginServer *plugin = session->drag_pluginservers->values[i];
}
save_backup();
- undo->update_undo_after(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
+ undo_after(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
restart_brender();
sync_parameters(CHANGE_EDL);
// GUI updated in TrackCanvas, after current_operations are reset
{
if( !dest_track ) return;
- undo->update_undo_before();
+ undo_before();
double start = 0;
double length = dest_track->get_length();
}
save_backup();
- undo->update_undo_after(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
+ undo_after(_("insert effect"), LOAD_EDITS | LOAD_PATCHES);
restart_brender();
sync_parameters(CHANGE_EDL);
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
int MWindow::modify_edithandles()
{
- undo->update_undo_before();
+ undo_before();
+ int handle_mode = edl->session->edit_handle_mode[session->drag_button];
edl->modify_edithandles(session->drag_start,
- session->drag_position,
- session->drag_handle,
- edl->session->edit_handle_mode[session->drag_button],
+ session->drag_position, session->drag_handle, handle_mode,
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");
return 0;
int MWindow::modify_pluginhandles()
{
- undo->update_undo_before();
+ undo_before();
edl->modify_pluginhandles(session->drag_start,
session->drag_position,
void MWindow::finish_modify_handles()
{
int edit_mode = edl->session->edit_handle_mode[session->drag_button];
-
- if( (session->drag_handle == 1 && edit_mode != MOVE_NO_EDITS) ||
- (session->drag_handle == 0 && edit_mode == MOVE_ONE_EDIT) ) {
-//printf("MWindow::finish_modify_handles %d\n", __LINE__);
- edl->local_session->set_selectionstart(session->drag_position);
- edl->local_session->set_selectionend(session->drag_position);
- }
- else
- if( edit_mode != MOVE_NO_EDITS ) {
-//printf("MWindow::finish_modify_handles %d\n", __LINE__);
- edl->local_session->set_selectionstart(session->drag_start);
- edl->local_session->set_selectionend(session->drag_start);
- }
-
-// clamp the selection to 0
- if( edl->local_session->get_selectionstart(1) < 0 ) {
- edl->local_session->set_selectionstart(0);
- edl->local_session->set_selectionend(0);
- }
- undo->update_undo_after(_("drag handle"), LOAD_EDITS | LOAD_TIMEBAR);
+ double position = -1;
+ switch( edit_mode ) {
+ case MOVE_RIPPLE:
+ position = !session->drag_handle ?
+ session->drag_start : session->drag_position;
+ break;
+ case MOVE_ROLL:
+ case MOVE_SLIDE:
+ position = session->drag_position;
+ break;
+ case MOVE_SLIP:
+ case MOVE_EDGE:
+ position = session->drag_start;
+ break;
+ }
+ if( position >= 0 ) {
+ edl->local_session->set_selectionstart(position);
+ edl->local_session->set_selectionend(position);
+ }
+ undo_after(_("drag handle"), LOAD_EDITS | LOAD_TIMEBAR);
save_backup();
restart_brender();
void MWindow::match_output_size(Track *track)
{
- undo->update_undo_before();
+ undo_before();
track->track_w = edl->session->output_w;
track->track_h = edl->session->output_h;
save_backup();
- undo->update_undo_after(_("match output size"), LOAD_ALL);
+ undo_after(_("match output size"), LOAD_ALL);
restart_brender();
sync_parameters(CHANGE_EDL);
}
-void MWindow::selected_to_clipboard(int packed)
-{
- double start = DBL_MAX, end = DBL_MIN;
- Track *first_track=0, *last_track = 0;
- for( Track *track=edl->tracks->first; track; track=track->next ) {
- if( !track->record ) continue;
- int empty = 1;
- for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
- if( !edit->is_selected || edit->silence() ) continue;
- double edit_pos = track->from_units(edit->startproject);
- if( start > edit_pos ) start = edit_pos;
- if( end < (edit_pos+=edit->length) ) end = edit_pos;
- empty = 0;
- }
- if( empty ) continue;
- if( !first_track ) first_track = track;
- last_track = track;
- }
- if( !first_track ) return;
- EDL *new_edl = new EDL();
- new_edl->create_objects();
- new_edl->copy_session(edl);
- const char *text = _("new_edl edit");
- new_edl->set_path(text);
- strcpy(new_edl->local_session->clip_title, text);
- strcpy(new_edl->local_session->clip_notes, text);
- new_edl->session->video_tracks = 0;
- new_edl->session->audio_tracks = 0;
- for( Track *track=edl->tracks->first; track; track=track->next ) {
- if( !track->record ) continue;
- if( first_track ) {
- if( first_track != track ) continue;
- first_track = 0;
- }
- Track *new_track = 0;
- if( !packed )
- new_track = new_edl->add_new_track(track->data_type);
- int64_t start_pos = track->to_units(start, 0);
- int64_t end_pos = track->to_units(end, 0);
- int64_t startproject = 0;
- for( Edit *edit=track->edits->first; edit; edit=edit->next ) {
- if( edit->startproject < start_pos ) continue;
- if( edit->startproject >= end_pos ) break;
- if( !edit->is_selected || edit->silence() ) continue;
- if( !new_track )
- new_track = new_edl->add_new_track(track->data_type);
- if( new_track ) {
- if( !packed ) {
- int64_t edit_position = edit->startproject - start_pos;
- if( edit_position > startproject ) {
- Edit *silence = new Edit(new_edl, new_track);
- silence->startproject = startproject;
- silence->length = edit_position - startproject;
- new_track->edits->append(silence);
- startproject = edit_position;
- }
- }
- Edit *clip_edit = new Edit(new_edl, new_track);
- clip_edit->copy_from(edit);
- clip_edit->startproject = startproject;
- startproject += clip_edit->length;
- new_track->edits->append(clip_edit);
- }
- }
- if( last_track == track ) break;
- }
- double length = new_edl->tracks->total_length();
- FileXML file;
- new_edl->copy(0, length, 1, &file, "", 1);
- const char *file_string = file.string();
- long file_length = strlen(file_string);
- gui->to_clipboard(file_string, file_length, BC_PRIMARY_SELECTION);
- gui->to_clipboard(file_string, file_length, SECONDARY_SELECTION);
- new_edl->remove_user();
-}
-
void MWindow::delete_edit(Edit *edit, const char *msg, int collapse)
{
ArrayList<Edit*> edits;
void MWindow::delete_edits(ArrayList<Edit*> *edits, const char *msg, int collapse)
{
if( !edits->size() ) return;
- undo->update_undo_before();
- for( Track *track=edl->tracks->first; track; track=track->next ) {
- for( Edit *next=track->edits->first; next; ) {
- Edit *edit = next; next = edit->next;
- if( !edit->is_selected ) continue;
- int64_t len = edit->length;
- delete edit;
- if( !collapse ) continue;
- for( edit=next; edit; edit=edit->next )
- edit->startproject -= len;
- }
- }
+ undo_before();
+ if( edl->session->labels_follow_edits )
+ edl->delete_edit_labels(edits, collapse);
+ edl->delete_edits(edits, collapse);
edl->optimize();
save_backup();
- undo->update_undo_after(msg, LOAD_EDITS);
+ undo_after(msg, LOAD_EDITS);
restart_brender();
cwindow->refresh_frame(CHANGE_EDL);
// packed - omit unselected from selection, unpacked - replace unselected with silence
void MWindow::cut_selected_edits(int collapse, int packed)
{
- selected_to_clipboard(packed);
+ selected_edits_to_clipboard(packed);
ArrayList<Edit*> edits;
edl->tracks->get_selected_edits(&edits);
delete_edits(&edits, _("cut edit"), collapse);
void MWindow::move_edits(ArrayList<Edit*> *edits,
- Track *track,
- double position,
- int behaviour)
+ Track *track, double position, int mode)
{
- undo->update_undo_before();
-
- edl->tracks->move_edits(edits,
- track,
- position,
+ undo_before();
+// 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->plugins_follow_edits,
- edl->session->autos_follow_edits,
- behaviour);
+ 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);
+ undo_after(_("move edit"), LOAD_ALL);
restart_brender();
cwindow->refresh_frame(CHANGE_EDL);
gui->update(1, NORMAL_DRAW, 1, 0, 0, 0, 0);
}
+void MWindow::selected_edits_to_clipboard(int packed)
+{
+ EDL *new_edl = edl->selected_edits_to_clip(packed, 0, 0,
+ edl->session->labels_follow_edits,
+ edl->session->autos_follow_edits,
+ edl->session->plugins_follow_edits);
+ if( !new_edl ) return;
+ FileXML file;
+ new_edl->copy(COPY_EDL, &file, "", 1);
+ const char *file_string = file.string();
+ long file_length = strlen(file_string);
+ gui->to_clipboard(file_string, file_length, BC_PRIMARY_SELECTION);
+ gui->to_clipboard(file_string, file_length, SECONDARY_SELECTION);
+ new_edl->remove_user();
+}
+
+void MWindow::paste_clipboard(Track *first_track, double position, int overwrite,
+ int edit_edits, int edit_labels, int edit_autos, int edit_plugins)
+{
+ int64_t len = gui->clipboard_len(BC_PRIMARY_SELECTION);
+ if( !len ) return;
+ char *string = new char[len];
+ gui->from_clipboard(string, len, BC_PRIMARY_SELECTION);
+ FileXML file;
+ file.read_from_string(string);
+ delete [] string;
+ EDL *clip = new EDL();
+ clip->create_objects();
+ if( !clip->load_xml(&file, LOAD_ALL) ) {
+ undo_before();
+ edl->paste_edits(clip, first_track, position, overwrite,
+ edit_edits, edit_labels, edit_autos, edit_plugins);
+ save_backup();
+ undo_after(_("paste clip"), LOAD_ALL);
+ restart_brender();
+ cwindow->refresh_frame(CHANGE_EDL);
+
+ update_plugin_guis();
+ gui->update(1, NORMAL_DRAW, 1, 0, 0, 0, 0);
+ }
+ clip->remove_user();
+}
+
+void MWindow::move_group(EDL *group, Track *first_track, double position, int overwrite)
+{
+ 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);
+ edl->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();
+
+ save_backup();
+ undo_after(_("move group"), LOAD_ALL);
+ restart_brender();
+ cwindow->refresh_frame(CHANGE_EDL);
+
+ update_plugin_guis();
+ gui->update(1, NORMAL_DRAW, 1, 0, 0, 0, 0);
+}
+
void MWindow::move_effect(Plugin *plugin, Track *track, int64_t position)
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->move_effect(plugin, track, position);
save_backup();
- undo->update_undo_after(_("paste effect"), LOAD_ALL);
+ undo_after(_("paste effect"), LOAD_ALL);
restart_brender();
cwindow->refresh_frame(CHANGE_EDL);
void MWindow::move_effect(Plugin *plugin, PluginSet *plugin_set, int64_t position)
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->move_effect(plugin, plugin_set, position);
save_backup();
- undo->update_undo_after(_("move effect"), LOAD_ALL);
+ undo_after(_("move effect"), LOAD_ALL);
restart_brender();
cwindow->refresh_frame(CHANGE_EDL);
void MWindow::move_plugins_up(PluginSet *plugin_set)
{
- undo->update_undo_before();
+ undo_before();
plugin_set->track->move_plugins_up(plugin_set);
save_backup();
- undo->update_undo_after(_("move effect up"), LOAD_ALL);
+ undo_after(_("move effect up"), LOAD_ALL);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 0, 0, 0);
sync_parameters(CHANGE_EDL);
void MWindow::move_plugins_down(PluginSet *plugin_set)
{
- undo->update_undo_before();
+ undo_before();
plugin_set->track->move_plugins_down(plugin_set);
save_backup();
- undo->update_undo_after(_("move effect down"), LOAD_ALL);
+ undo_after(_("move effect down"), LOAD_ALL);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 0, 0, 0);
sync_parameters(CHANGE_EDL);
void MWindow::move_track_down(Track *track)
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->move_track_down(track);
save_backup();
- undo->update_undo_after(_("move track down"), LOAD_ALL);
+ undo_after(_("move track down"), LOAD_ALL);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
void MWindow::move_tracks_down()
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->move_tracks_down();
save_backup();
- undo->update_undo_after(_("move tracks down"), LOAD_ALL);
+ undo_after(_("move tracks down"), LOAD_ALL);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
void MWindow::move_track_up(Track *track)
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->move_track_up(track);
save_backup();
- undo->update_undo_after(_("move track up"), LOAD_ALL);
+ undo_after(_("move track up"), LOAD_ALL);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
sync_parameters(CHANGE_EDL);
void MWindow::move_tracks_up()
{
- undo->update_undo_before();
+ undo_before();
edl->tracks->move_tracks_up();
save_backup();
- undo->update_undo_after(_("move tracks up"), LOAD_ALL);
+ undo_after(_("move tracks up"), LOAD_ALL);
restart_brender();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
sync_parameters(CHANGE_EDL);
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
if( start != end ) {
- undo->update_undo_before();
+ undo_before();
edl->clear(start, end, 0,
edl->session->plugins_follow_edits,
edl->session->autos_follow_edits);
edl->session->autos_follow_edits);
save_backup();
- undo->update_undo_after(_("mute"), LOAD_EDITS);
+ undo_after(_("mute"), LOAD_EDITS);
restart_brender();
update_plugin_guis();
double dst_start = edl->local_session->get_selectionstart();
double dst_len = edl->local_session->get_selectionend() - dst_start;
- undo->update_undo_before();
+ undo_before();
if( !EQUIV(dst_len, 0) && (dst_len < overwrite_len) ) {
// in/out points or selection present and shorter than overwrite range
// shorten the copy range
overwrite_len = dst_len;
}
- source->copy(src_start, src_start + overwrite_len, 0, &file, "", 1);
+ source->copy(copy_flags(), src_start, src_start + overwrite_len, &file, "", 1);
// HACK around paste_edl get_start/endselection on its own
// so we need to clear only when not using both io points
edl->local_session->set_selectionend(dst_start + overwrite_len);
save_backup();
- undo->update_undo_after(_("overwrite"), LOAD_EDITS);
+ undo_after(_("overwrite"), LOAD_EDITS);
restart_brender();
update_plugin_guis();
if( len ) {
char *string = new char[len];
- undo->update_undo_before();
+ undo_before();
gui->from_clipboard(string, len, BC_PRIMARY_SELECTION);
FileXML file;
file.read_from_string(string);
save_backup();
- undo->update_undo_after(_("paste"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("paste"), LOAD_EDITS | LOAD_TIMEBAR);
restart_brender();
update_plugin_guis();
gui->update(1, FORCE_REDRAW, 1, 1, 0, 1, 0);
int MWindow::paste_assets(double position, Track *dest_track, int overwrite)
{
int result = 0;
- undo->update_undo_before();
+ undo_before();
if( session->drag_assets->total ) {
load_assets(session->drag_assets,
save_backup();
- undo->update_undo_after(_("paste assets"), LOAD_EDITS);
+ undo_after(_("paste assets"), LOAD_EDITS);
restart_brender();
gui->update(1, FORCE_REDRAW, 1, 0, 0, 1, 0);
sync_parameters(CHANGE_EDL);
load_mode = LOADMODE_ASSETSONLY;
const int debug = 0;
if( debug ) printf("MWindow::load_assets %d\n", __LINE__);
- if( position < 0 ) position = edl->local_session->get_selectionstart();
+ if( position < 0 )
+ position = edl->local_session->get_selectionstart();
ArrayList<EDL*> new_edls;
for( int i=0; i<new_assets->total; ++i ) {
int64_t len = gui->clipboard_len(BC_PRIMARY_SELECTION);
if( len ) {
- undo->update_undo_before();
+ undo_before();
speed_before();
char *string = new char[len];
gui->from_clipboard(string, len, BC_PRIMARY_SELECTION);
edl->session->typeless_keyframes);
int changed_edl = speed_after(1);
save_backup();
- undo->update_undo_after(_("paste keyframes"),
+ undo_after(_("paste keyframes"),
!changed_edl ? LOAD_AUTOMATION :
LOAD_AUTOMATION + LOAD_EDITS + LOAD_TIMEBAR);
update_gui(changed_edl);
int64_t len = gui->clipboard_len(BC_PRIMARY_SELECTION);
if( len ) {
- undo->update_undo_before();
+ undo_before();
speed_before();
char *string = new char[len];
gui->from_clipboard(string, len, BC_PRIMARY_SELECTION);
edl->session->typeless_keyframes);
// edl->tracks->paste_default_keyframe(&file);
int changed_edl = speed_after(1);
- undo->update_undo_after(_("paste default keyframe"),
+ undo_after(_("paste default keyframe"),
!changed_edl ? LOAD_AUTOMATION :
LOAD_AUTOMATION + LOAD_EDITS + LOAD_TIMEBAR);
save_backup();
default:
continue;
}
+// re-label only if not already labeled
+ if( new_edl->local_session->asset2edl )
+ strcpy(current->title, edl->tracks->last->title);
destination_tracks.append(edl->tracks->last);
}
if( load_mode == LOADMODE_CONCATENATE ||
load_mode == LOADMODE_PASTE ||
load_mode == LOADMODE_NESTED ) {
-//PRINT_TRACE
-
-// The point of this is to shift forward labels after the selection so they can
-// then be shifted back to their original locations without recursively
-// shifting back every paste.
- if( (load_mode == LOADMODE_PASTE || load_mode == LOADMODE_NESTED) &&
- edl->session->labels_follow_edits )
- edl->labels->clear(edl->local_session->get_selectionstart(),
- edl->local_session->get_selectionend(), 1);
-
Track *current = first_track ? first_track : edl->tracks->first;
for( ; current; current=NEXT ) {
if( current->record ) {
}
}
//PRINT_TRACE
-
}
//PRINT_TRACE
int destination_track = 0;
// Get starting point of insertion. Need this to paste labels.
switch( load_mode ) {
case LOADMODE_REPLACE:
- case LOADMODE_NEW_TRACKS:
current_position = 0;
break;
+ case LOADMODE_NEW_TRACKS:
+ if( !overwrite )
+ current_position = 0;
+ break;
case LOADMODE_CONCATENATE:
case LOADMODE_REPLACE_CONCATENATE:
edl->add_clip(new_edl);
break;
}
-//PRINT_TRACE
// Insert edl
if( load_mode != LOADMODE_RESOURCESONLY &&
load_mode != LOADMODE_ASSETSONLY ) {
// Insert labels
-//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);
-//PRINT_TRACE
+ if( 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, 1);
+ else
+ edl->labels->insert_labels(new_edl->labels, current_position,
+ edl_length, 1);
+ }
double total_length = new_edl->tracks->total_length();
for( Track *new_track=new_edl->tracks->first;
new_track; new_track=new_track->next ) {
current_position + length,
1, // edit edits
edit_labels, edit_plugins, edit_autos,
- 1, // convert units
0); // trim edits
}
//PRINT_TRACE
if( edl->session->frame_rate > 0 )
end += 1./edl->session->frame_rate;
}
- undo->update_undo_before(_("silence"), this);
+ undo_before(_("silence"), this);
edl->paste_silence(start, end,
edl->session->labels_follow_edits,
edl->session->plugins_follow_edits,
edl->session->autos_follow_edits);
edl->optimize();
save_backup();
- undo->update_undo_after(_("silence"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("silence"), LOAD_EDITS | LOAD_TIMEBAR);
update_plugin_guis();
restart_brender();
void MWindow::detach_transition(Transition *transition)
{
- undo->update_undo_before();
+ undo_before();
hide_plugin(transition, 1);
int is_video = (transition->edit->track->data_type == TRACK_VIDEO);
transition->edit->detach_transition();
save_backup();
- undo->update_undo_after(_("detach transition"), LOAD_ALL);
+ undo_after(_("detach transition"), LOAD_ALL);
if( is_video ) restart_brender();
gui->update(0, NORMAL_DRAW, 0, 0, 0, 0, 0);
{
gui->lock_window("MWindow::detach_transitions 1");
- undo->update_undo_before();
+ undo_before();
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
edl->tracks->clear_transitions(start, end);
save_backup();
- undo->update_undo_after(_("detach transitions"), LOAD_EDITS);
+ undo_after(_("detach transitions"), LOAD_EDITS);
sync_parameters(CHANGE_EDL);
gui->update(0, NORMAL_DRAW, 0, 0, 0, 0, 0);
// Only the first transition gets dropped.
PluginServer *server = session->drag_pluginservers->values[0];
- undo->update_undo_before();
+ undo_before();
edl->tracks->paste_transition(server, session->edit_highlighted);
save_backup();
- undo->update_undo_after(_("transition"), LOAD_EDITS);
+ undo_after(_("transition"), LOAD_EDITS);
if( server->video ) restart_brender();
sync_parameters(CHANGE_ALL);
{
gui->lock_window("MWindow::detach_transitions 1");
- undo->update_undo_before();
+ undo_before();
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
edl->tracks->paste_transitions(start, end, track_type, title);
save_backup();
- undo->update_undo_after(_("attach transitions"), LOAD_EDITS);
+ undo_after(_("attach transitions"), LOAD_EDITS);
sync_parameters(CHANGE_EDL);
gui->update(0, NORMAL_DRAW, 0, 0, 0, 0, 0);
void MWindow::paste_transition_cwindow(Track *dest_track)
{
PluginServer *server = session->drag_pluginservers->values[0];
- undo->update_undo_before();
+ undo_before();
edl->tracks->paste_video_transition(server, 1);
save_backup();
- undo->update_undo_after(_("transition"), LOAD_EDITS);
+ undo_after(_("transition"), LOAD_EDITS);
restart_brender();
gui->update(0, NORMAL_DRAW, 0, 0, 0, 0, 0);
sync_parameters(CHANGE_ALL);
return;
}
- undo->update_undo_before();
+ undo_before();
edl->tracks->paste_audio_transition(server);
save_backup();
- undo->update_undo_after(_("transition"), LOAD_EDITS);
+ undo_after(_("transition"), LOAD_EDITS);
sync_parameters(CHANGE_EDL);
gui->update(0, NORMAL_DRAW, 0, 0, 0, 0, 0);
return;
}
- undo->update_undo_before();
+ undo_before();
edl->tracks->paste_video_transition(server);
save_backup();
- undo->update_undo_after(_("transition"), LOAD_EDITS);
+ undo_after(_("transition"), LOAD_EDITS);
sync_parameters(CHANGE_EDL);
restart_brender();
{
gui->lock_window("MWindow::shuffle_edits 1");
- undo->update_undo_before();
+ undo_before();
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
edl->tracks->shuffle_edits(start, end);
save_backup();
- undo->update_undo_after(_("shuffle edits"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("shuffle edits"), LOAD_EDITS | LOAD_TIMEBAR);
sync_parameters(CHANGE_EDL);
restart_brender();
{
gui->lock_window("MWindow::reverse_edits 1");
- undo->update_undo_before();
+ undo_before();
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
edl->tracks->reverse_edits(start, end);
save_backup();
- undo->update_undo_after(_("reverse edits"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("reverse edits"), LOAD_EDITS | LOAD_TIMEBAR);
sync_parameters(CHANGE_EDL);
restart_brender();
{
gui->lock_window("MWindow::align_edits 1");
- undo->update_undo_before();
+ undo_before();
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
edl->tracks->align_edits(start, end);
save_backup();
- undo->update_undo_after(_("align edits"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("align edits"), LOAD_EDITS | LOAD_TIMEBAR);
sync_parameters(CHANGE_EDL);
restart_brender();
{
gui->lock_window("MWindow::set_edit_length 1");
- undo->update_undo_before();
+ undo_before();
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
edl->tracks->set_edit_length(start, end, length);
save_backup();
- undo->update_undo_after(_("edit length"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("edit length"), LOAD_EDITS | LOAD_TIMEBAR);
sync_parameters(CHANGE_EDL);
restart_brender();
{
gui->lock_window("MWindow::set_transition_length 1");
- undo->update_undo_before();
+ undo_before();
//double start = edl->local_session->get_selectionstart();
//double end = edl->local_session->get_selectionend();
edl->tracks->set_transition_length(transition, length);
save_backup();
- undo->update_undo_after(_("transition length"), LOAD_EDITS);
+ undo_after(_("transition length"), LOAD_EDITS);
edl->session->default_transition_length = length;
sync_parameters(CHANGE_PARAMS);
{
gui->lock_window("MWindow::set_transition_length 2");
- undo->update_undo_before();
+ undo_before();
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
edl->tracks->set_transition_length(start, end, length);
save_backup();
- undo->update_undo_after(_("transition length"), LOAD_EDITS);
+ undo_after(_("transition length"), LOAD_EDITS);
edl->session->default_transition_length = length;
sync_parameters(CHANGE_PARAMS);
gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 1);
gui->update_proxy_toggle();
gui->unlock_window();
- cwindow->update(1, 1, 1, 1, 1);
cwindow->gui->unlock_window();
+ cwindow->update(1, 1, 1, 1, 1);
for( int i=0; i < vwindows.size(); ++i ) {
if( vwindows.get(i)->is_running() ) {
void MWindow::resize_track(Track *track, int w, int h)
{
- undo->update_undo_before();
+ undo_before();
// We have to move all maskpoints so they do not move in relation to image areas
((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->translate_masks(
(w - track->track_w) / 2,
(h - track->track_h) / 2);
track->track_w = w;
track->track_h = h;
- undo->update_undo_after(_("resize track"), LOAD_ALL);
+ undo_after(_("resize track"), LOAD_ALL);
save_backup();
restart_brender();
}
-void MWindow::set_inpoint(int is_mwindow)
+void MWindow::set_inpoint()
{
- undo->update_undo_before();
+ undo_before();
edl->set_inpoint(edl->local_session->get_selectionstart(1));
save_backup();
- undo->update_undo_after(_("in point"), LOAD_TIMEBAR);
-
- if( !is_mwindow ) {
- gui->lock_window("MWindow::set_inpoint 1");
- }
+ undo_after(_("in point"), LOAD_TIMEBAR);
gui->update_timebar(1);
- if( !is_mwindow ) {
- gui->unlock_window();
- }
- if( is_mwindow ) {
- cwindow->gui->lock_window("MWindow::set_inpoint 2");
- }
+ cwindow->gui->lock_window("MWindow::set_inpoint 2");
cwindow->gui->timebar->update(1);
- if( is_mwindow ) {
- cwindow->gui->unlock_window();
- }
+ cwindow->gui->unlock_window();
}
-void MWindow::set_outpoint(int is_mwindow)
+void MWindow::set_outpoint()
{
- undo->update_undo_before();
+ undo_before();
edl->set_outpoint(edl->local_session->get_selectionend(1));
save_backup();
- undo->update_undo_after(_("out point"), LOAD_TIMEBAR);
+ undo_after(_("out point"), LOAD_TIMEBAR);
- if( !is_mwindow ) {
- gui->lock_window("MWindow::set_outpoint 1");
- }
gui->update_timebar(1);
- if( !is_mwindow ) {
- gui->unlock_window();
- }
-
- if( is_mwindow ) {
- cwindow->gui->lock_window("MWindow::set_outpoint 2");
- }
+ cwindow->gui->lock_window("MWindow::set_outpoint 2");
cwindow->gui->timebar->update(1);
- if( is_mwindow ) {
- cwindow->gui->unlock_window();
- }
+ cwindow->gui->unlock_window();
}
-void MWindow::unset_inoutpoint(int is_mwindow)
+void MWindow::unset_inoutpoint()
{
- undo->update_undo_before();
+ undo_before();
edl->unset_inoutpoint();
save_backup();
- undo->update_undo_after(_("clear in/out"), LOAD_TIMEBAR);
+ undo_after(_("clear in/out"), LOAD_TIMEBAR);
- if( !is_mwindow ) {
- gui->lock_window("MWindow::unset_inoutpoint 1");
- }
gui->update_timebar(1);
- if( !is_mwindow ) {
- gui->unlock_window();
- }
-
- if( is_mwindow ) {
- cwindow->gui->lock_window("MWindow::unset_inoutpoint 2");
- }
+ cwindow->gui->lock_window("MWindow::unset_inoutpoint 2");
cwindow->gui->timebar->update(1);
- if( is_mwindow ) {
- cwindow->gui->unlock_window();
- }
+ cwindow->gui->unlock_window();
}
void MWindow::splice(EDL *source, int all)
FileXML file;
LocalSession *src = source->local_session;
- undo->update_undo_before();
+ undo_before();
double source_start = all ? 0 :
src->inpoint_valid() ? src->get_inpoint() :
src->outpoint_valid() ? 0 : src->get_selectionstart();
src->outpoint_valid() ? src->get_outpoint() :
src->inpoint_valid() ? source->tracks->total_length() :
src->get_selectionend();
- source->copy(source_start, source_end, 1, &file, "", 1);
+ source->copy(COPY_EDL, source_start, source_end, &file, "", 1);
//file.dump();
double start = edl->local_session->get_selectionstart();
//double end = edl->local_session->get_selectionend();
edl->local_session->set_selectionend(start + source_end - source_start);
save_backup();
- undo->update_undo_after(_("splice"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("splice"), LOAD_EDITS | LOAD_TIMEBAR);
update_plugin_guis();
restart_brender();
gui->update(1, NORMAL_DRAW, 1, 1, 0, 1, 0);
}
// Don't copy all since we don't want the clips twice.
- edl->copy(start, end, 0, &file, "", 1);
+ edl->copy(copy_flags(), start, end, &file, "", 1);
EDL *new_edl = new EDL(edl);
new_edl->create_objects();
gui->unlock_window();
}
-int MWindow::toggle_label(int is_mwindow)
+int MWindow::toggle_label()
{
double position1, position2;
- undo->update_undo_before();
-
- if( cwindow->playback_engine->is_playing_back ) {
- position1 = position2 =
- cwindow->playback_engine->get_tracking_position();
- }
- else {
- position1 = edl->local_session->get_selectionstart(1);
- position2 = edl->local_session->get_selectionend(1);
- }
+ undo_before();
+ position1 = edl->local_session->get_selectionstart(1);
+ position2 = edl->local_session->get_selectionend(1);
position1 = edl->align_to_frame(position1, 0);
position2 = edl->align_to_frame(position2, 0);
-//printf("MWindow::toggle_label 1\n");
-
edl->labels->toggle_label(position1, position2);
save_backup();
- if( !is_mwindow ) {
- gui->lock_window("MWindow::toggle_label 1");
- }
gui->update_timebar(0);
gui->activate_timeline();
gui->flush();
- if( !is_mwindow ) {
- gui->unlock_window();
- }
- if( is_mwindow ) {
- cwindow->gui->lock_window("MWindow::toggle_label 2");
- }
+ cwindow->gui->lock_window("MWindow::toggle_label 2");
cwindow->gui->timebar->update(1);
- if( is_mwindow ) {
- cwindow->gui->unlock_window();
- }
-
+ cwindow->gui->unlock_window();
awindow->gui->async_update_assets();
- undo->update_undo_after(_("label"), LOAD_TIMEBAR);
+ undo_after(_("label"), LOAD_TIMEBAR);
return 0;
}
void MWindow::trim_selection()
{
- undo->update_undo_before();
+ undo_before();
edl->trim_selection(edl->local_session->get_selectionstart(),
edl->session->autos_follow_edits);
save_backup();
- undo->update_undo_after(_("trim selection"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("trim selection"), LOAD_EDITS | LOAD_TIMEBAR);
update_plugin_guis();
gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 0);
cwindow->update(1, 0, 0, 0, 1);
gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 1);
gui->update_proxy_toggle();
gui->unlock_window();
- cwindow->update(1, 1, 1, 1, 1);
cwindow->gui->unlock_window();
+ cwindow->update(1, 1, 1, 1, 1);
for( int i=0; i<vwindows.size(); ++i ) {
if( vwindows.get(i)->is_running() ) {
void MWindow::new_folder(const char *new_folder, int is_clips)
{
- undo->update_undo_before();
+ undo_before();
if( edl->new_folder(new_folder, is_clips) ) {
MainError::show_error(_("create new folder failed"));
}
- undo->update_undo_after(_("new folder"), LOAD_ALL);
+ undo_after(_("new folder"), LOAD_ALL);
awindow->gui->async_update_assets();
}
void MWindow::delete_folder(char *folder)
{
- undo->update_undo_before();
+ undo_before();
if( edl->delete_folder(folder) < 0 ) {
MainError::show_error(_("delete folder failed"));
}
- undo->update_undo_after(_("del folder"), LOAD_ALL);
+ undo_after(_("del folder"), LOAD_ALL);
awindow->gui->async_update_assets();
}
void MWindow::map_audio(int pattern)
{
- undo->update_undo_before();
+ undo_before();
remap_audio(pattern);
- undo->update_undo_after(
+ undo_after(
pattern == MWindow::AUDIO_1_TO_1 ? _("map 1:1") : _("map 5.1:2"),
LOAD_AUTOMATION);
sync_parameters(CHANGE_PARAMS);
void MWindow::cut_commercials()
{
#ifdef HAVE_COMMERCIAL
- undo->update_undo_before();
+ undo_before();
commercials->scan_media();
edl->optimize();
save_backup();
- undo->update_undo_after(_("cut ads"), LOAD_EDITS | LOAD_TIMEBAR);
+ undo_after(_("cut ads"), LOAD_EDITS | LOAD_TIMEBAR);
restart_brender();
update_plugin_guis();