From 719d90956d1f6c7e60db5e368530049c6e3a8250 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Thu, 7 Feb 2013 17:52:57 +0200 Subject: [PATCH] Movie editor: Truncate movie --- src/platform/wxwidgets/editor-movie.cpp | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/platform/wxwidgets/editor-movie.cpp b/src/platform/wxwidgets/editor-movie.cpp index 4a47c0e5..4ab7bd07 100644 --- a/src/platform/wxwidgets/editor-movie.cpp +++ b/src/platform/wxwidgets/editor-movie.cpp @@ -29,6 +29,7 @@ enum wxID_POSITION_LOCK, wxID_RUN_TO_FRAME, wxID_APPEND_FRAMES, + wxID_TRUNCATE, }; void update_movie_state(); @@ -363,6 +364,7 @@ private: void do_append_frames(); void do_insert_frame_after(uint64_t row); void do_delete_frame(uint64_t row, bool wholeframe); + void do_truncate(uint64_t row); void do_set_stop_at_frame(); uint64_t first_editable(unsigned index); uint64_t first_nextframe(); @@ -804,6 +806,29 @@ void wxeditor_movie::_moviepanel::do_delete_frame(uint64_t row, bool wholeframe) recursing = false; } +void wxeditor_movie::_moviepanel::do_truncate(uint64_t row) +{ + recursing = true; + uint64_t _row = row; + frame_controls* _fcontrols = &fcontrols; + runemufn([_row, _fcontrols]() { + controller_frame_vector& fv = movb.get_movie().get_frame_vector(); + uint64_t vsize = fv.size(); + if(_row >= vsize) + return; + if(_row < real_first_editable(*_fcontrols, 0)) + return; + int64_t delete_count = 0; + for(uint64_t i = _row; i < vsize; i++) + if(fv[i].sync()) + delete_count--; + fv.resize(_row); + movie_framecount_change(delete_count); + }); + max_subframe = row; + recursing = false; +} + void wxeditor_movie::_moviepanel::do_set_stop_at_frame() { uint64_t curframe; @@ -897,6 +922,9 @@ void wxeditor_movie::_moviepanel::on_popup_menu(wxCommandEvent& e) case wxID_DELETE_SUBFRAME: do_delete_frame(press_line, false); return; + case wxID_TRUNCATE: + do_truncate(press_line); + return; case wxID_RUN_TO_FRAME: do_set_stop_at_frame(); return; @@ -1005,6 +1033,8 @@ void wxeditor_movie::_moviepanel::on_mouse2(unsigned x, unsigned y, bool polarit menu.Append(wxID_DELETE_FRAME, wxT("Delete frame"))->Enable(enable_delete_frame); menu.Append(wxID_DELETE_SUBFRAME, wxT("Delete subframe"))->Enable(enable_delete_subframe); menu.AppendSeparator(); + menu.Append(wxID_TRUNCATE, wxT("Truncate movie"))->Enable(enable_delete_subframe); + menu.AppendSeparator(); outrange: menu.Append(wxID_RUN_TO_FRAME, wxT("Run to frame...")); menu.Append(wxID_CHANGE_LINECOUNT, wxT("Change number of lines visible"));