X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindowedit.C;h=65a2d916c97fdb0dc523a433a6f4917a484a0bb2;hp=3016050ba567e6451c6357143feeea4ff74fa016;hb=09ccfde5a1fd65069f69b37490462b7ccf38a336;hpb=559af27994c49da1d98e085f4ac2ec1ad1d1d27c diff --git a/cinelerra-5.1/cinelerra/mwindowedit.C b/cinelerra-5.1/cinelerra/mwindowedit.C index 3016050b..65a2d916 100644 --- a/cinelerra-5.1/cinelerra/mwindowedit.C +++ b/cinelerra-5.1/cinelerra/mwindowedit.C @@ -1065,10 +1065,16 @@ void MWindow::overwrite(EDL *source, int all) { FileXML file; + LocalSession *src = source->local_session; double src_start = all ? 0 : - source->local_session->get_selectionstart(); - double overwrite_len = all ? source->tracks->total_length() : - source->local_session->get_selectionend() - src_start; + src->inpoint_valid() ? src->get_inpoint() : + src->outpoint_valid() ? 0 : + src->get_selectionstart(); + double src_end = all ? source->tracks->total_length() : + src->outpoint_valid() ? src->get_outpoint() : + src->inpoint_valid() ? source->tracks->total_length() : + src->get_selectionend(); + double overwrite_len = src_end - src_start; double dst_start = edl->local_session->get_selectionstart(); double dst_len = edl->local_session->get_selectionend() - dst_start; @@ -1602,7 +1608,7 @@ void MWindow::paste_silence() if( edl->session->frame_rate > 0 ) end += 1./edl->session->frame_rate; } - undo->update_undo_before(); + undo->update_undo_before(_("silence"), this); edl->paste_silence(start, end, edl->session->labels_follow_edits, edl->session->plugins_follow_edits, @@ -1875,6 +1881,7 @@ void MWindow::redo_entry(BC_WindowBase *calling_window_gui) update_plugin_guis(); gui->update(1, 2, 1, 1, 1, 1, 1); + gui->update_proxy_toggle(); gui->unlock_window(); cwindow->update(1, 1, 1, 1, 1); cwindow->gui->unlock_window(); @@ -1887,9 +1894,6 @@ void MWindow::redo_entry(BC_WindowBase *calling_window_gui) } } - if( calling_window_gui != gui ) - gui->unlock_window(); - awindow->gui->async_update_assets(); cwindow->refresh_frame(CHANGE_ALL); @@ -1989,12 +1993,16 @@ void MWindow::unset_inoutpoint(int is_mwindow) void MWindow::splice(EDL *source, int all) { FileXML file; + LocalSession *src = source->local_session; undo->update_undo_before(); double source_start = all ? 0 : - source->local_session->get_selectionstart(); + src->inpoint_valid() ? src->get_inpoint() : + src->outpoint_valid() ? 0 : src->get_selectionstart(); double source_end = all ? source->tracks->total_length() : - source->local_session->get_selectionend(); + 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); //file.dump(); double start = edl->local_session->get_selectionstart(); @@ -2066,6 +2074,7 @@ void MWindow::save_clip(EDL *new_edl, const char *txt) "clip_%02d%02d%02d-%02d%02d%02d.png", dtm.tm_year+1900, dtm.tm_mon+1, dtm.tm_mday, dtm.tm_hour, dtm.tm_min, dtm.tm_sec); + new_edl->awindow_folder = AW_CLIP_FOLDER; edl->update_assets(new_edl); int cur_x, cur_y; gui->get_abs_cursor(cur_x, cur_y, 0); @@ -2081,14 +2090,16 @@ void MWindow::save_clip(EDL *new_edl, const char *txt) void MWindow::to_clip(EDL *edl, const char *txt, int all) { FileXML file; - double start, end; + LocalSession *src = edl->local_session; gui->lock_window("MWindow::to_clip 1"); - start = all ? 0 : - edl->local_session->get_selectionstart(); - end = all ? edl->tracks->total_length() : - edl->local_session->get_selectionend(); - + double start = all ? 0 : + src->inpoint_valid() ? src->get_inpoint() : + src->outpoint_valid() ? 0 : src->get_selectionstart(); + double end = all ? edl->tracks->total_length() : + src->outpoint_valid() ? src->get_outpoint() : + src->inpoint_valid() ? edl->tracks->total_length() : + src->get_selectionend(); if( EQUIV(end, start) ) { start = 0; end = edl->tracks->total_length(); @@ -2197,6 +2208,7 @@ void MWindow::undo_entry(BC_WindowBase *calling_window_gui) update_plugin_guis(); gui->update(1, 2, 1, 1, 1, 1, 1); + gui->update_proxy_toggle(); gui->unlock_window(); cwindow->update(1, 1, 1, 1, 1); cwindow->gui->unlock_window(); @@ -2209,9 +2221,6 @@ void MWindow::undo_entry(BC_WindowBase *calling_window_gui) } } - if( calling_window_gui != gui ) - gui->unlock_window(); - awindow->gui->async_update_assets(); cwindow->refresh_frame(CHANGE_ALL); @@ -2222,18 +2231,30 @@ void MWindow::undo_entry(BC_WindowBase *calling_window_gui) void MWindow::new_folder(const char *new_folder) { undo->update_undo_before(); - edl->new_folder(new_folder); + if( edl->new_folder(new_folder) ) { + MainError::show_error(_("create new folder failed")); + } undo->update_undo_after(_("new folder"), LOAD_ALL); awindow->gui->async_update_assets(); } void MWindow::delete_folder(char *folder) { -// undo->update_undo_after(_("delete folder"), LOAD_ALL); + undo->update_undo_before(); + if( edl->delete_folder(folder) < 0 ) { + MainError::show_error(_("delete folder failed")); + } + undo->update_undo_after(_("del folder"), LOAD_ALL); + awindow->gui->async_update_assets(); } void MWindow::select_point(double position) { + gui->unlock_window(); + gui->stop_drawing(); + cwindow->stop_playback(0); + gui->lock_window("MWindow::select_point"); + edl->local_session->set_selectionstart(position); edl->local_session->set_selectionend(position); @@ -2319,12 +2340,6 @@ void MWindow::rescale_proxy(EDL *clip, int orig_scale, int new_scale) edl->rescale_proxy(orig_scale, new_scale); } -void MWindow::set_proxy(int use_scaler, int new_scale, int auto_scale, - ArrayList *orig_assets, ArrayList *proxy_assets) -{ - edl->set_proxy(use_scaler, new_scale, auto_scale, orig_assets, proxy_assets); -} - void MWindow::add_proxy(int use_scaler, ArrayList *orig_assets, ArrayList *proxy_assets) { @@ -2394,11 +2409,13 @@ void MWindow::speed_before() int MWindow::speed_after(int done) { int result = 0; - if( speed_edl && done >= 0 ) - result = normalize_speed(speed_edl, edl); - if( done ) { - speed_edl->remove_user(); - speed_edl = 0; + if( speed_edl ) { + if( done >= 0 ) + result = normalize_speed(speed_edl, edl); + if( done != 0 ) { + speed_edl->remove_user(); + speed_edl = 0; + } } return result; }