+
+
+/** The user has clicked on the outline subtitles check box */
+void
+TextPanel::outline_subtitles_changed ()
+{
+ if (_outline_subtitles->GetValue()) {
+ _analysis_content = _parent->selected_text().front();
+ try_to_load_analysis ();
+ } else {
+ clear_outline_subtitles ();
+ }
+}
+
+
+void
+TextPanel::try_to_load_analysis ()
+{
+ if (_loading_analysis) {
+ return;
+ }
+
+ _loading_analysis = true;
+ setup_sensitivity ();
+ _analysis.reset ();
+
+ auto content = _analysis_content.lock ();
+ if (!content) {
+ _loading_analysis = false;
+ setup_sensitivity ();
+ return;
+ }
+
+ auto const path = _parent->film()->subtitle_analysis_path(content);
+
+ if (!boost::filesystem::exists(path)) {
+ for (auto i: JobManager::instance()->get()) {
+ if (dynamic_pointer_cast<AnalyseSubtitlesJob>(i)) {
+ i->cancel ();
+ }
+ }
+
+ JobManager::instance()->analyse_subtitles (
+ _parent->film(), content, _analysis_finished_connection, bind(&TextPanel::analysis_finished, this)
+ );
+ return;
+ }
+
+ try {
+ _analysis.reset (new SubtitleAnalysis(path));
+ } catch (OldFormatError& e) {
+ /* An old analysis file: recreate it */
+ JobManager::instance()->analyse_subtitles (
+ _parent->film(), content, _analysis_finished_connection, bind(&TextPanel::analysis_finished, this)
+ );
+ return;
+ }
+
+ update_outline_subtitles_in_viewer ();
+ _loading_analysis = false;
+ setup_sensitivity ();
+}
+
+
+void
+TextPanel::update_outline_subtitles_in_viewer ()
+{
+ auto fv = _parent->film_viewer().lock();
+ if (!fv) {
+ return;
+ }
+
+ if (_analysis) {
+ auto rect = _analysis->bounding_box ();
+ if (rect) {
+ auto content = _analysis_content.lock ();
+ DCPOMATIC_ASSERT (content);
+ rect->x += content->text.front()->x_offset();
+ rect->y += content->text.front()->y_offset();
+ }
+ fv->set_outline_subtitles (rect);
+ } else {
+ fv->set_outline_subtitles (optional<dcpomatic::Rect<double> >());
+ }
+}
+
+
+/** Remove any current subtitle outline display */
+void
+TextPanel::clear_outline_subtitles ()
+{
+ _analysis.reset ();
+ update_outline_subtitles_in_viewer ();
+ if (_outline_subtitles) {
+ _outline_subtitles->SetValue (false);
+ }
+}
+
+
+void
+TextPanel::analysis_finished ()
+{
+ auto content = _analysis_content.lock ();
+ if (!content) {
+ _loading_analysis = false;
+ setup_sensitivity ();
+ return;
+ }
+
+ if (!boost::filesystem::exists(_parent->film()->subtitle_analysis_path(content))) {
+ /* We analysed and still nothing showed up, so maybe it was cancelled or it failed.
+ Give up.
+ */
+ error_dialog (_parent->window(), _("Could not analyse subtitles."));
+ clear_outline_subtitles ();
+ _loading_analysis = false;
+ setup_sensitivity ();
+ return;
+ }
+
+ _loading_analysis = false;
+ try_to_load_analysis ();
+}
+
+
+void
+TextPanel::language_changed ()
+{
+ for (auto i: _parent->selected_text()) {
+ auto t = i->text_of_original_type(_original_type);
+ if (t) {
+ t->set_language (_language->get());
+ }
+ }
+}
+
+
+void
+TextPanel::language_is_additional_changed ()
+{
+ for (auto i: _parent->selected_text()) {
+ auto t = i->text_of_original_type(_original_type);
+ if (t) {
+ t->set_language_is_additional (_language_type->GetSelection() == 1);
+ }
+ }
+}
+