X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ftext_view.cc;h=4a39b913976eba1476bc3a5bb123a006e37928ed;hb=313319ba2d8544bc25524e02e634804a503b54f1;hp=16ec2213f47f6f2d62f260320377b357027baade;hpb=c370a1f38215f6461cf4366e6885757e7aa2b96a;p=dcpomatic.git diff --git a/src/wx/text_view.cc b/src/wx/text_view.cc index 16ec2213f..4a39b9139 100644 --- a/src/wx/text_view.cc +++ b/src/wx/text_view.cc @@ -18,23 +18,30 @@ */ -#include "text_view.h" + #include "film_viewer.h" +#include "text_view.h" #include "wx_util.h" -#include "lib/string_text_file_decoder.h" -#include "lib/content_text.h" -#include "lib/video_decoder.h" #include "lib/audio_decoder.h" -#include "lib/film.h" #include "lib/config.h" +#include "lib/content_text.h" +#include "lib/film.h" #include "lib/string_text_file_content.h" +#include "lib/string_text_file_decoder.h" #include "lib/text_decoder.h" +#include "lib/video_decoder.h" + +using std::dynamic_pointer_cast; using std::list; -using boost::shared_ptr; -using boost::weak_ptr; +using std::shared_ptr; +using std::weak_ptr; using boost::bind; -using boost::dynamic_pointer_cast; +using namespace dcpomatic; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif + TextView::TextView ( wxWindow* parent, shared_ptr film, shared_ptr content, shared_ptr text, shared_ptr decoder, weak_ptr viewer @@ -69,12 +76,12 @@ TextView::TextView ( _list->InsertColumn (2, ip); } - wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL); + auto sizer = new wxBoxSizer (wxVERTICAL); sizer->Add (_list, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_X_GAP); _list->Bind (wxEVT_LIST_ITEM_SELECTED, boost::bind (&TextView::subtitle_selected, this, _1)); - wxSizer* buttons = CreateSeparatedButtonSizer (wxOK); + auto buttons = CreateSeparatedButtonSizer (wxOK); if (buttons) { sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); } @@ -90,7 +97,7 @@ TextView::TextView ( _frc = film->active_frame_rate_change (content->position()); /* Find the decoder that is being used for our TextContent and attach to it */ - BOOST_FOREACH (shared_ptr i, decoder->text) { + for (auto i: decoder->text) { if (i->content() == text) { i->PlainStart.connect (bind (&TextView::data_start, this, _1)); i->Stop.connect (bind (&TextView::data_stop, this, _1)); @@ -100,10 +107,11 @@ TextView::TextView ( SetSizerAndFit (sizer); } + void TextView::data_start (ContentStringText cts) { - BOOST_FOREACH (dcp::SubtitleString const & i, cts.subs) { + for (auto const& i: cts.subs) { wxListItem list_item; list_item.SetId (_subs); _list->InsertItem (list_item); @@ -116,6 +124,7 @@ TextView::data_start (ContentStringText cts) _last_count = cts.subs.size (); } + void TextView::data_stop (ContentTime time) { @@ -128,6 +137,7 @@ TextView::data_stop (ContentTime time) } } + void TextView::subtitle_selected (wxListEvent& ev) { @@ -136,9 +146,10 @@ TextView::subtitle_selected (wxListEvent& ev) } DCPOMATIC_ASSERT (ev.GetIndex() < int(_start_times.size())); - shared_ptr lc = _content.lock (); + auto lc = _content.lock (); DCPOMATIC_ASSERT (lc); - shared_ptr fv = _film_viewer.lock (); + auto fv = _film_viewer.lock (); DCPOMATIC_ASSERT (fv); - fv->set_position (lc, _start_times[ev.GetIndex()]); + /* Add on a frame here to work around any rounding errors and make sure land in the subtitle */ + fv->seek (lc, _start_times[ev.GetIndex()] + ContentTime::from_frames(1, _frc->source), true); }