rework deglitch/optimize/stop_playback, sams ladspa icons, reticle color, tweak frame...
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindowedit.C
index a149b27557fcdfe755678808719e33d5e6cfe1fc..e128a19bfdd68767466fd22ecaf1706fae82c107 100644 (file)
@@ -301,7 +301,7 @@ void MWindow::asset_to_rate()
 void MWindow::clear_entry()
 {
        undo->update_undo_before();
-       clear(1, 1);
+       clear(1);
 
        edl->optimize();
        save_backup();
@@ -315,7 +315,7 @@ void MWindow::clear_entry()
                send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
 }
 
-void MWindow::clear(int clear_handle, int deglitch)
+void MWindow::clear(int clear_handle)
 {
        double start = edl->local_session->get_selectionstart();
        double end = edl->local_session->get_selectionend();
@@ -326,12 +326,6 @@ void MWindow::clear(int clear_handle, int deglitch)
                        edl->session->plugins_follow_edits,
                        edl->session->autos_follow_edits);
        }
-       
-// always needed by paste operations
-       if(deglitch)
-       {
-               edl->deglitch(start);
-       }
 }
 
 void MWindow::set_automation_mode(int mode)
@@ -520,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)
@@ -531,8 +544,6 @@ void MWindow::cut(double start, double end, double new_position)
                edl->session->labels_follow_edits,
                edl->session->plugins_follow_edits,
                edl->session->autos_follow_edits);
-       edl->deglitch(start);
-
 
        edl->optimize();
        save_backup();
@@ -545,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);
 }
@@ -872,14 +884,12 @@ void MWindow::finish_modify_handles()
 //printf("MWindow::finish_modify_handles %d\n", __LINE__);
                edl->local_session->set_selectionstart(session->drag_position);
                edl->local_session->set_selectionend(session->drag_position);
-               edl->deglitch(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);
-               edl->deglitch(session->drag_start);
        }
 
 // clamp the selection to 0
@@ -894,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);
 }
 
@@ -1059,10 +1071,7 @@ void MWindow::mute_selection()
                edl->paste_silence(start, end, 0,
                        edl->session->plugins_follow_edits,
                        edl->session->autos_follow_edits);
-               edl->deglitch(start);
-               edl->deglitch(end);
 
-               
                save_backup();
                undo->update_undo_after(_("mute"), LOAD_EDITS);
 
@@ -1092,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
@@ -1124,7 +1133,7 @@ int MWindow::paste(double start,
        int edit_plugins,
        int edit_autos)
 {
-       clear(0, 1);
+       clear(0);
 
 // Want to insert with assets shared with the master EDL.
        insert(start, file,
@@ -1147,7 +1156,7 @@ void MWindow::paste()
                gui->from_clipboard(string, len, BC_PRIMARY_SELECTION);
                FileXML file;
                file.read_from_string(string);
-               clear(0, 1);
+               clear(0);
 
                insert(start, &file,
                        edl->session->labels_follow_edits,
@@ -1330,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
 
@@ -1344,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);
@@ -1605,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
@@ -1625,8 +1635,6 @@ void MWindow::paste_silence()
                edl->session->labels_follow_edits,
                edl->session->plugins_follow_edits,
                edl->session->autos_follow_edits);
-       edl->deglitch(start);
-       edl->deglitch(end);
        edl->optimize();
        save_backup();
        undo->update_undo_after(_("silence"), LOAD_EDITS | LOAD_TIMEBAR);
@@ -1879,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++ ) {
@@ -1909,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);
@@ -2163,16 +2160,13 @@ void MWindow::trim_selection()
                edl->session->labels_follow_edits,
                edl->session->plugins_follow_edits,
                edl->session->autos_follow_edits);
-       edl->deglitch(0);
-       edl->deglitch(edl->local_session->get_selectionend() -
-               edl->local_session->get_selectionstart());
-       
 
        save_backup();
        undo->update_undo_after(_("trim selection"), LOAD_EDITS | LOAD_TIMEBAR);
        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);
@@ -2182,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++ ) {