From de75a5f4affe3d81ff6a0cb12bf8c25de9a643de Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 24 Nov 2022 23:45:31 +0100 Subject: Extract LanguageSubtagPanel to its own files. --- src/wx/full_language_tag_dialog.cc | 65 +-------------------------- src/wx/language_subtag_panel.cc | 90 ++++++++++++++++++++++++++++++++++++++ src/wx/language_subtag_panel.h | 45 +++++++++++++++++++ src/wx/subtag_list_ctrl.h | 7 ++- src/wx/wscript | 1 + 5 files changed, 142 insertions(+), 66 deletions(-) create mode 100644 src/wx/language_subtag_panel.cc create mode 100644 src/wx/language_subtag_panel.h (limited to 'src') diff --git a/src/wx/full_language_tag_dialog.cc b/src/wx/full_language_tag_dialog.cc index c181e53fb..c88044088 100644 --- a/src/wx/full_language_tag_dialog.cc +++ b/src/wx/full_language_tag_dialog.cc @@ -20,6 +20,7 @@ #include "full_language_tag_dialog.h" +#include "language_subtag_panel.h" #include "subtag_list_ctrl.h" #include "lib/dcpomatic_assert.h" #include @@ -50,70 +51,6 @@ using namespace boost::placeholders; #endif -class LanguageSubtagPanel : public wxPanel -{ -public: - LanguageSubtagPanel (wxWindow* parent) - : wxPanel (parent, wxID_ANY) - { -#ifdef __WXGTK3__ - int const height = 30; -#else - int const height = -1; -#endif - - _search = new wxSearchCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(200, height)); - _list = new SubtagListCtrl (this); - - auto sizer = new wxBoxSizer (wxVERTICAL); - sizer->Add (_search, 0, wxALL, 8); - sizer->Add (_list, 1, wxALL, 8); - SetSizer (sizer); - - _search->Bind (wxEVT_TEXT, boost::bind(&LanguageSubtagPanel::search_changed, this)); - _list->Bind (wxEVT_LIST_ITEM_SELECTED, boost::bind(&LanguageSubtagPanel::selection_changed, this)); - _list->Bind (wxEVT_LIST_ITEM_DESELECTED, boost::bind(&LanguageSubtagPanel::selection_changed, this)); - } - - void set (dcp::LanguageTag::SubtagType type, string search, optional subtag = optional()) - { - _list->set (type, search, subtag); - _search->SetValue (wxString(search)); - } - - optional get () const - { - if (!_list->selected_subtag()) { - return {}; - } - - return dcp::LanguageTag::RegionSubtag(_list->selected_subtag()->subtag); - } - - boost::signals2::signal)> SelectionChanged; - boost::signals2::signal SearchChanged; - -private: - void search_changed () - { - auto search = _search->GetValue(); - _list->set_search (search.ToStdString()); - if (search.Length() > 0 && _list->GetItemCount() > 0) { - _list->EnsureVisible (0); - } - SearchChanged (_search->GetValue().ToStdString()); - } - - void selection_changed () - { - SelectionChanged (_list->selected_subtag()); - } - - wxSearchCtrl* _search; - SubtagListCtrl* _list; -}; - - FullLanguageTagDialog::FullLanguageTagDialog (wxWindow* parent, dcp::LanguageTag tag) : wxDialog (parent, wxID_ANY, _("Language Tag"), wxDefaultPosition, wxSize(-1, 500)) { diff --git a/src/wx/language_subtag_panel.cc b/src/wx/language_subtag_panel.cc new file mode 100644 index 000000000..b5cff8051 --- /dev/null +++ b/src/wx/language_subtag_panel.cc @@ -0,0 +1,90 @@ +/* + Copyright (C) 2021 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + + +#include "language_subtag_panel.h" +#include +#include + + +using std::string; +using boost::optional; + + +LanguageSubtagPanel::LanguageSubtagPanel(wxWindow* parent) + : wxPanel (parent, wxID_ANY) +{ +#ifdef __WXGTK3__ + int const height = 30; +#else + int const height = -1; +#endif + + _search = new wxSearchCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(200, height)); + _list = new SubtagListCtrl(this); + + auto sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(_search, 0, wxALL, 8); + sizer->Add(_list, 1, wxALL, 8); + SetSizer(sizer); + + _search->Bind(wxEVT_TEXT, boost::bind(&LanguageSubtagPanel::search_changed, this)); + _list->Bind(wxEVT_LIST_ITEM_SELECTED, boost::bind(&LanguageSubtagPanel::selection_changed, this)); + _list->Bind(wxEVT_LIST_ITEM_DESELECTED, boost::bind(&LanguageSubtagPanel::selection_changed, this)); +} + + +void +LanguageSubtagPanel::set(dcp::LanguageTag::SubtagType type, string search, optional subtag) +{ + _list->set(type, search, subtag); + _search->SetValue(wxString(search)); +} + + +optional +LanguageSubtagPanel::get() const +{ + if (!_list->selected_subtag()) { + return {}; + } + + return dcp::LanguageTag::RegionSubtag(_list->selected_subtag()->subtag); +} + + +void +LanguageSubtagPanel::search_changed() +{ + auto search = _search->GetValue(); + _list->set_search(search.ToStdString()); + if (search.Length() > 0 && _list->GetItemCount() > 0) { + _list->EnsureVisible (0); + } + SearchChanged(_search->GetValue().ToStdString()); +} + + +void +LanguageSubtagPanel::selection_changed() +{ + SelectionChanged(_list->selected_subtag()); +} + diff --git a/src/wx/language_subtag_panel.h b/src/wx/language_subtag_panel.h new file mode 100644 index 000000000..14d5bab11 --- /dev/null +++ b/src/wx/language_subtag_panel.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2021 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + + +#include "subtag_list_ctrl.h" +#include +#include +#include + + +class LanguageSubtagPanel : public wxPanel +{ +public: + LanguageSubtagPanel(wxWindow* parent); + + void set(dcp::LanguageTag::SubtagType type, std::string search, boost::optional subtag = boost::optional()); + boost::optional get() const; + + boost::signals2::signal)> SelectionChanged; + boost::signals2::signal SearchChanged; + +private: + void search_changed(); + void selection_changed(); + + wxSearchCtrl* _search; + SubtagListCtrl* _list; +}; diff --git a/src/wx/subtag_list_ctrl.h b/src/wx/subtag_list_ctrl.h index b1413b361..65071b5f5 100644 --- a/src/wx/subtag_list_ctrl.h +++ b/src/wx/subtag_list_ctrl.h @@ -19,6 +19,10 @@ */ +#ifndef DCPOMATIC_SUBTAG_LIST_CTRL_H +#define DCPOMATIC_SUBTAG_LIST_CTRL_H + + #include #include #include @@ -41,5 +45,4 @@ private: }; - - +#endif diff --git a/src/wx/wscript b/src/wx/wscript index 6bbae6b74..adbdcad44 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -96,6 +96,7 @@ sources = """ kdm_dialog.cc kdm_output_panel.cc kdm_timing_panel.cc + language_subtag_panel.cc language_tag_dialog.cc language_tag_widget.cc kdm_choice.cc -- cgit v1.2.3