Fix error when OK-ing a text track dialog with no language (#2430).
[dcpomatic.git] / src / wx / dcp_text_track_dialog.cc
index d48b3be2624d57b6036a8f8ea342f19708c13726..d033541d24e5d736b2d8de7b3bce34786a973a78 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2020 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
 #include "dcp_text_track_dialog.h"
+#include "language_tag_widget.h"
 #include <boost/algorithm/string.hpp>
 
+
 using std::string;
 
+
 DCPTextTrackDialog::DCPTextTrackDialog (wxWindow* parent)
        : TableDialog (parent, _("DCP Text Track"), 2, 1, true)
 {
        add (_("Name"), true);
        add (_name = new wxTextCtrl (this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(300, -1)));
        add (_("Language"), true);
-       add (_language = new wxTextCtrl (this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(150, -1)));
+       _language = new LanguageTagWidget (this, wxT(""), boost::none);
+       add (_language->sizer());
 
+       _language->Changed.connect(boost::bind(&DCPTextTrackDialog::set_sensitivity, this));
+
+       set_sensitivity();
        layout ();
 }
 
+
 DCPTextTrack
 DCPTextTrackDialog::get () const
 {
-       return DCPTextTrack(wx_to_std(_name->GetValue()), wx_to_std(_language->GetValue()));
+       DCPOMATIC_ASSERT (_language->get());
+       return DCPTextTrack(wx_to_std(_name->GetValue()), _language->get());
 }
+
+
+void
+DCPTextTrackDialog::set_sensitivity()
+{
+       if (auto ok = dynamic_cast<wxButton *>(FindWindowById(wxID_OK, this))) {
+               ok->Enable(static_cast<bool>(_language->get()));
+       }
+}
+