mixer undo fix, new ffmpeg opts, docs
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindowedit.C
index 1604256d83de3f57d0a92b90e091d55369df56e2..c569c9204b085b0d9aa7dc2ff61ea2024b4e8c5c 100644 (file)
@@ -74,6 +74,7 @@
 #include "vwindow.h"
 #include "vwindowgui.h"
 #include "zoombar.h"
+#include "zwindow.h"
 #include "automation.h"
 #include "maskautos.h"
 
@@ -96,8 +97,7 @@ void MWindow::add_audio_track_entry(int above, Track *dst)
 //     gui->cursor->draw(1);
 //     gui->canvas->flash();
 //     gui->canvas->activate();
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
 }
 
 void MWindow::add_video_track_entry(Track *dst)
@@ -116,8 +116,7 @@ void MWindow::add_video_track_entry(Track *dst)
 //     gui->cursor->draw(1);
 //     gui->canvas->flash();
 //     gui->canvas->activate();
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
        save_backup();
 }
 
@@ -137,8 +136,7 @@ void MWindow::add_subttl_track_entry(Track *dst)
 //     gui->cursor->draw(1);
 //     gui->canvas->flash();
 //     gui->canvas->activate();
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
        save_backup();
 }
 
@@ -301,7 +299,7 @@ void MWindow::asset_to_rate()
 void MWindow::clear_entry()
 {
        undo->update_undo_before();
-       clear(1, 1);
+       clear(1);
 
        edl->optimize();
        save_backup();
@@ -311,11 +309,10 @@ void MWindow::clear_entry()
        update_plugin_guis();
        gui->update(1, 2, 1, 1, 1, 1, 0);
        cwindow->update(1, 0, 0, 0, 1);
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
 }
 
-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 +323,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)
@@ -414,8 +405,7 @@ void MWindow::concatenate_tracks()
 
        restart_brender();
        gui->update(1, 1, 0, 0, 1, 0, 0);
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
 }
 
 
@@ -511,8 +501,7 @@ void MWindow::crop_video()
        undo->update_undo_after(_("crop"), LOAD_ALL);
 
        restart_brender();
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_ALL, edl, 1);
+       cwindow->refresh_frame(CHANGE_ALL);
        save_backup();
 }
 
@@ -520,7 +509,25 @@ 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->refresh_frame(CHANGE_EDL);
 }
 
 void MWindow::cut(double start, double end, double new_position)
@@ -531,8 +538,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();
@@ -546,8 +551,7 @@ void MWindow::cut(double start, double end, double new_position)
        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);
+       cwindow->refresh_frame(CHANGE_EDL);
 }
 
 void MWindow::snap_left_edit()
@@ -627,19 +631,6 @@ int MWindow::cut_default_keyframe()
 }
 
 
-void MWindow::delete_inpoint()
-{
-       edl->local_session->unset_inpoint();
-       save_backup();
-}
-
-void MWindow::delete_outpoint()
-{
-       edl->local_session->unset_outpoint();
-       save_backup();
-}
-
-
 void MWindow::delete_track()
 {
        if( edl->tracks->last )
@@ -657,8 +648,7 @@ void MWindow::delete_tracks()
        update_plugin_states();
 
        gui->update(1, 1, 1, 0, 1, 0, 0);
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
 }
 
 void MWindow::delete_track(Track *track)
@@ -671,8 +661,7 @@ void MWindow::delete_track(Track *track)
        update_plugin_states();
 
        gui->update(1, 1, 1, 0, 1, 0, 0);
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
        save_backup();
 }
 
@@ -873,14 +862,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
@@ -932,8 +919,7 @@ void MWindow::move_edits(ArrayList<Edit*> *edits,
        undo->update_undo_after(_("move edit"), LOAD_ALL);
 
        restart_brender();
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
 
        update_plugin_guis();
        gui->update(1, 1,      // 1 for incremental drawing.  2 for full refresh
@@ -948,8 +934,7 @@ void MWindow::move_effect(Plugin *plugin, Track *track, int64_t position)
        undo->update_undo_after(_("paste effect"), LOAD_ALL);
 
        restart_brender();
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1); 
+       cwindow->refresh_frame(CHANGE_EDL);
        update_plugin_guis();
        gui->update(1, 1,      // 1 for incremental drawing.  2 for full refresh
                0, 0, 0, 0, 0);
@@ -963,8 +948,7 @@ void MWindow::move_effect(Plugin *plugin, PluginSet *plugin_set, int64_t positio
        undo->update_undo_after(_("move effect"), LOAD_ALL);
 
        restart_brender();
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
        update_plugin_guis();
        gui->update(1, 1,      // 1 for incremental drawing.  2 for full refresh
                0, 0, 0, 0, 0);
@@ -1062,18 +1046,14 @@ 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);
 
                restart_brender();
                update_plugin_guis();
                gui->update(1, 2, 1, 1, 1, 1, 0);
-               cwindow->playback_engine->que->
-                       send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+               cwindow->refresh_frame(CHANGE_EDL);
        }
 }
 
