rework deglitch/optimize/stop_playback, sams ladspa icons, reticle color, tweak frame...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindowedit.C
index 0e4121b121ae18e17b414cedc264912507ac5cc0..e128a19bfdd68767466fd22ecaf1706fae82c107 100644 (file)
@@ -514,7 +514,26 @@ void MWindow::cut()
 {
        double start = edl->local_session->get_selectionstart();
        double end = edl->local_session->get_selectionend();
-       cut(start, end);
+       if( EQUIV(start,end) )
+               blade(start);
+       else
+               cut(start, end);
+}
+
+void MWindow::blade(double position)
+{
+       undo->update_undo_before();
+       edl->blade(position);
+       edl->optimize();
+       save_backup();
+       undo->update_undo_after(_("blade"), LOAD_EDITS | LOAD_TIMEBAR);
+       restart_brender();
+       update_plugin_guis();
+       gui->update(1, 2, 1, 1, 1, 1, 0);
+       cwindow->update(1, 0, 0, 0, 1);
+       awindow->gui->async_update_assets();
+       cwindow->playback_engine->que->
+               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
 }
 
 void MWindow::cut(double start, double end, double new_position)
@@ -526,7 +545,6 @@ void MWindow::cut(double start, double end, double new_position)
                edl->session->plugins_follow_edits,
                edl->session->autos_follow_edits);
 
-
        edl->optimize();
        save_backup();
        undo->update_undo_after(_("cut"), LOAD_EDITS | LOAD_TIMEBAR);
@@ -538,6 +556,7 @@ void MWindow::cut(double start, double end, double new_position)
        update_plugin_guis();
        gui->update(1, 2, 1, 1, 1, 1, 0);
        cwindow->update(1, 0, 0, 0, 1);
+       awindow->gui->async_update_assets();
        cwindow->playback_engine->que->
                send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
 }
@@ -862,15 +881,18 @@ void MWindow::finish_modify_handles()
 
        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);
@@ -882,6 +904,8 @@ void MWindow::finish_modify_handles()
        sync_parameters(CHANGE_EDL);
        update_plugin_guis();
        gui->update(1, 2, 1, 1, 1, 1, 0);
+// label list can be modified
+       awindow->gui->async_update_assets();
        cwindow->update(1, 0, 0, 0, 1);
 }
 
@@ -1047,6 +1071,7 @@ void MWindow::mute_selection()
                edl->paste_silence(start, end, 0,
                        edl->session->plugins_follow_edits,
                        edl->session->autos_follow_edits);
+
                save_backup();
                undo->update_undo_after(_("mute"), LOAD_EDITS);
 
@@ -1076,7 +1101,7 @@ void MWindow::overwrite(EDL *source)
        }
 
        source->copy(src_start, src_start + overwrite_len,
-               1, 0, 0, &file, "", 1);
+               0, 0, 0, &file, "", 1);
 
 // HACK around paste_edl get_start/endselection on its own
 // so we need to clear only when not using both io points
@@ -1314,7 +1339,7 @@ int MWindow::paste_edls(ArrayList<EDL*> *new_edls, int load_mode,
        if( !new_edls->total ) return 0;
 
 //PRINT_TRACE
-//     double original_length = edl->tracks->total_playable_length();
+//     double original_length = edl->tracks->total_length();
 //     double original_preview_end = edl->local_session->preview_end;
 //PRINT_TRACE
 
@@ -1328,6 +1353,7 @@ int MWindow::paste_edls(ArrayList<EDL*> *new_edls, int load_mode,
                edl = new EDL;
                edl->create_objects();
                edl->copy_session(new_edls->values[0]);
+               edl->copy_mixers(new_edls->values[0]);
                gui->mainmenu->update_toggles(0);
                gui->unlock_window();
                gwindow->gui->update_toggles(1);
@@ -1589,7 +1615,7 @@ int MWindow::paste_edls(ArrayList<EDL*> *new_edls, int load_mode,
 // Fix preview range
 //     if( EQUIV(original_length, original_preview_end) )
 //     {
-//             edl->local_session->preview_end = edl->tracks->total_playable_length();
+//             edl->local_session->preview_end = edl->tracks->total_length();
 //     }
 
 // Start examining next batch of index files
@@ -1861,20 +1887,8 @@ void MWindow::set_transition_length(double length)
 
 void MWindow::redo_entry(BC_WindowBase *calling_window_gui)
 {
-
        calling_window_gui->unlock_window();
-
-       cwindow->playback_engine->que->
-               send_command(STOP, CHANGE_NONE, 0, 0);
-       cwindow->playback_engine->interrupt_playback(0);
-
-       for( int i = 0; i < vwindows.size(); i++ ) {
-               if( vwindows.get(i)->is_running() ) {
-                       vwindows.get(i)->playback_engine->que->
-                               send_command(STOP, CHANGE_NONE, 0, 0);
-                       vwindows.get(i)->playback_engine->interrupt_playback(0);
-               }
-       }
+       stop_playback(0);
 
        cwindow->gui->lock_window("MWindow::redo_entry");
        for( int i = 0; i < vwindows.size(); i++ ) {
@@ -1891,6 +1905,7 @@ void MWindow::redo_entry(BC_WindowBase *calling_window_gui)
        save_backup();
        update_plugin_states();
        update_plugin_guis();
+       awindow->gui->async_update_assets();
        restart_brender();
        gui->update(1, 2, 1, 1, 1, 1, 1);
        cwindow->update(1, 1, 1, 1, 1);
@@ -2056,7 +2071,7 @@ void MWindow::save_clip(EDL *new_edl, const char *txt)
 
        edl->update_assets(new_edl);
        int cur_x, cur_y;
-       gui->get_abs_cursor_xy(cur_x, cur_y, 0);
+       gui->get_abs_cursor(cur_x, cur_y, 0);
        gui->unlock_window();
 
        awindow->clip_edit->create_clip(new_edl, cur_x, cur_y);
@@ -2151,6 +2166,7 @@ void MWindow::trim_selection()
        update_plugin_guis();
        gui->update(1, 2, 1, 1, 1, 1, 0);
        cwindow->update(1, 0, 0, 0, 1);
+       awindow->gui->async_update_assets();
        restart_brender();
        cwindow->playback_engine->que->
                send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
@@ -2160,19 +2176,7 @@ void MWindow::trim_selection()
 void MWindow::undo_entry(BC_WindowBase *calling_window_gui)
 {
        calling_window_gui->unlock_window();
-
-       cwindow->playback_engine->que->
-               send_command(STOP, CHANGE_NONE, 0, 0);
-       cwindow->playback_engine->interrupt_playback(0);
-
-//printf("MWindow::undo_entry %d %d\n", __LINE__, vwindows.size());
-       for( int i = 0; i < vwindows.size(); i++ ) {
-               if( vwindows.get(i)->is_running() ) {
-                       vwindows.get(i)->playback_engine->que->
-                               send_command(STOP, CHANGE_NONE, 0, 0);
-                       vwindows.get(i)->playback_engine->interrupt_playback(0);
-               }
-       }
+       stop_playback(0);
 
        cwindow->gui->lock_window("MWindow::undo_entry 1");
        for( int i = 0; i < vwindows.size(); i++ ) {