X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fsubtitle_panel.cc;h=0e3f2e89d389d8d25da1c3dfe43ae5817084f443;hb=6293ca30e4afb64fb3e172048c8784adc022f9dc;hp=e410120221fb5b887f8314cf840fd173135d6058;hpb=11c54ca7ffb9f4b70dff6414b8da2099597b0d4d;p=dcpomatic.git diff --git a/src/wx/subtitle_panel.cc b/src/wx/subtitle_panel.cc index e41012022..0e3f2e89d 100644 --- a/src/wx/subtitle_panel.cc +++ b/src/wx/subtitle_panel.cc @@ -19,6 +19,7 @@ #include #include +#include "lib/ffmpeg_content.h" #include "subtitle_panel.h" #include "film_editor.h" #include "wx_util.h" @@ -65,10 +66,10 @@ SubtitlePanel::SubtitlePanel (FilmEditor* e) _scale->SetRange (1, 1000); _scale->SetValue (100); - _with_subtitles->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (SubtitlePanel::with_subtitles_toggled), 0, this); - _offset->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (SubtitlePanel::offset_changed), 0, this); - _scale->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (SubtitlePanel::scale_changed), 0, this); - _stream->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (SubtitlePanel::stream_changed), 0, this); + _with_subtitles->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&SubtitlePanel::with_subtitles_toggled, this)); + _offset->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&SubtitlePanel::offset_changed, this)); + _scale->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&SubtitlePanel::scale_changed, this)); + _stream->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&SubtitlePanel::stream_changed, this)); } void @@ -76,11 +77,11 @@ SubtitlePanel::film_changed (Film::Property property) { switch (property) { case Film::CONTENT: - setup_control_sensitivity (); + setup_sensitivity (); break; case Film::WITH_SUBTITLES: checked_set (_with_subtitles, _editor->film()->with_subtitles ()); - setup_control_sensitivity (); + setup_sensitivity (); break; default: break; @@ -88,36 +89,45 @@ SubtitlePanel::film_changed (Film::Property property) } void -SubtitlePanel::film_content_changed (shared_ptr c, int property) +SubtitlePanel::film_content_changed (int property) { - shared_ptr sc = dynamic_pointer_cast (c); - shared_ptr fc = dynamic_pointer_cast (c); + FFmpegContentList fc = _editor->selected_ffmpeg_content (); + SubtitleContentList sc = _editor->selected_subtitle_content (); + + shared_ptr fcs; + if (fc.size() == 1) { + fcs = fc.front (); + } + + shared_ptr scs; + if (sc.size() == 1) { + scs = sc.front (); + } if (property == FFmpegContentProperty::SUBTITLE_STREAMS) { _stream->Clear (); - if (fc) { - vector > s = fc->subtitle_streams (); + if (fcs) { + vector > s = fcs->subtitle_streams (); for (vector >::iterator i = s.begin(); i != s.end(); ++i) { _stream->Append (std_to_wx ((*i)->name), new wxStringClientData (std_to_wx (lexical_cast ((*i)->id)))); } - if (fc->subtitle_stream()) { - checked_set (_stream, lexical_cast (fc->subtitle_stream()->id)); + if (fcs->subtitle_stream()) { + checked_set (_stream, lexical_cast (fcs->subtitle_stream()->id)); } else { _stream->SetSelection (wxNOT_FOUND); } } - setup_control_sensitivity (); + setup_sensitivity (); } else if (property == SubtitleContentProperty::SUBTITLE_OFFSET) { - checked_set (_offset, sc ? (sc->subtitle_offset() * 100) : 0); + checked_set (_offset, scs ? (scs->subtitle_offset() * 100) : 0); } else if (property == SubtitleContentProperty::SUBTITLE_SCALE) { - checked_set (_scale, sc ? (sc->subtitle_scale() * 100) : 100); + checked_set (_scale, scs ? (scs->subtitle_scale() * 100) : 100); } - } void -SubtitlePanel::with_subtitles_toggled (wxCommandEvent &) +SubtitlePanel::with_subtitles_toggled () { if (!_editor->film()) { return; @@ -127,39 +137,32 @@ SubtitlePanel::with_subtitles_toggled (wxCommandEvent &) } void -SubtitlePanel::setup_control_sensitivity () +SubtitlePanel::setup_sensitivity () { bool h = false; - if (_editor->generally_sensitive() && _editor->film()) { - h = _editor->film()->has_subtitles (); - } - - _with_subtitles->Enable (h); - bool j = false; if (_editor->film()) { + h = _editor->film()->has_subtitles (); j = _editor->film()->with_subtitles (); } + _with_subtitles->Enable (h); _offset->Enable (j); _scale->Enable (j); _stream->Enable (j); } void -SubtitlePanel::stream_changed (wxCommandEvent &) +SubtitlePanel::stream_changed () { - shared_ptr c = _editor->selected_content (); - if (!c) { - return; - } - - shared_ptr fc = dynamic_pointer_cast (c); - if (!fc) { + FFmpegContentList fc = _editor->selected_ffmpeg_content (); + if (fc.size() != 1) { return; } + + shared_ptr fcs = fc.front (); - vector > a = fc->subtitle_streams (); + vector > a = fcs->subtitle_streams (); vector >::iterator i = a.begin (); string const s = string_client_data (_stream->GetClientObject (_stream->GetSelection ())); while (i != a.end() && lexical_cast ((*i)->id) != s) { @@ -167,29 +170,32 @@ SubtitlePanel::stream_changed (wxCommandEvent &) } if (i != a.end ()) { - fc->set_subtitle_stream (*i); + fcs->set_subtitle_stream (*i); } } void -SubtitlePanel::offset_changed (wxCommandEvent &) +SubtitlePanel::offset_changed () { - shared_ptr c = _editor->selected_subtitle_content (); - if (!c) { - return; + SubtitleContentList c = _editor->selected_subtitle_content (); + if (c.size() == 1) { + c.front()->set_subtitle_offset (_offset->GetValue() / 100.0); } - - c->set_subtitle_offset (_offset->GetValue() / 100.0); } void -SubtitlePanel::scale_changed (wxCommandEvent &) +SubtitlePanel::scale_changed () { - shared_ptr c = _editor->selected_subtitle_content (); - if (!c) { - return; + SubtitleContentList c = _editor->selected_subtitle_content (); + if (c.size() == 1) { + c.front()->set_subtitle_scale (_scale->GetValue() / 100.0); } - - c->set_subtitle_scale (_scale->GetValue() / 100.0); } +void +SubtitlePanel::content_selection_changed () +{ + film_content_changed (FFmpegContentProperty::SUBTITLE_STREAMS); + film_content_changed (SubtitleContentProperty::SUBTITLE_OFFSET); + film_content_changed (SubtitleContentProperty::SUBTITLE_SCALE); +}