diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-03-02 12:27:14 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-03-02 19:22:59 +0100 |
| commit | a073de1b022b362347d46b7895dc946d6506cf95 (patch) | |
| tree | 8e8cfb6e0dccbf12cd76a2da6b7a2f742ff87e6d /src | |
| parent | 68a61d00f3754f6fc473f6ac86fb3abfe670d190 (diff) | |
Move General preferences tab parent to its own file.
Diffstat (limited to 'src')
| -rw-r--r-- | src/wx/config_dialog.cc | 226 | ||||
| -rw-r--r-- | src/wx/config_dialog.h | 39 | ||||
| -rw-r--r-- | src/wx/full_config_dialog.cc | 1 | ||||
| -rw-r--r-- | src/wx/general_preferences_page.cc | 277 | ||||
| -rw-r--r-- | src/wx/general_preferences_page.h | 67 | ||||
| -rw-r--r-- | src/wx/kdm_config_dialog.cc | 1 | ||||
| -rw-r--r-- | src/wx/player_config_dialog.cc | 1 | ||||
| -rw-r--r-- | src/wx/wscript | 1 |
8 files changed, 348 insertions, 265 deletions
diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 178e8fca8..0d95b4118 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -101,229 +101,3 @@ Page::window_destroyed() } -GeneralPage::GeneralPage(wxSize panel_size, int border) - : Page(panel_size, border) -{ - -} - - -wxString -GeneralPage::GetName() const -{ - return _("General"); -} - - -void -GeneralPage::add_language_controls(wxGridBagSizer* table, int& r) -{ - _set_language = new CheckBox(_panel, _("Set language")); - table->Add(_set_language, wxGBPosition(r, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); - _language = new wxChoice(_panel, wxID_ANY); - vector<pair<string, string>> languages; - languages.push_back(make_pair("Čeština", "cs_CZ")); - languages.push_back(make_pair("汉语/漢語", "zh_CN")); - languages.push_back(make_pair("Dansk", "da_DK")); - languages.push_back(make_pair("Deutsch", "de_DE")); - languages.push_back(make_pair("English", "en_GB")); - languages.push_back(make_pair("Español", "es_ES")); - languages.push_back(make_pair("فارسی", "fa_IR")); - languages.push_back(make_pair("Français", "fr_FR")); - languages.push_back(make_pair("Italiano", "it_IT")); - languages.push_back(make_pair("Nederlands", "nl_NL")); - languages.push_back(make_pair("Русский", "ru_RU")); - languages.push_back(make_pair("Polski", "pl_PL")); - languages.push_back(make_pair("Português europeu", "pt_PT")); - languages.push_back(make_pair("Português do Brasil", "pt_BR")); - languages.push_back(make_pair("Svenska", "sv_SE")); - languages.push_back(make_pair("Slovenščina", "sl_SI")); - languages.push_back(make_pair("Slovenský jazyk", "sk_SK")); - // languages.push_back(make_pair("Türkçe", "tr_TR")); - languages.push_back(make_pair("українська мова", "uk_UA")); - languages.push_back(make_pair("Magyar nyelv", "hu_HU")); - checked_set(_language, languages); - table->Add(_language, wxGBPosition(r, 1)); - ++r; - - auto restart = add_label_to_sizer( - table, _panel, variant::wx::insert_dcpomatic(_("(restart %s to see language changes)")), false, wxGBPosition(r, 0), wxGBSpan(1, 2) - ); - wxFont font = restart->GetFont(); - font.SetStyle(wxFONTSTYLE_ITALIC); - font.SetPointSize(font.GetPointSize() - 1); - restart->SetFont(font); - ++r; - - _set_language->bind(&GeneralPage::set_language_changed, this); - _language->Bind(wxEVT_CHOICE, bind(&GeneralPage::language_changed, this)); -} - - -void -GeneralPage::add_config_file_controls(wxGridBagSizer* table, int& r) -{ - add_label_to_sizer(table, _panel, _("Configuration file"), true, wxGBPosition(r, 0)); - _config_file = new FilePickerCtrl(_panel, _("Select configuration file"), char_to_wx("*.xml"), true, false, "ConfigFilePath"); - table->Add(_config_file, wxGBPosition(r, 1)); - ++r; - - add_label_to_sizer(table, _panel, _("Cinema and screen database file"), true, wxGBPosition(r, 0)); - _cinemas_file = new FilePickerCtrl(_panel, _("Select cinema and screen database file"), char_to_wx("*.sqlite3"), true, false, "CinemaDatabasePath"); - table->Add(_cinemas_file, wxGBPosition(r, 1)); - auto export_cinemas = new Button(_panel, _("Export...")); - table->Add(export_cinemas, wxGBPosition(r, 2)); - ++r; - - export_cinemas->Bind(wxEVT_BUTTON, boost::bind(&GeneralPage::export_cinemas_file, this)); - _config_file->Bind (wxEVT_FILEPICKER_CHANGED, boost::bind(&GeneralPage::config_file_changed, this)); - _cinemas_file->Bind(wxEVT_FILEPICKER_CHANGED, boost::bind(&GeneralPage::cinemas_file_changed, this)); -} - - -void -GeneralPage::config_file_changed() -{ - auto config = Config::instance(); - auto const new_file = _config_file->path(); - if (!new_file || *new_file == config->config_read_file()) { - return; - } - bool copy_and_link = true; - if (dcp::filesystem::exists(*new_file)) { - ConfigMoveDialog dialog(_panel, *new_file); - if (dialog.ShowModal() == wxID_OK) { - copy_and_link = false; - } - } - - if (copy_and_link) { - config->write(); - if (new_file != config->config_read_file()) { - config->copy_and_link(*new_file); - } - } else { - config->link(*new_file); - } -} - -void -GeneralPage::cinemas_file_changed() -{ - if (auto path = _cinemas_file->path()) { - Config::instance()->set_cinemas_file(*path); - } -} - - -void -GeneralPage::export_cinemas_file() -{ - wxFileDialog dialog( - _panel, _("Select Cinemas File"), wxEmptyString, wxEmptyString, char_to_wx("SQLite files (*.sqlite3)|*.sqlite3"), - wxFD_SAVE | wxFD_OVERWRITE_PROMPT - ); - - if (dialog.ShowModal() == wxID_OK) { - dcp::filesystem::copy_file(Config::instance()->cinemas_file(), wx_to_std(dialog.GetPath()), dcp::filesystem::CopyOptions::OVERWRITE_EXISTING); - } -} - - -void -GeneralPage::add_update_controls(wxGridBagSizer* table, int& r) -{ - _check_for_updates = new CheckBox(_panel, _("Check for updates on startup")); - table->Add(_check_for_updates, wxGBPosition(r, 0), wxGBSpan(1, 2)); - ++r; - - _check_for_test_updates = new CheckBox(_panel, _("Check for testing updates on startup")); - table->Add(_check_for_test_updates, wxGBPosition(r, 0), wxGBSpan(1, 2)); - ++r; - - _check_for_updates->bind(&GeneralPage::check_for_updates_changed, this); - _check_for_test_updates->bind(&GeneralPage::check_for_test_updates_changed, this); -} - -void -GeneralPage::config_changed() -{ - auto config = Config::instance(); - - checked_set(_set_language, static_cast<bool>(config->language())); - - /* Backwards compatibility of config file */ - - map<string, string> compat_map; - compat_map["fr"] = "fr_FR"; - compat_map["it"] = "it_IT"; - compat_map["es"] = "es_ES"; - compat_map["sv"] = "sv_SE"; - compat_map["de"] = "de_DE"; - compat_map["nl"] = "nl_NL"; - compat_map["ru"] = "ru_RU"; - compat_map["pl"] = "pl_PL"; - compat_map["da"] = "da_DK"; - compat_map["pt"] = "pt_PT"; - compat_map["sk"] = "sk_SK"; - compat_map["cs"] = "cs_CZ"; - compat_map["uk"] = "uk_UA"; - - auto lang = config->language().get_value_or("en_GB"); - if (compat_map.find(lang) != compat_map.end()) { - lang = compat_map[lang]; - } - - checked_set(_language, lang); - - checked_set(_config_file, config->config_read_file()); - checked_set(_cinemas_file, config->cinemas_file()); - - checked_set(_check_for_updates, config->check_for_updates()); - checked_set(_check_for_test_updates, config->check_for_test_updates()); - - setup_sensitivity(); -} - -void -GeneralPage::setup_sensitivity() -{ - _language->Enable(_set_language->GetValue()); - _check_for_test_updates->Enable(_check_for_updates->GetValue()); -} - -void -GeneralPage::set_language_changed() -{ - setup_sensitivity(); - if (_set_language->GetValue()) { - language_changed(); - } else { - Config::instance()->unset_language(); - } -} - -void -GeneralPage::language_changed() -{ - int const sel = _language->GetSelection(); - if (sel != -1) { - Config::instance()->set_language(string_client_data(_language->GetClientObject(sel))); - } else { - Config::instance()->unset_language(); - } -} - -void -GeneralPage::check_for_updates_changed() -{ - Config::instance()->set_check_for_updates(_check_for_updates->GetValue()); -} - -void -GeneralPage::check_for_test_updates_changed() -{ - Config::instance()->set_check_for_test_updates(_check_for_test_updates->GetValue()); -} - - diff --git a/src/wx/config_dialog.h b/src/wx/config_dialog.h index 33ffcc515..f87e60f45 100644 --- a/src/wx/config_dialog.h +++ b/src/wx/config_dialog.h @@ -82,45 +82,6 @@ private: }; -class GeneralPage : public Page -{ -public: - GeneralPage(wxSize panel_size, int border); - - wxString GetName() const override; - -#ifdef DCPOMATIC_OSX - wxBitmap GetLargeIcon() const override - { - return wxBitmap(icon_path("general"), wxBITMAP_TYPE_PNG); - } -#endif - -protected: - void add_language_controls(wxGridBagSizer* table, int& r); - void add_config_file_controls(wxGridBagSizer* table, int& r); - void add_update_controls(wxGridBagSizer* table, int& r); - void config_changed() override; - -private: - void setup_sensitivity(); - void set_language_changed(); - void language_changed(); - void config_file_changed(); - void cinemas_file_changed(); - void export_cinemas_file(); - void check_for_updates_changed(); - void check_for_test_updates_changed(); - - CheckBox* _set_language; - wxChoice* _language; - FilePickerCtrl* _config_file; - FilePickerCtrl* _cinemas_file; - CheckBox* _check_for_updates; - CheckBox* _check_for_test_updates; -}; - - } } diff --git a/src/wx/full_config_dialog.cc b/src/wx/full_config_dialog.cc index 7dbe0fb85..e0b72d8f8 100644 --- a/src/wx/full_config_dialog.cc +++ b/src/wx/full_config_dialog.cc @@ -36,6 +36,7 @@ #include "file_picker_ctrl.h" #include "filter_dialog.h" #include "full_config_dialog.h" +#include "general_preferences_page.h" #include "kdm_choice.h" #include "kdm_email_preferences_page.h" #include "keys_preferences_page.h" diff --git a/src/wx/general_preferences_page.cc b/src/wx/general_preferences_page.cc new file mode 100644 index 000000000..c438865b7 --- /dev/null +++ b/src/wx/general_preferences_page.cc @@ -0,0 +1,277 @@ +/* + Copyright (C) 2025 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 "check_box.h" +#include "config_dialog.h" +#include "config_move_dialog.h" +#include "file_picker_ctrl.h" +#include "general_preferences_page.h" +#include "wx_variant.h" +#include <dcp/filesystem.h> + + +using std::make_pair; +using std::map; +using std::pair; +using std::string; +using std::vector; +using boost::bind; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif +using namespace dcpomatic::preferences; + + +GeneralPage::GeneralPage(wxSize panel_size, int border) + : Page(panel_size, border) +{ + +} + + +#ifdef DCPOMATIC_OSX +wxBitmap +GeneralPage::GetLargeIcon() const +{ + return wxBitmap(icon_path("general"), wxBITMAP_TYPE_PNG); +} +#endif + + +wxString +GeneralPage::GetName() const +{ + return _("General"); +} + + +void +GeneralPage::add_language_controls(wxGridBagSizer* table, int& r) +{ + _set_language = new CheckBox(_panel, _("Set language")); + table->Add(_set_language, wxGBPosition(r, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); + _language = new wxChoice(_panel, wxID_ANY); + vector<pair<string, string>> languages; + languages.push_back(make_pair("Čeština", "cs_CZ")); + languages.push_back(make_pair("汉语/漢語", "zh_CN")); + languages.push_back(make_pair("Dansk", "da_DK")); + languages.push_back(make_pair("Deutsch", "de_DE")); + languages.push_back(make_pair("English", "en_GB")); + languages.push_back(make_pair("Español", "es_ES")); + languages.push_back(make_pair("فارسی", "fa_IR")); + languages.push_back(make_pair("Français", "fr_FR")); + languages.push_back(make_pair("Italiano", "it_IT")); + languages.push_back(make_pair("Nederlands", "nl_NL")); + languages.push_back(make_pair("Русский", "ru_RU")); + languages.push_back(make_pair("Polski", "pl_PL")); + languages.push_back(make_pair("Português europeu", "pt_PT")); + languages.push_back(make_pair("Português do Brasil", "pt_BR")); + languages.push_back(make_pair("Svenska", "sv_SE")); + languages.push_back(make_pair("Slovenščina", "sl_SI")); + languages.push_back(make_pair("Slovenský jazyk", "sk_SK")); + // languages.push_back(make_pair("Türkçe", "tr_TR")); + languages.push_back(make_pair("українська мова", "uk_UA")); + languages.push_back(make_pair("Magyar nyelv", "hu_HU")); + checked_set(_language, languages); + table->Add(_language, wxGBPosition(r, 1)); + ++r; + + auto restart = add_label_to_sizer( + table, _panel, variant::wx::insert_dcpomatic(_("(restart %s to see language changes)")), false, wxGBPosition(r, 0), wxGBSpan(1, 2) + ); + wxFont font = restart->GetFont(); + font.SetStyle(wxFONTSTYLE_ITALIC); + font.SetPointSize(font.GetPointSize() - 1); + restart->SetFont(font); + ++r; + + _set_language->bind(&GeneralPage::set_language_changed, this); + _language->Bind(wxEVT_CHOICE, bind(&GeneralPage::language_changed, this)); +} + + +void +GeneralPage::add_config_file_controls(wxGridBagSizer* table, int& r) +{ + add_label_to_sizer(table, _panel, _("Configuration file"), true, wxGBPosition(r, 0)); + _config_file = new FilePickerCtrl(_panel, _("Select configuration file"), char_to_wx("*.xml"), true, false, "ConfigFilePath"); + table->Add(_config_file, wxGBPosition(r, 1)); + ++r; + + add_label_to_sizer(table, _panel, _("Cinema and screen database file"), true, wxGBPosition(r, 0)); + _cinemas_file = new FilePickerCtrl(_panel, _("Select cinema and screen database file"), char_to_wx("*.sqlite3"), true, false, "CinemaDatabasePath"); + table->Add(_cinemas_file, wxGBPosition(r, 1)); + auto export_cinemas = new Button(_panel, _("Export...")); + table->Add(export_cinemas, wxGBPosition(r, 2)); + ++r; + + export_cinemas->Bind(wxEVT_BUTTON, boost::bind(&GeneralPage::export_cinemas_file, this)); + _config_file->Bind (wxEVT_FILEPICKER_CHANGED, boost::bind(&GeneralPage::config_file_changed, this)); + _cinemas_file->Bind(wxEVT_FILEPICKER_CHANGED, boost::bind(&GeneralPage::cinemas_file_changed, this)); +} + + +void +GeneralPage::config_file_changed() +{ + auto config = Config::instance(); + auto const new_file = _config_file->path(); + if (!new_file || *new_file == config->config_read_file()) { + return; + } + bool copy_and_link = true; + if (dcp::filesystem::exists(*new_file)) { + ConfigMoveDialog dialog(_panel, *new_file); + if (dialog.ShowModal() == wxID_OK) { + copy_and_link = false; + } + } + + if (copy_and_link) { + config->write(); + if (new_file != config->config_read_file()) { + config->copy_and_link(*new_file); + } + } else { + config->link(*new_file); + } +} + +void +GeneralPage::cinemas_file_changed() +{ + if (auto path = _cinemas_file->path()) { + Config::instance()->set_cinemas_file(*path); + } +} + + +void +GeneralPage::export_cinemas_file() +{ + wxFileDialog dialog( + _panel, _("Select Cinemas File"), wxEmptyString, wxEmptyString, char_to_wx("SQLite files (*.sqlite3)|*.sqlite3"), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT + ); + + if (dialog.ShowModal() == wxID_OK) { + dcp::filesystem::copy_file(Config::instance()->cinemas_file(), wx_to_std(dialog.GetPath()), dcp::filesystem::CopyOptions::OVERWRITE_EXISTING); + } +} + + +void +GeneralPage::add_update_controls(wxGridBagSizer* table, int& r) +{ + _check_for_updates = new CheckBox(_panel, _("Check for updates on startup")); + table->Add(_check_for_updates, wxGBPosition(r, 0), wxGBSpan(1, 2)); + ++r; + + _check_for_test_updates = new CheckBox(_panel, _("Check for testing updates on startup")); + table->Add(_check_for_test_updates, wxGBPosition(r, 0), wxGBSpan(1, 2)); + ++r; + + _check_for_updates->bind(&GeneralPage::check_for_updates_changed, this); + _check_for_test_updates->bind(&GeneralPage::check_for_test_updates_changed, this); +} + +void +GeneralPage::config_changed() +{ + auto config = Config::instance(); + + checked_set(_set_language, static_cast<bool>(config->language())); + + /* Backwards compatibility of config file */ + + map<string, string> compat_map; + compat_map["fr"] = "fr_FR"; + compat_map["it"] = "it_IT"; + compat_map["es"] = "es_ES"; + compat_map["sv"] = "sv_SE"; + compat_map["de"] = "de_DE"; + compat_map["nl"] = "nl_NL"; + compat_map["ru"] = "ru_RU"; + compat_map["pl"] = "pl_PL"; + compat_map["da"] = "da_DK"; + compat_map["pt"] = "pt_PT"; + compat_map["sk"] = "sk_SK"; + compat_map["cs"] = "cs_CZ"; + compat_map["uk"] = "uk_UA"; + + auto lang = config->language().get_value_or("en_GB"); + if (compat_map.find(lang) != compat_map.end()) { + lang = compat_map[lang]; + } + + checked_set(_language, lang); + + checked_set(_config_file, config->config_read_file()); + checked_set(_cinemas_file, config->cinemas_file()); + + checked_set(_check_for_updates, config->check_for_updates()); + checked_set(_check_for_test_updates, config->check_for_test_updates()); + + setup_sensitivity(); +} + +void +GeneralPage::setup_sensitivity() +{ + _language->Enable(_set_language->GetValue()); + _check_for_test_updates->Enable(_check_for_updates->GetValue()); +} + +void +GeneralPage::set_language_changed() +{ + setup_sensitivity(); + if (_set_language->GetValue()) { + language_changed(); + } else { + Config::instance()->unset_language(); + } +} + +void +GeneralPage::language_changed() +{ + int const sel = _language->GetSelection(); + if (sel != -1) { + Config::instance()->set_language(string_client_data(_language->GetClientObject(sel))); + } else { + Config::instance()->unset_language(); + } +} + +void +GeneralPage::check_for_updates_changed() +{ + Config::instance()->set_check_for_updates(_check_for_updates->GetValue()); +} + +void +GeneralPage::check_for_test_updates_changed() +{ + Config::instance()->set_check_for_test_updates(_check_for_test_updates->GetValue()); +} + + diff --git a/src/wx/general_preferences_page.h b/src/wx/general_preferences_page.h new file mode 100644 index 000000000..fda849862 --- /dev/null +++ b/src/wx/general_preferences_page.h @@ -0,0 +1,67 @@ +/* + Copyright (C) 2025 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 "config_dialog.h" + + +namespace dcpomatic { +namespace preferences { + + +class GeneralPage : public Page +{ +public: + GeneralPage(wxSize panel_size, int border); + + wxString GetName() const override; + +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon() const override; +#endif + +protected: + void add_language_controls(wxGridBagSizer* table, int& r); + void add_config_file_controls(wxGridBagSizer* table, int& r); + void add_update_controls(wxGridBagSizer* table, int& r); + void config_changed() override; + +private: + void setup_sensitivity(); + void set_language_changed(); + void language_changed(); + void config_file_changed(); + void cinemas_file_changed(); + void export_cinemas_file(); + void check_for_updates_changed(); + void check_for_test_updates_changed(); + + CheckBox* _set_language; + wxChoice* _language; + FilePickerCtrl* _config_file; + FilePickerCtrl* _cinemas_file; + CheckBox* _check_for_updates; + CheckBox* _check_for_test_updates; +}; + + +} +} + diff --git a/src/wx/kdm_config_dialog.cc b/src/wx/kdm_config_dialog.cc index 528ee0e52..58abda4fa 100644 --- a/src/wx/kdm_config_dialog.cc +++ b/src/wx/kdm_config_dialog.cc @@ -27,6 +27,7 @@ #include "check_box.h" #include "config_dialog.h" #include "email_preferences_page.h" +#include "general_preferences_page.h" #include "kdm_email_preferences_page.h" #include "keys_preferences_page.h" #include "file_picker_ctrl.h" diff --git a/src/wx/player_config_dialog.cc b/src/wx/player_config_dialog.cc index cb9a55e01..f0cbf0e31 100644 --- a/src/wx/player_config_dialog.cc +++ b/src/wx/player_config_dialog.cc @@ -31,6 +31,7 @@ #include "email_dialog.h" #include "file_picker_ctrl.h" #include "filter_dialog.h" +#include "general_preferences_page.h" #include "keys_preferences_page.h" #include "locations_preferences_page.h" #include "make_chain_dialog.h" diff --git a/src/wx/wscript b/src/wx/wscript index d7b7bac89..c18b83086 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -96,6 +96,7 @@ sources = """ full_language_tag_dialog.cc gain_calculator_dialog.cc gdc_certificate_panel.cc + general_preferences_page.cc gl_video_view.cc hints_dialog.cc html_dialog.cc |
