#include "clip.h"
#include "clipedit.h"
#include "commercials.h"
+#include "convert.h"
#include "cplayback.h"
#include "ctimebar.h"
#include "cwindow.h"
#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);
gui->activate_timeline();
-
-// gui->get_scrollbars(0);
-// gui->canvas->draw();
-// gui->patchbay->update();
-// gui->cursor->draw(1);
-// gui->canvas->flash();
-// gui->canvas->activate();
cwindow->refresh_frame(CHANGE_EDL);
}
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();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
gui->activate_timeline();
-// gui->get_scrollbars(0);
-// gui->canvas->draw();
-// gui->patchbay->update();
-// gui->cursor->draw(1);
-// gui->canvas->flash();
-// gui->canvas->activate();
cwindow->refresh_frame(CHANGE_EDL);
save_backup();
}
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();
gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
gui->activate_timeline();
-// gui->get_scrollbars(0);
-// gui->canvas->draw();
-// gui->patchbay->update();
-// gui->cursor->draw(1);
-// gui->canvas->flash();
-// gui->canvas->activate();
cwindow->refresh_frame(CHANGE_EDL);
save_backup();
}
{
int w, h;
- undo->update_undo_before();
+ undo_before();
// Get w and h
w = indexable->get_w();
}
}
-
+#ifdef GLx4
if( ((edl->session->output_w % 4) ||
(edl->session->output_h % 4)) &&
edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL ) {
_("This project's dimensions are not multiples of 4 so\n"
"it can't be rendered by OpenGL."));
}
-
+#endif
// Get aspect ratio
if( defaults->get("AUTOASPECT", 0) ) {
create_aspect_ratio(
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();
h = indexable->get_h();
edl->session->output_w = w;
edl->session->output_h = h;
-
+#ifdef GLx4
if( ((edl->session->output_w % 4) ||
(edl->session->output_h % 4)) &&
edl->session->playback_config->vconfig->driver == PLAYBACK_X11_GL ) {
_("This project's dimensions are not multiples of 4 so\n"
"it can't be rendered by OpenGL."));
}
-
+#endif
// Get aspect ratio
if( defaults->get("AUTOASPECT", 0) ) {
create_aspect_ratio(edl->session->aspect_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);
int MWindow::clear_labels(double start, double end)
{
+ if( start == end ) {
+ start = 0;
+ end = edl->tracks->total_length();
+ }
edl->labels->clear(start, end, 0);
return 0;
}
+void MWindow::clear_hard_edges()
+{
+ undo_before();
+ clear_hard_edges(edl->local_session->get_selectionstart(),
+ edl->local_session->get_selectionend());
+ edl->optimize();
+ save_backup();
+ undo_after(_("clear hard edges"), LOAD_EDITS);
+ restart_brender();
+ gui->update(1, NORMAL_DRAW, 0, 0, 1, 0, 0);
+ cwindow->refresh_frame(CHANGE_EDL);
+}
+
+int MWindow::clear_hard_edges(double start, double end)
+{
+ if( start == end ) {
+ start = 0;
+ end = edl->tracks->total_length();
+ }
+ edl->clear_hard_edges(start, end);
+ return 0;
+}
+
+void MWindow::clear_select()
+{
+ edl->tracks->clear_selected_edits();
+ gui->draw_overlays(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);
return 0;
}
-
// Uses cropping coordinates in edl session to crop and translate video.
// We modify the projector since camera automation depends on the track size.
-void MWindow::crop_video()
+void MWindow::crop_video(int mode)
{
-
- 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->crop_y2 ^= edl->session->crop_y1;
edl->session->crop_y1 ^= edl->session->crop_y2;
}
-
- float old_projector_x = (float)edl->session->output_w / 2;
- float old_projector_y = (float)edl->session->output_h / 2;
- float new_projector_x = (float)(edl->session->crop_x1 + edl->session->crop_x2) / 2;
- float new_projector_y = (float)(edl->session->crop_y1 + edl->session->crop_y2) / 2;
- float projector_offset_x = -(new_projector_x - old_projector_x);
- float projector_offset_y = -(new_projector_y - old_projector_y);
-
- edl->tracks->translate_projector(projector_offset_x, projector_offset_y);
-
- edl->session->output_w = edl->session->crop_x2 - edl->session->crop_x1;
- edl->session->output_h = edl->session->crop_y2 - edl->session->crop_y1;
- edl->session->crop_x1 = 0;
- edl->session->crop_y1 = 0;
- edl->session->crop_x2 = edl->session->output_w;
- edl->session->crop_y2 = edl->session->output_h;
+ switch( mode ) {
+ case CROP_REFORMAT: {
+ float ctr_x = edl->session->output_w / 2.;
+ float ctr_y = edl->session->output_h / 2.;
+ float new_x = (edl->session->crop_x1 + edl->session->crop_x2) / 2.;
+ float new_y = (edl->session->crop_y1 + edl->session->crop_y2) / 2.;
+ float dx = -(new_x - ctr_x), dy = -(new_y - ctr_y);
+ edl->tracks->translate_projector(dx, dy, 1);
+
+ edl->session->output_w = edl->session->crop_x2 - edl->session->crop_x1;
+ edl->session->output_h = edl->session->crop_y2 - edl->session->crop_y1;
+ edl->session->crop_x1 = edl->session->crop_y1 = 0;
+ edl->session->crop_x2 = edl->session->output_w;
+ edl->session->crop_y2 = edl->session->output_h;
+ break; }
+ case CROP_RESIZE: {
+ float old_w = edl->session->output_w;
+ float old_h = edl->session->output_h;
+ float new_w = edl->session->crop_x2 - edl->session->crop_x1;
+ float new_h = edl->session->crop_y2 - edl->session->crop_y1;
+ if( !new_w ) new_w = 1;
+ if( !new_h ) new_h = 1;
+ float xzoom = old_w / new_w, yzoom = old_h / new_h;
+ float new_z = bmin(xzoom, yzoom);
+ float new_x = (edl->session->crop_x1 + edl->session->crop_x2) / 2.;
+ float new_y = (edl->session->crop_y1 + edl->session->crop_y2) / 2.;
+ edl->tracks->crop_resize(new_x, new_y, new_z);
+
+ edl->session->crop_x1 = 0;
+ edl->session->crop_y1 = 0;
+ edl->session->crop_x2 = edl->session->output_w;
+ edl->session->crop_y2 = edl->session->output_h;
+ break; }
+ case CROP_SHRINK: {
+ float old_w = edl->session->output_w;
+ float old_h = edl->session->output_h;
+ float new_w = edl->session->crop_x2 - edl->session->crop_x1;
+ float new_h = edl->session->crop_y2 - edl->session->crop_y1;
+ if( !new_w ) new_w = 1;
+ if( !new_h ) new_h = 1;
+ float xzoom = old_w / new_w, yzoom = old_h / new_h;
+ float new_z = bmin(xzoom, yzoom);
+
+ float new_x = (edl->session->crop_x1 + edl->session->crop_x2) / 2.;
+ float new_y = (edl->session->crop_y1 + edl->session->crop_y2) / 2.;
+ edl->tracks->crop_shrink(new_x, new_y, new_z);
+ break; }
+ }
// Recalculate aspect ratio
if( defaults->get("AUTOASPECT", 0) ) {
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();
// Insert data from clipboard
void MWindow::insert(double position, FileXML *file,
int edit_labels, int edit_plugins, int edit_autos,
- EDL *parent_edl)
+ EDL *parent_edl, Track *first_track, int overwrite)
{
// For clipboard pasting make the new edl use a separate session
// from the master EDL. Then it can be resampled to the master rates.
- paste_edls(&new_edls, LOADMODE_PASTE, 0, position,
- edit_labels, edit_plugins, edit_autos, 0); // overwrite
+ paste_edls(&new_edls, LOADMODE_PASTE, first_track, position,
+ edit_labels, edit_plugins, edit_autos, overwrite);
// if( vwindow->edl )
// printf("MWindow::insert 5 %f %f\n",
// vwindow->edl->local_session->in_point,
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::move_edits(ArrayList<Edit*> *edits,
- Track *track,
- double position,
- int behaviour)
+void MWindow::delete_edit(Edit *edit, const char *msg, int collapse)
+{
+ ArrayList<Edit*> edits;
+ edits.append(edit);
+ delete_edits(&edits, msg, collapse);
+}
+
+void MWindow::delete_edits(ArrayList<Edit*> *edits, const char *msg, int collapse)
+{
+ if( !edits->size() ) return;
+ undo_before();
+ if( edl->session->labels_follow_edits )
+ edl->delete_edit_labels(edits, collapse);
+ edl->delete_edits(edits, collapse);
+ edl->optimize();
+ save_backup();
+ undo_after(msg, LOAD_EDITS);
+
+ restart_brender();
+ cwindow->refresh_frame(CHANGE_EDL);
+ update_plugin_guis();
+ gui->update(1, NORMAL_DRAW, 1, 0, 0, 0, 0);
+}
+
+void MWindow::delete_edits(int collapse)
+{
+ ArrayList<Edit*> edits;
+ edl->tracks->get_selected_edits(&edits);
+ delete_edits(&edits,_("del edit"), collapse);
+}
+
+// collapse - delete from timeline, not collapse replace with silence
+// packed - omit unselected from selection, unpacked - replace unselected with silence
+void MWindow::cut_selected_edits(int collapse, int packed)
{
- undo->update_undo_before();
+ selected_edits_to_clipboard(packed);
+ ArrayList<Edit*> edits;
+ edl->tracks->get_selected_edits(&edits);
+ delete_edits(&edits, _("cut edit"), collapse);
+}
- edl->tracks->move_edits(edits,
- track,
- position,
+
+void MWindow::move_edits(ArrayList<Edit*> *edits,
+ Track *track, double position, int mode)
+{
+ 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->get_outpoint() < 0 )
edl->clear(dst_start, dst_start + overwrite_len, 0, 0, 0);
- paste(dst_start, dst_start + overwrite_len,
- &file, 0, 0, 0);
+ paste(dst_start, dst_start + overwrite_len, &file, 0, 0, 0, 0, 0);
edl->local_session->set_selectionstart(dst_start + overwrite_len);
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();
}
// For splice and overwrite
-int MWindow::paste(double start,
- double end,
- FileXML *file,
- int edit_labels,
- int edit_plugins,
- int edit_autos)
+int MWindow::paste(double start, double end, FileXML *file,
+ int edit_labels, int edit_plugins, int edit_autos,
+ Track *first_track, int overwrite)
{
clear(0);
// Want to insert with assets shared with the master EDL.
insert(start, file,
edit_labels, edit_plugins, edit_autos,
- edl);
+ edl, first_track, overwrite);
return 0;
}
// For editing using insertion point
void MWindow::paste()
{
- double start = edl->local_session->get_selectionstart();
+ paste(edl->local_session->get_selectionstart(), 0, 1, 0);
+}
+
+void MWindow::paste(double start, Track *first_track, int clear_selection, int overwrite)
+{
//double end = edl->local_session->get_selectionend();
int64_t len = gui->clipboard_len(BC_PRIMARY_SELECTION);
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);
- clear(0);
+ if( clear_selection ) clear(0);
insert(start, &file,
edl->session->labels_follow_edits,
edl->session->plugins_follow_edits,
edl->session->autos_follow_edits,
- 0);
+ 0, first_track, overwrite);
edl->optimize();
delete [] 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 ) {
// Get destination track of same type as new_track
break;
}
if( overwrite ) {
+ double length = overwrite >= 0 ?
+ new_track->get_length() : total_length;
track->clear(current_position,
- current_position + new_track->get_length(),
+ 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();
paste(start, start, &file,
edl->session->labels_follow_edits,
edl->session->plugins_follow_edits,
- edl->session->autos_follow_edits);
+ edl->session->autos_follow_edits,
+ 0, 0);
// Position at end of clip
edl->local_session->set_selectionstart(start + source_end - source_start);
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);
edl->rescale_proxy(orig_scale, new_scale);
}
-void MWindow::add_proxy(int use_scaler,
- ArrayList<Indexable*> *orig_assets, ArrayList<Indexable*> *proxy_assets)
+void MWindow::add_proxy(ArrayList<Indexable*> *orig_assets, ArrayList<Indexable*> *proxy_assets)
{
- edl->add_proxy(use_scaler, orig_assets, proxy_assets);
+ edl->add_proxy(orig_assets, proxy_assets);
+}
+
+void MWindow::start_convert(Asset *format_asset, const char *suffix,
+ float beep, int remove_originals)
+{
+ if( !convert_render )
+ convert_render = new ConvertRender(this, suffix);
+ convert_render->set_format(format_asset);
+ int found = convert_render->find_convertable_assets(edl);
+ if( convert_render->needed_idxbls.size() > 0 )
+ convert_render->start_convert(beep, remove_originals);
+ else if( found > 0 )
+ finish_convert(remove_originals);
+ else {
+ eprintf(_("No convertable assets found"));
+ }
+}
+
+void MWindow::finish_convert(int remove_originals)
+{
+ gui->lock_window("MWindow::finish_convert");
+ undo_before();
+ edl->replace_assets(
+ convert_render->orig_idxbls,
+ convert_render->orig_copies);
+ if( remove_originals ) {
+ remove_assets_from_project(0, 0, 0,
+ &convert_render->orig_idxbls, 0);
+ }
+ save_backup();
+ undo_after(_("convert"), LOAD_ALL);
+
+ update_plugin_guis();
+ gui->update(1, FORCE_REDRAW, 1, 1, 1, 1, 0);
+ cwindow->update(1, 0, 0, 0, 1);
+ awindow->gui->async_update_assets();
+ cwindow->refresh_frame(CHANGE_EDL);
+ gui->unlock_window();
}
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();