- wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
- _notebook = new wxNotebook (this, wxID_ANY);
- s->Add (_notebook, 1);
-
- make_misc_panel ();
- _notebook->AddPage (_misc_panel, _("Miscellaneous"), true);
- make_servers_panel ();
- _notebook->AddPage (_servers_panel, _("Encoding servers"), false);
- make_colour_conversions_panel ();
- _notebook->AddPage (_colour_conversions_panel, _("Colour conversions"), false);
- make_metadata_panel ();
- _notebook->AddPage (_metadata_panel, _("Metadata"), false);
- make_tms_panel ();
- _notebook->AddPage (_tms_panel, _("TMS"), false);
-
- wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
- overall_sizer->Add (s, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
-
- wxSizer* buttons = CreateSeparatedButtonSizer (wxOK);
- if (buttons) {
- overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
- }
-
- SetSizer (overall_sizer);
- overall_sizer->Layout ();
- overall_sizer->SetSizeHints (this);
-}
+public:
+ Page (wxSize panel_size, int border)
+ : _border (border)
+ , _panel (0)
+ , _panel_size (panel_size)
+ , _window_exists (false)
+ {
+ _config_connection = Config::instance()->Changed.connect (boost::bind (&Page::config_changed_wrapper, this));
+ }
+
+ virtual ~Page () {}
+
+protected:
+ wxWindow* create_window (wxWindow* parent)
+ {
+ _panel = new wxPanel (parent, wxID_ANY, wxDefaultPosition, _panel_size);
+ wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
+ _panel->SetSizer (s);
+
+ setup ();
+ _window_exists = true;
+ config_changed ();
+
+ _panel->Bind (wxEVT_DESTROY, boost::bind (&Page::window_destroyed, this));
+
+ return _panel;
+ }
+
+ int _border;
+ wxPanel* _panel;
+
+private:
+ virtual void config_changed () = 0;
+ virtual void setup () = 0;
+
+ void config_changed_wrapper ()
+ {
+ if (_window_exists) {
+ config_changed ();
+ }
+ }
+
+ void window_destroyed ()
+ {
+ _window_exists = false;
+ }
+
+ wxSize _panel_size;
+ boost::signals2::scoped_connection _config_connection;
+ bool _window_exists;
+};
+
+class StockPage : public wxStockPreferencesPage, public Page
+{
+public:
+ StockPage (Kind kind, wxSize panel_size, int border)
+ : wxStockPreferencesPage (kind)
+ , Page (panel_size, border)
+ {}
+
+ wxWindow* CreateWindow (wxWindow* parent)
+ {
+ return create_window (parent);
+ }
+};
+
+class StandardPage : public wxPreferencesPage, public Page
+{
+public:
+ StandardPage (wxSize panel_size, int border)
+ : Page (panel_size, border)
+ {}
+
+ wxWindow* CreateWindow (wxWindow* parent)
+ {
+ return create_window (parent);
+ }
+};
+
+class GeneralPage : public StockPage
+{
+public:
+ GeneralPage (wxSize panel_size, int border)
+ : StockPage (Kind_General, panel_size, border)
+ {}
+
+private:
+ void setup ()
+ {
+ wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+ table->AddGrowableCol (1, 1);
+ _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border);
+
+ _set_language = new wxCheckBox (_panel, wxID_ANY, _("Set language"));
+ table->Add (_set_language, 1);
+ _language = new wxChoice (_panel, wxID_ANY);
+ _language->Append (wxT ("Deutsch"));
+ _language->Append (wxT ("English"));
+ _language->Append (wxT ("Español"));
+ _language->Append (wxT ("Français"));
+ _language->Append (wxT ("Italiano"));
+ _language->Append (wxT ("Nederlands"));
+ _language->Append (wxT ("Svenska"));
+ _language->Append (wxT ("Русский"));
+ table->Add (_language);
+
+ wxStaticText* restart = add_label_to_sizer (table, _panel, _("(restart DCP-o-matic to see language changes)"), false);
+ wxFont font = restart->GetFont();
+ font.SetStyle (wxFONTSTYLE_ITALIC);
+ font.SetPointSize (font.GetPointSize() - 1);
+ restart->SetFont (font);
+ table->AddSpacer (0);
+
+ add_label_to_sizer (table, _panel, _("Threads to use for encoding on this host"), true);
+ _num_local_encoding_threads = new wxSpinCtrl (_panel);
+ table->Add (_num_local_encoding_threads, 1);
+
+ _check_for_updates = new wxCheckBox (_panel, wxID_ANY, _("Check for updates on startup"));
+ table->Add (_check_for_updates, 1, wxEXPAND | wxALL);
+ table->AddSpacer (0);
+
+ _check_for_test_updates = new wxCheckBox (_panel, wxID_ANY, _("Check for testing updates as well as stable ones"));
+ table->Add (_check_for_test_updates, 1, wxEXPAND | wxALL);
+ table->AddSpacer (0);
+
+ _set_language->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::set_language_changed, this));
+ _language->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&GeneralPage::language_changed, this));
+
+ _num_local_encoding_threads->SetRange (1, 128);
+ _num_local_encoding_threads->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&GeneralPage::num_local_encoding_threads_changed, this));
+
+ _check_for_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_updates_changed, this));
+ _check_for_test_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_test_updates_changed, this));
+ }
+
+ void config_changed ()
+ {
+ Config* config = Config::instance ();
+
+ checked_set (_set_language, config->language ());
+
+ if (config->language().get_value_or ("") == "fr") {
+ _language->SetSelection (3);
+ } else if (config->language().get_value_or ("") == "it") {
+ _language->SetSelection (4);
+ } else if (config->language().get_value_or ("") == "es") {
+ _language->SetSelection (2);
+ } else if (config->language().get_value_or ("") == "sv") {
+ _language->SetSelection (6);
+ } else if (config->language().get_value_or ("") == "de") {
+ _language->SetSelection (0);
+ } else if (config->language().get_value_or ("") == "nl") {
+ _language->SetSelection (5);
+ } else if (config->language().get_value_or ("") == "ru") {
+ _language->SetSelection (7);
+ } else {
+ _language->SetSelection (1);
+ }
+
+ setup_language_sensitivity ();
+
+ checked_set (_num_local_encoding_threads, config->num_local_encoding_threads ());
+ checked_set (_check_for_updates, config->check_for_updates ());
+ checked_set (_check_for_test_updates, config->check_for_test_updates ());
+ }
+
+ void setup_language_sensitivity ()
+ {
+ _language->Enable (_set_language->GetValue ());
+ }