@@ -1127,7 +1107,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,
@@ -1150,7 +1130,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,
@@ -1629,8 +1609,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);
@@ -1639,8 +1617,7 @@ void MWindow::paste_silence()
        restart_brender();
        gui->update(1, 2, 1, 1, 1, 1, 0);
        cwindow->update(1, 0, 0, 0, 1);
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
 }
 
 void MWindow::detach_transition(Transition *transition)
@@ -1883,22 +1860,10 @@ void MWindow::set_transition_length(double length)
 
 void MWindow::redo_entry(BC_WindowBase *calling_window_gui)
 {
-
        calling_window_gui->unlock_window();
+       stop_playback(0);
 
-       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);
-               }
-       }
-
-       cwindow->gui->lock_window("MWindow::redo_entry");
+       cwindow->gui->lock_window("MWindow::redo_entry 1");
        for( int i = 0; i < vwindows.size(); i++ ) {
                if( vwindows.get(i)->is_running() ) {
                        if( calling_window_gui != vwindows.get(i)->gui ) {
@@ -1906,23 +1871,19 @@ void MWindow::redo_entry(BC_WindowBase *calling_window_gui)
                        }
                }
        }
-       gui->lock_window();
+       gui->lock_window("MWindow::redo_entry 3");
 
        undo->redo();
 
        save_backup();
+       restart_brender();
        update_plugin_states();
        update_plugin_guis();
-       awindow->gui->async_update_assets();
-       restart_brender();
+
        gui->update(1, 2, 1, 1, 1, 1, 1);
+       gui->unlock_window();
        cwindow->update(1, 1, 1, 1, 1);
-
-       if( calling_window_gui != cwindow->gui )
-               cwindow->gui->unlock_window();
-       if( calling_window_gui != gui )
-               gui->unlock_window();
-
+       cwindow->gui->unlock_window();
 
        for( int i = 0; i < vwindows.size(); i++ ) {
                if( vwindows.get(i)->is_running() ) {
@@ -1932,8 +1893,13 @@ void MWindow::redo_entry(BC_WindowBase *calling_window_gui)
                }
        }
 
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_ALL, edl, 1);
+       if( calling_window_gui != gui )
+               gui->unlock_window();
+
+       awindow->gui->async_update_assets();
+
+       cwindow->refresh_frame(CHANGE_ALL);
+       calling_window_gui->lock_window("MWindow::redo_entry 4");
 }
 
 
@@ -2002,6 +1968,30 @@ void MWindow::set_outpoint(int is_mwindow)
        }
 }
 
+void MWindow::unset_inoutpoint(int is_mwindow)
+{
+       undo->update_undo_before();
+       edl->unset_inoutpoint();
+       save_backup();
+       undo->update_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->timebar->update(1);
+       if( is_mwindow ) {
+               cwindow->gui->unlock_window();
+       }
+}
+
 void MWindow::splice(EDL *source)
 {
        FileXML file;
@@ -2168,10 +2158,6 @@ 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);
@@ -2180,27 +2166,14 @@ void MWindow::trim_selection()
        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);
+       cwindow->refresh_frame(CHANGE_EDL);
 }
 
 
 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++ ) {
@@ -2237,8 +2210,7 @@ void MWindow::undo_entry(BC_WindowBase *calling_window_gui)
 
        awindow->gui->async_update_assets();
 
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_ALL, edl, 1);
+       cwindow->refresh_frame(CHANGE_ALL);
        calling_window_gui->lock_window("MWindow::undo_entry 4");
 }
 
@@ -2450,8 +2422,7 @@ void MWindow::cut_commercials()
        update_plugin_guis();
        gui->update(1, 2, 1, 1, 1, 1, 0);
        cwindow->update(1, 0, 0, 0, 1);
-       cwindow->playback_engine->que->
-               send_command(CURRENT_FRAME, CHANGE_EDL, edl, 1);
+       cwindow->refresh_frame(CHANGE_EDL);
 }