*/
+
#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");
}
_burn = new CheckBox (this, _("Burn subtitles into image"));
-#ifdef __WXGTK3__
- int const spin_width = 118;
-#else
- int const spin_width = 56;
-#endif
-
_offset_label = create_label (this, _("Offset"), true);
_x_offset_label = create_label (this, _("X"), true);
- _x_offset = new SpinCtrl (this, spin_width);
+ _x_offset = new SpinCtrl (this, DCPOMATIC_SPIN_CTRL_WIDTH);
_x_offset_pc_label = new StaticText (this, _("%"));
_y_offset_label = create_label (this, _("Y"), true);
- _y_offset = new SpinCtrl (this, spin_width);
+ _y_offset = new SpinCtrl (this, DCPOMATIC_SPIN_CTRL_WIDTH);
_y_offset_pc_label = new StaticText (this, _("%"));
_scale_label = create_label (this, _("Scale"), true);
_x_scale_label = create_label (this, _("X"), true);
- _x_scale = new SpinCtrl (this, spin_width);
+ _x_scale = new SpinCtrl (this, DCPOMATIC_SPIN_CTRL_WIDTH);
_x_scale_pc_label = new StaticText (this, _("%"));
_y_scale_label = create_label (this, S_("Coord|Y"), true);
- _y_scale = new SpinCtrl (this, spin_width);
+ _y_scale = new SpinCtrl (this, DCPOMATIC_SPIN_CTRL_WIDTH);
_y_scale_pc_label = new StaticText (this, _("%"));
_line_spacing_label = create_label (this, _("Line spacing"), true);
- _line_spacing = new SpinCtrl (this, spin_width);
+ _line_spacing = new SpinCtrl (this, DCPOMATIC_SPIN_CTRL_WIDTH);
_line_spacing_pc_label = new StaticText (this, _("%"));
_stream_label = create_label (this, _("Stream"), true);
_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));
add_to_grid();
content_selection_changed ();
+
+ _sizer->Layout ();
}
}
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) {
_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);
{
auto s = new wxBoxSizer (wxHORIZONTAL);
- s->Add (_text_view_button, 1, wxALL, DCPOMATIC_SIZER_GAP);
- s->Add (_fonts_dialog_button, 1, wxALL, DCPOMATIC_SIZER_GAP);
- s->Add (_appearance_dialog_button, 1, wxALL, DCPOMATIC_SIZER_GAP);
+ s->Add (_text_view_button, 0, wxALL, DCPOMATIC_SIZER_GAP);
+ s->Add (_fonts_dialog_button, 0, wxALL, DCPOMATIC_SIZER_GAP);
+ s->Add (_appearance_dialog_button, 0, wxALL, DCPOMATIC_SIZER_GAP);
_grid->Add (s, wxGBPosition(r, 0), wxGBSpan(1, 2));
++r;
/* XXX: don't display the "magic" track which has empty name and language;
this is a nasty hack (see also Film::closed_caption_tracks)
*/
- if (!i.name.empty() || !i.language.empty()) {
+ if (!i.name.empty() || i.language) {
_dcp_track->Append (std_to_wx(i.summary()));
}
}
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()) {
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({});
}
}