diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-11-24 23:45:31 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-11-24 23:45:31 +0100 |
| commit | de75a5f4affe3d81ff6a0cb12bf8c25de9a643de (patch) | |
| tree | 7d52aef9e65fd19e5c0df8dedb4e633b4bd77037 | |
| parent | 62b4857f5906b2a05cab66fb3b14445042d1d8cf (diff) | |
Extract LanguageSubtagPanel to its own files.
| -rw-r--r-- | src/wx/full_language_tag_dialog.cc | 65 | ||||
| -rw-r--r-- | src/wx/language_subtag_panel.cc | 90 | ||||
| -rw-r--r-- | src/wx/language_subtag_panel.h | 45 | ||||
| -rw-r--r-- | src/wx/subtag_list_ctrl.h | 7 | ||||
| -rw-r--r-- | src/wx/wscript | 1 |
5 files changed, 142 insertions, 66 deletions
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 <dcp/language_tag.h> @@ -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<dcp::LanguageTag::SubtagData> subtag = optional<dcp::LanguageTag::SubtagData>()) - { - _list->set (type, search, subtag); - _search->SetValue (wxString(search)); - } - - optional<dcp::LanguageTag::RegionSubtag> get () const - { - if (!_list->selected_subtag()) { - return {}; - } - - return dcp::LanguageTag::RegionSubtag(_list->selected_subtag()->subtag); - } - - boost::signals2::signal<void (optional<dcp::LanguageTag::SubtagData>)> SelectionChanged; - boost::signals2::signal<void (string)> 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 <cth@carlh.net> + + 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 <http://www.gnu.org/licenses/>. + +*/ + + +#include "language_subtag_panel.h" +#include <wx/srchctrl.h> +#include <wx/wx.h> + + +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<dcp::LanguageTag::SubtagData> subtag) +{ + _list->set(type, search, subtag); + _search->SetValue(wxString(search)); +} + + +optional<dcp::LanguageTag::RegionSubtag> +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 <cth@carlh.net> + + 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 <http://www.gnu.org/licenses/>. + +*/ + + +#include "subtag_list_ctrl.h" +#include <wx/srchctrl.h> +#include <wx/wx.h> +#include <boost/signals2.hpp> + + +class LanguageSubtagPanel : public wxPanel +{ +public: + LanguageSubtagPanel(wxWindow* parent); + + void set(dcp::LanguageTag::SubtagType type, std::string search, boost::optional<dcp::LanguageTag::SubtagData> subtag = boost::optional<dcp::LanguageTag::SubtagData>()); + boost::optional<dcp::LanguageTag::RegionSubtag> get() const; + + boost::signals2::signal<void (boost::optional<dcp::LanguageTag::SubtagData>)> SelectionChanged; + boost::signals2::signal<void (std::string)> 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 <dcp/language_tag.h> #include <wx/listctrl.h> #include <vector> @@ -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 |
