X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Flanguage_tag_dialog.cc;h=b472edab07d1a5fda88d417129b23189ebe5b833;hb=e87f943433216d294b22853411eca5c582be1066;hp=c72c64b313c07f0465553d297a5ac0973fe0d816;hpb=e0a70cd5cfb11fc2de167f3146acdd437a6faa82;p=dcpomatic.git diff --git a/src/wx/language_tag_dialog.cc b/src/wx/language_tag_dialog.cc index c72c64b31..b472edab0 100644 --- a/src/wx/language_tag_dialog.cc +++ b/src/wx/language_tag_dialog.cc @@ -23,9 +23,12 @@ #include "language_tag_dialog.h" #include "wx_util.h" #include "lib/config.h" +#include +#include +LIBDCP_DISABLE_WARNINGS #include #include -#include +LIBDCP_ENABLE_WARNINGS using std::vector; @@ -43,7 +46,7 @@ LanguageTagDialog::LanguageTagDialog (wxWindow* parent, dcp::LanguageTag tag) overall_sizer->Add (_list, 0, wxALL, DCPOMATIC_SIZER_GAP); overall_sizer->Add (add, 0, wxALL, DCPOMATIC_SIZER_GAP); - auto buttons = CreateSeparatedButtonSizer (wxOK); + auto buttons = CreateSeparatedButtonSizer(wxOK | wxCANCEL); if (buttons) { overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); } @@ -65,19 +68,18 @@ LanguageTagDialog::LanguageTagDialog (wxWindow* parent, dcp::LanguageTag tag) set (tag); add->Bind (wxEVT_BUTTON, boost::bind(&LanguageTagDialog::add_language, this)); + _list->Bind(wxEVT_LIST_ITEM_ACTIVATED, boost::bind(&LanguageTagDialog::EndModal, this, wxID_OK)); } void LanguageTagDialog::add_language () { - auto full = new FullLanguageTagDialog (GetParent()); - auto r = full->ShowModal (); - if (r == wxID_OK) { - Config::instance()->add_custom_language (full->get()); - set (full->get()); + FullLanguageTagDialog full(GetParent()); + if (full.ShowModal() == wxID_OK) { + Config::instance()->add_custom_language(full.get()); + set(full.get()); } - full->Destroy (); } @@ -116,7 +118,9 @@ LanguageTagDialog::set (dcp::LanguageTag tag) _custom.push_back (tag); selection = _presets.size() + _custom.size() - 1; populate_list (); - _list->EnsureVisible (_list->GetItemCount() - 1); + if (_list->GetItemCount() > 0) { + _list->EnsureVisible (_list->GetItemCount() - 1); + } } else { selection = _presets.size() + std::distance(_custom.begin(), iter); } @@ -125,7 +129,9 @@ LanguageTagDialog::set (dcp::LanguageTag tag) } _list->SetItemState (selection, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); - _list->EnsureVisible (selection); + if (static_cast(selection) < _list->GetItemCount()) { + _list->EnsureVisible (selection); + } }