add bins/folders, fix listbox bad wdw ref, hide vicons fix, remove sort by time
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindowedit.C
index e5d90c6b52e23ef8cef4f96cadacee22f5f4cb5a..65a2d916c97fdb0dc523a433a6f4917a484a0bb2 100644 (file)
@@ -1608,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,
@@ -1881,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();
@@ -1893,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);
@@ -2076,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);
@@ -2091,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();
@@ -2207,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();
@@ -2219,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);
@@ -2232,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);
 
@@ -2398,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;
 }