X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fdcp_panel.cc;h=f4ba74cdefbbcefd433379a26698af0bac33f9c5;hb=HEAD;hp=895aed9c9cc98e36b47eb5ecc9e1665d2c309d3e;hpb=c3802179cb922adc58232dcd5a29fc3962494293;p=dcpomatic.git diff --git a/src/wx/dcp_panel.cc b/src/wx/dcp_panel.cc index 895aed9c9..f4ba74cde 100644 --- a/src/wx/dcp_panel.cc +++ b/src/wx/dcp_panel.cc @@ -24,6 +24,7 @@ #include "check_box.h" #include "dcp_panel.h" #include "dcpomatic_button.h" +#include "dcpomatic_choice.h" #include "dcpomatic_spin_ctrl.h" #include "focus_manager.h" #include "interop_metadata_dialog.h" @@ -69,7 +70,7 @@ using namespace boost::placeholders; using dcp::locale_convert; -DCPPanel::DCPPanel (wxNotebook* n, shared_ptr film, weak_ptr viewer) +DCPPanel::DCPPanel(wxNotebook* n, shared_ptr film, FilmViewer& viewer) : _film (film) , _viewer (viewer) , _generally_sensitive (true) @@ -96,12 +97,12 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr film, weak_ptr v wxALIGN_CENTRE_HORIZONTAL | wxST_NO_AUTORESIZE | wxST_ELLIPSIZE_MIDDLE ); - _enable_audio_language = new wxCheckBox (_panel, wxID_ANY, _("Audio language")); + _enable_audio_language = new CheckBox(_panel, _("Audio language")); _audio_language = new wxStaticText (_panel, wxID_ANY, wxT("")); _edit_audio_language = new Button (_panel, _("Edit...")); _dcp_content_type_label = create_label (_panel, _("Content Type"), true); - _dcp_content_type = new wxChoice (_panel, wxID_ANY); + _dcp_content_type = new Choice(_panel); _encrypted = new CheckBox (_panel, _("Encrypted")); @@ -110,14 +111,14 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr film, weak_ptr v size.SetHeight (-1); _reels_label = create_label (_panel, _("Reels"), true); - _reel_type = new wxChoice (_panel, wxID_ANY); + _reel_type = new Choice(_panel); _reel_length_label = create_label (_panel, _("Reel length"), true); _reel_length = new SpinCtrl (_panel, DCPOMATIC_SPIN_CTRL_WIDTH); _reel_length_gb_label = create_label (_panel, _("GB"), false); _standard_label = create_label (_panel, _("Standard"), true); - _standard = new wxChoice (_panel, wxID_ANY); + _standard = new Choice(_panel); _markers = new Button (_panel, _("Markers...")); _metadata = new Button (_panel, _("Metadata...")); @@ -129,37 +130,90 @@ DCPPanel::DCPPanel (wxNotebook* n, shared_ptr film, weak_ptr v _notebook->AddPage (make_audio_panel (), _("Audio"), false); _name->Bind (wxEVT_TEXT, boost::bind(&DCPPanel::name_changed, this)); - _use_isdcf_name->Bind (wxEVT_CHECKBOX, boost::bind(&DCPPanel::use_isdcf_name_toggled, this)); + _use_isdcf_name->bind(&DCPPanel::use_isdcf_name_toggled, this); _copy_isdcf_name_button->Bind(wxEVT_BUTTON, boost::bind(&DCPPanel::copy_isdcf_name_button_clicked, this)); _dcp_content_type->Bind (wxEVT_CHOICE, boost::bind(&DCPPanel::dcp_content_type_changed, this)); - _encrypted->Bind (wxEVT_CHECKBOX, boost::bind(&DCPPanel::encrypted_toggled, this)); + _encrypted->bind(&DCPPanel::encrypted_toggled, this); _reel_type->Bind (wxEVT_CHOICE, boost::bind(&DCPPanel::reel_type_changed, this)); _reel_length->Bind (wxEVT_SPINCTRL, boost::bind(&DCPPanel::reel_length_changed, this)); _standard->Bind (wxEVT_CHOICE, boost::bind(&DCPPanel::standard_changed, this)); _markers->Bind (wxEVT_BUTTON, boost::bind(&DCPPanel::markers_clicked, this)); _metadata->Bind (wxEVT_BUTTON, boost::bind(&DCPPanel::metadata_clicked, this)); - _enable_audio_language->Bind (wxEVT_CHECKBOX, boost::bind(&DCPPanel::enable_audio_language_toggled, this)); + _enable_audio_language->bind(&DCPPanel::enable_audio_language_toggled, this); _edit_audio_language->Bind (wxEVT_BUTTON, boost::bind(&DCPPanel::edit_audio_language_clicked, this)); for (auto i: DCPContentType::all()) { - _dcp_content_type->Append (std_to_wx(i->pretty_name())); + _dcp_content_type->add(i->pretty_name()); } - _reel_type->Append (_("Single reel")); - _reel_type->Append (_("Split by video content")); + _reel_type->add(_("Single reel")); + _reel_type->add(_("Split by video content")); /// TRANSLATORS: translate the word "Custom" here; do not include the "Reel|" prefix - _reel_type->Append (S_("Reel|Custom")); + _reel_type->add(S_("Reel|Custom")); + _reel_type->SetToolTip(_("How the DCP should be split into parts internally. If in doubt, choose 'Single reel'")); _reel_length->SetRange (1, 64); - _standard->Append (_("SMPTE")); - _standard->Append (_("Interop")); + add_standards(); + _standard->SetToolTip(_("Which standard the DCP should use. Interop is older and SMPTE is the modern standard. If in doubt, choose 'SMPTE'")); Config::instance()->Changed.connect (boost::bind(&DCPPanel::config_changed, this, _1)); add_to_grid (); } + +void +DCPPanel::add_standards() +{ + _standard->add(_("SMPTE"), N_("smpte")); + if (Config::instance()->allow_smpte_bv20() || (_film && _film->limit_to_smpte_bv20())) { + _standard->add(_("SMPTE (Bv2.0 only)"), N_("smpte-bv20")); + } + _standard->add(_("Interop"), N_("interop")); + _sizer->Layout(); +} + + +void +DCPPanel::set_standard() +{ + DCPOMATIC_ASSERT(_film); + DCPOMATIC_ASSERT(!_film->limit_to_smpte_bv20() || _standard->GetCount() == 3); + + if (_film->interop()) { + checked_set(_standard, "interop"); + } else { + checked_set(_standard, _film->limit_to_smpte_bv20() ? "smpte-bv20" : "smpte"); + } +} + + +void +DCPPanel::standard_changed () +{ + if (!_film || !_standard->get()) { + return; + } + + auto const data = _standard->get_data(); + if (!data) { + return; + } + + if (*data == N_("interop")) { + _film->set_interop(true); + _film->set_limit_to_smpte_bv20(false); + } else if (*data == N_("smpte")) { + _film->set_interop(false); + _film->set_limit_to_smpte_bv20(false); + } else if (*data == N_("smpte-bv20")) { + _film->set_interop(false); + _film->set_limit_to_smpte_bv20(true); + } +} + + void DCPPanel::add_to_grid () { @@ -265,13 +319,13 @@ DCPPanel::encrypted_toggled () void DCPPanel::frame_rate_choice_changed () { - if (!_film) { + if (!_film || !_frame_rate_choice->get()) { return; } _film->set_video_frame_rate ( boost::lexical_cast( - wx_to_std(_frame_rate_choice->GetString(_frame_rate_choice->GetSelection())) + wx_to_std(_frame_rate_choice->GetString(*_frame_rate_choice->get())) ), true ); @@ -297,41 +351,25 @@ DCPPanel::audio_channels_changed () return; } - _film->set_audio_channels (locale_convert(string_client_data(_audio_channels->GetClientObject(_audio_channels->GetSelection())))); + _film->set_audio_channels(locale_convert(string_client_data(_audio_channels->GetClientObject(*_audio_channels->get())))); } void DCPPanel::resolution_changed () { - if (!_film) { + if (!_film || !_resolution->get()) { return; } - _film->set_resolution (_resolution->GetSelection() == 0 ? Resolution::TWO_K : Resolution::FOUR_K); + _film->set_resolution(*_resolution->get() == 0 ? Resolution::TWO_K : Resolution::FOUR_K); } -void -DCPPanel::standard_changed () -{ - if (!_film) { - return; - } - - _film->set_interop (_standard->GetSelection() == 1); - -} - void DCPPanel::markers_clicked () { - if (_markers_dialog) { - _markers_dialog->Destroy (); - _markers_dialog = nullptr; - } - - _markers_dialog = new MarkersDialog (_panel, _film, _viewer); + _markers_dialog.reset(_panel, _film, _viewer); _markers_dialog->Show(); } @@ -340,21 +378,11 @@ void DCPPanel::metadata_clicked () { if (_film->interop()) { - if (_interop_metadata_dialog) { - _interop_metadata_dialog->Destroy (); - _interop_metadata_dialog = nullptr; - } - - _interop_metadata_dialog = new InteropMetadataDialog (_panel, _film); + _interop_metadata_dialog.reset(_panel, _film); _interop_metadata_dialog->setup (); _interop_metadata_dialog->Show (); } else { - if (_smpte_metadata_dialog) { - _smpte_metadata_dialog->Destroy (); - _smpte_metadata_dialog = nullptr; - } - - _smpte_metadata_dialog = new SMPTEMetadataDialog (_panel, _film); + _smpte_metadata_dialog.reset(_panel, _film); _smpte_metadata_dialog->setup (); _smpte_metadata_dialog->Show (); } @@ -362,19 +390,19 @@ DCPPanel::metadata_clicked () void -DCPPanel::film_changed (Film::Property p) +DCPPanel::film_changed(FilmProperty p) { switch (p) { - case Film::Property::NONE: + case FilmProperty::NONE: break; - case Film::Property::CONTAINER: + case FilmProperty::CONTAINER: setup_container (); break; - case Film::Property::NAME: + case FilmProperty::NAME: checked_set (_name, _film->name()); setup_dcp_name (); break; - case Film::Property::DCP_CONTENT_TYPE: + case FilmProperty::DCP_CONTENT_TYPE: { auto index = DCPContentType::as_index(_film->dcp_content_type()); DCPOMATIC_ASSERT (index); @@ -382,18 +410,18 @@ DCPPanel::film_changed (Film::Property p) setup_dcp_name (); break; } - case Film::Property::ENCRYPTED: + case FilmProperty::ENCRYPTED: checked_set (_encrypted, _film->encrypted ()); break; - case Film::Property::RESOLUTION: + case FilmProperty::RESOLUTION: checked_set (_resolution, _film->resolution() == Resolution::TWO_K ? 0 : 1); setup_container (); setup_dcp_name (); break; - case Film::Property::J2K_BANDWIDTH: + case FilmProperty::J2K_BANDWIDTH: checked_set (_j2k_bandwidth, _film->j2k_bandwidth() / 1000000); break; - case Film::Property::USE_ISDCF_NAME: + case FilmProperty::USE_ISDCF_NAME: { checked_set (_use_isdcf_name, _film->use_isdcf_name()); if (_film->use_isdcf_name()) { @@ -409,7 +437,7 @@ DCPPanel::film_changed (Film::Property p) setup_dcp_name (); break; } - case Film::Property::VIDEO_FRAME_RATE: + case FilmProperty::VIDEO_FRAME_RATE: { bool done = false; for (unsigned int i = 0; i < _frame_rate_choice->GetCount(); ++i) { @@ -430,7 +458,7 @@ DCPPanel::film_changed (Film::Property p) setup_dcp_name (); break; } - case Film::Property::AUDIO_CHANNELS: + case FilmProperty::AUDIO_CHANNELS: if (_film->audio_channels() < minimum_allowed_audio_channels()) { _film->set_audio_channels (minimum_allowed_audio_channels()); } else { @@ -438,39 +466,45 @@ DCPPanel::film_changed (Film::Property p) setup_dcp_name (); } break; - case Film::Property::THREE_D: + case FilmProperty::THREE_D: checked_set (_three_d, _film->three_d()); setup_dcp_name (); break; - case Film::Property::REENCODE_J2K: + case FilmProperty::REENCODE_J2K: checked_set (_reencode_j2k, _film->reencode_j2k()); break; - case Film::Property::INTEROP: - checked_set (_standard, _film->interop() ? 1 : 0); + case FilmProperty::INTEROP: + set_standard(); setup_dcp_name (); _markers->Enable (!_film->interop()); break; - case Film::Property::AUDIO_PROCESSOR: + case FilmProperty::LIMIT_TO_SMPTE_BV20: + set_standard(); + break; + case FilmProperty::AUDIO_PROCESSOR: if (_film->audio_processor()) { checked_set (_audio_processor, _film->audio_processor()->id()); } else { checked_set (_audio_processor, 0); } setup_audio_channels_choice (_audio_channels, minimum_allowed_audio_channels()); - film_changed (Film::Property::AUDIO_CHANNELS); + film_changed (FilmProperty::AUDIO_CHANNELS); break; - case Film::Property::REEL_TYPE: + case FilmProperty::REEL_TYPE: checked_set (_reel_type, static_cast(_film->reel_type())); _reel_length->Enable (_film->reel_type() == ReelType::BY_LENGTH); break; - case Film::Property::REEL_LENGTH: + case FilmProperty::REEL_LENGTH: checked_set (_reel_length, _film->reel_length() / 1000000000LL); break; - case Film::Property::CONTENT: + case FilmProperty::CONTENT: setup_dcp_name (); setup_sensitivity (); + /* Maybe we now have ATMOS content which changes our minimum_allowed_audio_channels */ + setup_audio_channels_choice(_audio_channels, minimum_allowed_audio_channels()); + film_changed(FilmProperty::AUDIO_CHANNELS); break; - case Film::Property::AUDIO_LANGUAGE: + case FilmProperty::AUDIO_LANGUAGE: { auto al = _film->audio_language(); checked_set (_enable_audio_language, static_cast(al)); @@ -479,23 +513,24 @@ DCPPanel::film_changed (Film::Property p) setup_sensitivity (); break; } - case Film::Property::AUDIO_FRAME_RATE: + case FilmProperty::AUDIO_FRAME_RATE: if (_audio_sample_rate) { checked_set (_audio_sample_rate, _film->audio_frame_rate() == 48000 ? 0 : 1); } break; - case Film::Property::CONTENT_VERSIONS: - case Film::Property::VERSION_NUMBER: - case Film::Property::RELEASE_TERRITORY: - case Film::Property::RATINGS: - case Film::Property::FACILITY: - case Film::Property::STUDIO: - case Film::Property::TEMP_VERSION: - case Film::Property::PRE_RELEASE: - case Film::Property::RED_BAND: - case Film::Property::TWO_D_VERSION_OF_THREE_D: - case Film::Property::CHAIN: - case Film::Property::LUMINANCE: + case FilmProperty::CONTENT_VERSIONS: + case FilmProperty::VERSION_NUMBER: + case FilmProperty::RELEASE_TERRITORY: + case FilmProperty::RATINGS: + case FilmProperty::FACILITY: + case FilmProperty::STUDIO: + case FilmProperty::TEMP_VERSION: + case FilmProperty::PRE_RELEASE: + case FilmProperty::RED_BAND: + case FilmProperty::TWO_D_VERSION_OF_THREE_D: + case FilmProperty::CHAIN: + case FilmProperty::LUMINANCE: + case FilmProperty::TERRITORY_TYPE: setup_dcp_name (); break; default: @@ -512,6 +547,8 @@ DCPPanel::film_content_changed (int property) property == TextContentProperty::BURN || property == TextContentProperty::LANGUAGE || property == TextContentProperty::LANGUAGE_IS_ADDITIONAL || + property == TextContentProperty::TYPE || + property == TextContentProperty::DCP_TRACK || property == VideoContentProperty::CUSTOM_RATIO || property == VideoContentProperty::CUSTOM_SIZE || property == VideoContentProperty::BURNT_SUBTITLE_LANGUAGE || @@ -557,11 +594,10 @@ DCPPanel::container_changed () return; } - int const n = _container->GetSelection (); - if (n >= 0) { + if (auto const container = _container->get()) { auto ratios = Ratio::containers (); - DCPOMATIC_ASSERT (n < int(ratios.size())); - _film->set_container (ratios[n]); + DCPOMATIC_ASSERT(*container < int(ratios.size())); + _film->set_container(ratios[*container]); } } @@ -574,9 +610,8 @@ DCPPanel::dcp_content_type_changed () return; } - int const n = _dcp_content_type->GetSelection (); - if (n != wxNOT_FOUND) { - _film->set_dcp_content_type (DCPContentType::from_index(n)); + if (auto const type = _dcp_content_type->get()) { + _film->set_dcp_content_type(DCPContentType::from_index(*type)); } } @@ -585,22 +620,10 @@ void DCPPanel::set_film (shared_ptr film) { /* We are changing film, so destroy any dialogs for the old one */ - if (_audio_dialog) { - _audio_dialog->Destroy (); - _audio_dialog = nullptr; - } - if (_markers_dialog) { - _markers_dialog->Destroy (); - _markers_dialog = nullptr; - } - if (_interop_metadata_dialog) { - _interop_metadata_dialog->Destroy (); - _interop_metadata_dialog = nullptr; - } - if (_smpte_metadata_dialog) { - _smpte_metadata_dialog->Destroy (); - _smpte_metadata_dialog = nullptr; - } + _audio_dialog.reset(); + _markers_dialog.reset(); + _interop_metadata_dialog.reset(); + _smpte_metadata_dialog.reset(); _film = film; @@ -611,25 +634,29 @@ DCPPanel::set_film (shared_ptr film) return; } - film_changed (Film::Property::NAME); - film_changed (Film::Property::USE_ISDCF_NAME); - film_changed (Film::Property::CONTENT); - film_changed (Film::Property::DCP_CONTENT_TYPE); - film_changed (Film::Property::CONTAINER); - film_changed (Film::Property::RESOLUTION); - film_changed (Film::Property::ENCRYPTED); - film_changed (Film::Property::J2K_BANDWIDTH); - film_changed (Film::Property::VIDEO_FRAME_RATE); - film_changed (Film::Property::AUDIO_CHANNELS); - film_changed (Film::Property::SEQUENCE); - film_changed (Film::Property::THREE_D); - film_changed (Film::Property::INTEROP); - film_changed (Film::Property::AUDIO_PROCESSOR); - film_changed (Film::Property::REEL_TYPE); - film_changed (Film::Property::REEL_LENGTH); - film_changed (Film::Property::REENCODE_J2K); - film_changed (Film::Property::AUDIO_LANGUAGE); - film_changed (Film::Property::AUDIO_FRAME_RATE); + _standard->Clear(); + add_standards(); + + film_changed(FilmProperty::NAME); + film_changed(FilmProperty::USE_ISDCF_NAME); + film_changed(FilmProperty::CONTENT); + film_changed(FilmProperty::DCP_CONTENT_TYPE); + film_changed(FilmProperty::CONTAINER); + film_changed(FilmProperty::RESOLUTION); + film_changed(FilmProperty::ENCRYPTED); + film_changed(FilmProperty::J2K_BANDWIDTH); + film_changed(FilmProperty::VIDEO_FRAME_RATE); + film_changed(FilmProperty::AUDIO_CHANNELS); + film_changed(FilmProperty::SEQUENCE); + film_changed(FilmProperty::THREE_D); + film_changed(FilmProperty::INTEROP); + film_changed(FilmProperty::AUDIO_PROCESSOR); + film_changed(FilmProperty::REEL_TYPE); + film_changed(FilmProperty::REEL_LENGTH); + film_changed(FilmProperty::REENCODE_J2K); + film_changed(FilmProperty::AUDIO_LANGUAGE); + film_changed(FilmProperty::AUDIO_FRAME_RATE); + film_changed(FilmProperty::LIMIT_TO_SMPTE_BV20); set_general_sensitivity(static_cast(_film)); } @@ -660,7 +687,7 @@ DCPPanel::setup_sensitivity () _metadata->Enable (_generally_sensitive); _frame_rate_choice->Enable (_generally_sensitive && _film && !_film->references_dcp_video() && !_film->contains_atmos_content()); _frame_rate_spin->Enable (_generally_sensitive && _film && !_film->references_dcp_video() && !_film->contains_atmos_content()); - _audio_channels->Enable (_generally_sensitive && _film && !_film->references_dcp_audio() && !_film->contains_atmos_content()); + _audio_channels->Enable (_generally_sensitive && _film && !_film->references_dcp_audio()); _audio_processor->Enable (_generally_sensitive && _film && !_film->references_dcp_audio()); _j2k_bandwidth->Enable (_generally_sensitive && _film && !_film->references_dcp_video()); _container->Enable (_generally_sensitive && _film && !_film->references_dcp_video()); @@ -700,6 +727,10 @@ DCPPanel::use_isdcf_name_toggled () void DCPPanel::setup_dcp_name () { + if (!_film) { + return; + } + _dcp_name->SetLabel (std_to_wx(_film->dcp_name(true))); _dcp_name->SetToolTip (std_to_wx(_film->dcp_name(true))); } @@ -748,8 +779,17 @@ DCPPanel::config_changed (Config::Property p) _audio_processor->Clear (); add_audio_processors (); if (_film) { - film_changed (Film::Property::AUDIO_PROCESSOR); + film_changed(FilmProperty::AUDIO_PROCESSOR); + } + } else if (p == Config::ALLOW_SMPTE_BV20) { + _standard->Clear(); + add_standards(); + if (_film) { + film_changed(FilmProperty::INTEROP); + film_changed(FilmProperty::LIMIT_TO_SMPTE_BV20); } + } else if (p == Config::ISDCF_NAME_PART_LENGTH) { + setup_dcp_name(); } } @@ -764,6 +804,7 @@ DCPPanel::setup_frame_rate_widget () _frame_rate_choice->Show (); _frame_rate_spin->Hide (); } + _frame_rate_sizer->Layout(); } @@ -777,16 +818,15 @@ DCPPanel::make_video_panel () panel->SetSizer (sizer); _container_label = create_label (panel, _("Container"), true); - _container = new wxChoice (panel, wxID_ANY); + _container = new Choice(panel); _container_size = new StaticText (panel, wxT ("")); _resolution_label = create_label (panel, _("Resolution"), true); - _resolution = new wxChoice (panel, wxID_ANY); + _resolution = new Choice(panel); _frame_rate_label = create_label (panel, _("Frame Rate"), true); - _frame_rate_choice = new wxChoice (panel, wxID_ANY); + _frame_rate_choice = new Choice(panel); _frame_rate_spin = new SpinCtrl (panel, DCPOMATIC_SPIN_CTRL_WIDTH); - setup_frame_rate_widget (); _best_frame_rate = new Button (panel, _("Use best")); _three_d = new CheckBox (panel, _("3D")); @@ -805,24 +845,25 @@ DCPPanel::make_video_panel () /* Also listen to wxEVT_TEXT so that typing numbers directly in is always noticed */ _j2k_bandwidth->Bind (wxEVT_TEXT, boost::bind(&DCPPanel::j2k_bandwidth_changed, this)); _resolution->Bind (wxEVT_CHOICE, boost::bind(&DCPPanel::resolution_changed, this)); - _three_d->Bind (wxEVT_CHECKBOX, boost::bind(&DCPPanel::three_d_changed, this)); - _reencode_j2k->Bind (wxEVT_CHECKBOX, boost::bind(&DCPPanel::reencode_j2k_changed, this)); + _three_d->bind(&DCPPanel::three_d_changed, this); + _reencode_j2k->bind(&DCPPanel::reencode_j2k_changed, this); for (auto i: Ratio::containers()) { - _container->Append (std_to_wx(i->container_nickname())); + _container->add(i->container_nickname()); } for (auto i: Config::instance()->allowed_dcp_frame_rates()) { - _frame_rate_choice->Append (std_to_wx (boost::lexical_cast (i))); + _frame_rate_choice->add(boost::lexical_cast(i)); } _j2k_bandwidth->SetRange (1, Config::instance()->maximum_j2k_bandwidth() / 1000000); _frame_rate_spin->SetRange (1, 480); - _resolution->Append (_("2K")); - _resolution->Append (_("4K")); + _resolution->add(_("2K")); + _resolution->add(_("4K")); add_video_panel_to_grid (); + setup_frame_rate_widget(); return panel; } @@ -873,8 +914,13 @@ int DCPPanel::minimum_allowed_audio_channels () const { int min = 2; - if (_film && _film->audio_processor ()) { - min = _film->audio_processor()->out_channels (); + if (_film) { + if (_film->audio_processor()) { + min = _film->audio_processor()->out_channels(); + } + if (_film->contains_atmos_content()) { + min = std::max(min, 14); + } } if (min % 2 == 1) { @@ -895,7 +941,7 @@ DCPPanel::make_audio_panel () panel->SetSizer (_audio_panel_sizer); _channels_label = create_label (panel, _("Channels"), true); - _audio_channels = new wxChoice (panel, wxID_ANY); + _audio_channels = new Choice(panel); setup_audio_channels_choice (_audio_channels, minimum_allowed_audio_channels ()); if (Config::instance()->allow_96khz_audio()) { @@ -904,7 +950,7 @@ DCPPanel::make_audio_panel () } _processor_label = create_label (panel, _("Processor"), true); - _audio_processor = new wxChoice (panel, wxID_ANY); + _audio_processor = new Choice(panel); add_audio_processors (); _show_audio = new Button (panel, _("Show graph of audio levels...")); @@ -962,11 +1008,11 @@ DCPPanel::copy_isdcf_name_button_clicked () void DCPPanel::audio_processor_changed () { - if (!_film) { + if (!_film || !_audio_processor->get()) { return; } - auto const s = string_client_data (_audio_processor->GetClientObject (_audio_processor->GetSelection ())); + auto const s = string_client_data(_audio_processor->GetClientObject(*_audio_processor->get())); _film->set_audio_processor (AudioProcessor::from_id (s)); } @@ -978,24 +1024,19 @@ DCPPanel::show_audio_clicked () return; } - if (_audio_dialog) { - _audio_dialog->Destroy (); - _audio_dialog = nullptr; - } - - auto d = new AudioDialog (_panel, _film, _viewer); - d->Show (); + _audio_dialog.reset(_panel, _film, _viewer); + _audio_dialog->Show(); } void DCPPanel::reel_type_changed () { - if (!_film) { + if (!_film || !_reel_type->get()) { return; } - _film->set_reel_type (static_cast(_reel_type->GetSelection())); + _film->set_reel_type(static_cast(*_reel_type->get())); } @@ -1013,9 +1054,9 @@ DCPPanel::reel_length_changed () void DCPPanel::add_audio_processors () { - _audio_processor->Append (_("None"), new wxStringClientData(N_("none"))); + _audio_processor->add(_("None"), new wxStringClientData(N_("none"))); for (auto ap: AudioProcessor::visible()) { - _audio_processor->Append (std_to_wx(ap->name()), new wxStringClientData(std_to_wx(ap->id()))); + _audio_processor->add(std_to_wx(ap->name()), new wxStringClientData(std_to_wx(ap->id()))); } _audio_panel_sizer->Layout(); } @@ -1038,11 +1079,10 @@ void DCPPanel::edit_audio_language_clicked () { DCPOMATIC_ASSERT (_film->audio_language()); - auto d = new LanguageTagDialog (_panel, *_film->audio_language()); + auto d = make_wx(_panel, *_film->audio_language()); if (d->ShowModal() == wxID_OK) { _film->set_audio_language(d->get()); } - d->Destroy (); }