X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fsubtitle_panel.cc;h=fecc85106f6f889d5a1bd725ac10978022bae7ac;hb=cf8bbea2de38c4e9ac140f55b27311b7b6dcd814;hp=adbd0f32e46445271afeec3602bdd20e3327d2e3;hpb=73f52e94953848c696725defd3d7f5c4c30707e2;p=dcpomatic.git diff --git a/src/wx/subtitle_panel.cc b/src/wx/subtitle_panel.cc index adbd0f32e..fecc85106 100644 --- a/src/wx/subtitle_panel.cc +++ b/src/wx/subtitle_panel.cc @@ -22,10 +22,14 @@ #include "lib/ffmpeg_content.h" #include "lib/subrip_content.h" #include "lib/ffmpeg_subtitle_stream.h" +#include "lib/dcp_subtitle_content.h" +#include "lib/subrip_decoder.h" +#include "lib/dcp_subtitle_decoder.h" #include "subtitle_panel.h" #include "film_editor.h" #include "wx_util.h" #include "subtitle_view.h" +#include "content_panel.h" using std::vector; using std::string; @@ -33,8 +37,8 @@ using boost::shared_ptr; using boost::lexical_cast; using boost::dynamic_pointer_cast; -SubtitlePanel::SubtitlePanel (FilmEditor* e) - : FilmEditorPanel (e, _("Subtitles")) +SubtitlePanel::SubtitlePanel (ContentPanel* p) + : ContentSubPanel (p, _("Subtitles")) , _view (0) { wxFlexGridSizer* grid = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); @@ -102,8 +106,8 @@ SubtitlePanel::film_changed (Film::Property property) void SubtitlePanel::film_content_changed (int property) { - FFmpegContentList fc = _editor->selected_ffmpeg_content (); - SubtitleContentList sc = _editor->selected_subtitle_content (); + FFmpegContentList fc = _parent->selected_ffmpeg (); + SubtitleContentList sc = _parent->selected_subtitle (); shared_ptr fcs; if (fc.size() == 1) { @@ -130,8 +134,8 @@ SubtitlePanel::film_content_changed (int property) } } setup_sensitivity (); - } else if (property == SubtitleContentProperty::SUBTITLE_USE) { - checked_set (_use, scs ? scs->subtitle_use() : false); + } else if (property == SubtitleContentProperty::USE_SUBTITLES) { + checked_set (_use, scs ? scs->use_subtitles() : false); setup_sensitivity (); } else if (property == SubtitleContentProperty::SUBTITLE_X_OFFSET) { checked_set (_x_offset, scs ? (scs->subtitle_x_offset() * 100) : 0); @@ -145,9 +149,9 @@ SubtitlePanel::film_content_changed (int property) void SubtitlePanel::use_toggled () { - SubtitleContentList c = _editor->selected_subtitle_content (); + SubtitleContentList c = _parent->selected_subtitle (); for (SubtitleContentList::iterator i = c.begin(); i != c.end(); ++i) { - (*i)->set_subtitle_use (_use->GetValue()); + (*i)->set_use_subtitles (_use->GetValue()); } } @@ -156,18 +160,19 @@ SubtitlePanel::setup_sensitivity () { int any_subs = 0; int ffmpeg_subs = 0; - int subrip_subs = 0; - SubtitleContentList c = _editor->selected_subtitle_content (); + int subrip_or_dcp_subs = 0; + SubtitleContentList c = _parent->selected_subtitle (); for (SubtitleContentList::const_iterator i = c.begin(); i != c.end(); ++i) { shared_ptr fc = boost::dynamic_pointer_cast (*i); shared_ptr sc = boost::dynamic_pointer_cast (*i); + shared_ptr dsc = boost::dynamic_pointer_cast (*i); if (fc) { - if (!fc->subtitle_streams().empty ()) { + if (fc->has_subtitles ()) { ++ffmpeg_subs; ++any_subs; } - } else if (sc) { - ++subrip_subs; + } else if (sc || dsc) { + ++subrip_or_dcp_subs; ++any_subs; } else { ++any_subs; @@ -181,13 +186,13 @@ SubtitlePanel::setup_sensitivity () _y_offset->Enable (any_subs > 0 && use); _scale->Enable (any_subs > 0 && use); _stream->Enable (ffmpeg_subs == 1); - _view_button->Enable (subrip_subs == 1); + _view_button->Enable (subrip_or_dcp_subs == 1); } void SubtitlePanel::stream_changed () { - FFmpegContentList fc = _editor->selected_ffmpeg_content (); + FFmpegContentList fc = _parent->selected_ffmpeg (); if (fc.size() != 1) { return; } @@ -209,7 +214,7 @@ SubtitlePanel::stream_changed () void SubtitlePanel::x_offset_changed () { - SubtitleContentList c = _editor->selected_subtitle_content (); + SubtitleContentList c = _parent->selected_subtitle (); for (SubtitleContentList::iterator i = c.begin(); i != c.end(); ++i) { (*i)->set_subtitle_x_offset (_x_offset->GetValue() / 100.0); } @@ -218,7 +223,7 @@ SubtitlePanel::x_offset_changed () void SubtitlePanel::y_offset_changed () { - SubtitleContentList c = _editor->selected_subtitle_content (); + SubtitleContentList c = _parent->selected_subtitle (); for (SubtitleContentList::iterator i = c.begin(); i != c.end(); ++i) { (*i)->set_subtitle_y_offset (_y_offset->GetValue() / 100.0); } @@ -227,7 +232,7 @@ SubtitlePanel::y_offset_changed () void SubtitlePanel::scale_changed () { - SubtitleContentList c = _editor->selected_subtitle_content (); + SubtitleContentList c = _parent->selected_subtitle (); for (SubtitleContentList::iterator i = c.begin(); i != c.end(); ++i) { (*i)->set_subtitle_scale (_scale->GetValue() / 100.0); } @@ -237,7 +242,7 @@ void SubtitlePanel::content_selection_changed () { film_content_changed (FFmpegContentProperty::SUBTITLE_STREAMS); - film_content_changed (SubtitleContentProperty::SUBTITLE_USE); + film_content_changed (SubtitleContentProperty::USE_SUBTITLES); film_content_changed (SubtitleContentProperty::SUBTITLE_X_OFFSET); film_content_changed (SubtitleContentProperty::SUBTITLE_Y_OFFSET); film_content_changed (SubtitleContentProperty::SUBTITLE_SCALE); @@ -251,11 +256,23 @@ SubtitlePanel::view_clicked () _view = 0; } - SubtitleContentList c = _editor->selected_subtitle_content (); + SubtitleContentList c = _parent->selected_subtitle (); assert (c.size() == 1); + + shared_ptr decoder; + shared_ptr sr = dynamic_pointer_cast (c.front ()); if (sr) { - _view = new SubtitleView (this, _editor->film(), sr); + decoder.reset (new SubRipDecoder (sr)); + } + + shared_ptr dc = dynamic_pointer_cast (c.front ()); + if (dc) { + decoder.reset (new DCPSubtitleDecoder (dc)); + } + + if (decoder) { + _view = new SubtitleView (this, _parent->film(), decoder, c.front()->position ()); _view->Show (); } }