Use more ScopeGuards.
[dcpomatic.git] / src / wx / text_panel.cc
index ebeb518ddb2e1f2d15e2e9483aad74fcab2aae39..8e7d4434e7958604b10d040d91e939c36336e503 100644 (file)
@@ -18,6 +18,7 @@
 
 */
 
+
 #include "check_box.h"
 #include "content_panel.h"
 #include "dcp_text_track_dialog.h"
 #include "lib/ffmpeg_content.h"
 #include "lib/ffmpeg_subtitle_stream.h"
 #include "lib/job_manager.h"
+#include "lib/scope_guard.h"
 #include "lib/string_text_file_content.h"
 #include "lib/string_text_file_decoder.h"
 #include "lib/subtitle_analysis.h"
 #include "lib/text_content.h"
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
 #include <wx/spinctrl.h>
+LIBDCP_ENABLE_WARNINGS
 
 
-using std::vector;
-using std::string;
-using std::list;
 using std::cout;
-using std::shared_ptr;
-using boost::optional;
 using std::dynamic_pointer_cast;
+using std::list;
+using std::shared_ptr;
+using std::string;
+using std::vector;
 using boost::bind;
+using boost::optional;
 
 
 /** @param t Original text type of the content, if known */
 TextPanel::TextPanel (ContentPanel* p, TextType t)
        : ContentSubPanel (p, std_to_wx(text_type_to_name(t)))
        , _original_type (t)
+{
+
+}
+
+
+void
+TextPanel::create ()
 {
        wxString refer = _("Use this DCP's subtitle as OV and make VF");
-       if (t == TextType::CLOSED_CAPTION) {
+       if (_original_type == TextType::CLOSED_CAPTION) {
                refer = _("Use this DCP's closed caption as OV and make VF");
        }
 
@@ -115,10 +127,10 @@ TextPanel::TextPanel (ContentPanel* p, TextType t)
        _y_scale->SetRange (0, 1000);
        _line_spacing->SetRange (0, 1000);
 
-       _reference->Bind                (wxEVT_CHECKBOX, boost::bind (&TextPanel::reference_clicked, this));
-       _use->Bind                      (wxEVT_CHECKBOX, boost::bind (&TextPanel::use_toggled, this));
+       _reference->bind(&TextPanel::reference_clicked, this);
+       _use->bind(&TextPanel::use_toggled, this);
        _type->Bind                     (wxEVT_CHOICE,   boost::bind (&TextPanel::type_changed, this));
-       _burn->Bind                     (wxEVT_CHECKBOX, boost::bind (&TextPanel::burn_toggled, this));
+       _burn->bind(&TextPanel::burn_toggled, this);
        _x_offset->Bind                 (wxEVT_SPINCTRL, boost::bind (&TextPanel::x_offset_changed, this));
        _y_offset->Bind                 (wxEVT_SPINCTRL, boost::bind (&TextPanel::y_offset_changed, this));
        _x_scale->Bind                  (wxEVT_SPINCTRL, boost::bind (&TextPanel::x_scale_changed, this));
@@ -131,6 +143,8 @@ TextPanel::TextPanel (ContentPanel* p, TextType t)
 
        add_to_grid();
        content_selection_changed ();
+
+       _sizer->Layout ();
 }
 
 
@@ -149,7 +163,7 @@ TextPanel::setup_visibility ()
                }
                if (!_outline_subtitles) {
                        _outline_subtitles = new CheckBox (this, _("Show subtitle area"));
-                       _outline_subtitles->Bind (wxEVT_CHECKBOX, boost::bind (&TextPanel::outline_subtitles_changed, this));
+                       _outline_subtitles->bind(&TextPanel::outline_subtitles_changed, this);
                        _grid->Add (_outline_subtitles, wxGBPosition(_outline_subtitles_row, 0), wxGBSpan(1, 2));
                }
                if (!_language) {
@@ -165,7 +179,7 @@ TextPanel::setup_visibility ()
                        _language_type->Append (_("Main"));
                        _language_type->Append (_("Additional"));
                        _language_type->Bind (wxEVT_CHOICE, boost::bind(&TextPanel::language_is_additional_changed, this));
-                       _language_sizer->Add (_language_type, 0);
+                       _language_sizer->Add (_language_type, 0, wxALIGN_CENTER_VERTICAL | wxTOP, DCPOMATIC_CHOICE_TOP_PAD);
                        _grid->Add (_language_sizer, wxGBPosition(_ccap_track_or_language_row, 1), wxGBSpan(1, 2));
                        film_content_changed (TextContentProperty::LANGUAGE);
                        film_content_changed (TextContentProperty::LANGUAGE_IS_ADDITIONAL);
@@ -357,10 +371,10 @@ TextPanel::dcp_track_changed ()
 
        if (_dcp_track->GetSelection() == int(_dcp_track->GetCount()) - 1) {
                auto d = new DCPTextTrackDialog (this);
+               ScopeGuard sg = [d]() { d->Destroy(); };
                if (d->ShowModal() == wxID_OK) {
                        track = d->get();
                }
-               d->Destroy ();
        } else {
                /* Find the DCPTextTrack that was selected */
                for (auto i: _parent->film()->closed_caption_tracks()) {
@@ -850,22 +864,19 @@ TextPanel::try_to_load_analysis ()
 void
 TextPanel::update_outline_subtitles_in_viewer ()
 {
-       auto fv = _parent->film_viewer().lock();
-       if (!fv) {
-               return;
-       }
+       auto& fv = _parent->film_viewer();
 
        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();
+                       rect->x += content->text.front()->x_offset() - _analysis->analysis_x_offset();
+                       rect->y += content->text.front()->y_offset() - _analysis->analysis_y_offset();
                }
-               fv->set_outline_subtitles (rect);
+               fv.set_outline_subtitles(rect);
        } else {
-               fv->set_outline_subtitles (optional<dcpomatic::Rect<double> >());
+               fv.set_outline_subtitles({});
        }
 }