Add load button for SPL.
[dcpomatic.git] / src / wx / player_config_dialog.cc
index 3697c3ce3413d0682e321816268a463871d08d67..29b30f8a7b7440ade73ee5e5958c968b8ba8409d 100644 (file)
@@ -34,7 +34,7 @@
 #include "email_dialog.h"
 #include "name_format_editor.h"
 #include "nag_dialog.h"
-#include "config_dialog.h"
+#include "monitor_dialog.h"
 #include "lib/config.h"
 #include "lib/ratio.h"
 #include "lib/filter.h"
@@ -126,11 +126,6 @@ private:
                table->Add (_background_image, wxGBPosition (r, 1));
                ++r;
 
-               add_label_to_sizer (table, _panel, _("Watermark image"), true, wxGBPosition (r, 0));
-               _watermark = new FilePickerCtrl (_panel, _("Select image file"), "*.png;*.jpg;*.jpeg;*.tif;*.tiff", true);
-               table->Add (_watermark, wxGBPosition (r, 1));
-               ++r;
-
                add_label_to_sizer (table, _panel, _("KDM server URL"), true, wxGBPosition(r, 0));
                _kdm_server_url = new wxTextCtrl (_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(400, -1));
                table->Add (_kdm_server_url, wxGBPosition (r, 1));
@@ -146,7 +141,6 @@ private:
 #ifdef DCPOMATIC_VARIANT_SWAROOP
                _background_image->Bind (wxEVT_FILEPICKER_CHANGED, bind(&PlayerGeneralPage::background_image_changed, this));
                _kdm_server_url->Bind (wxEVT_TEXT, bind(&PlayerGeneralPage::kdm_server_url_changed, this));
-               _watermark->Bind (wxEVT_TEXT, bind(&PlayerGeneralPage::watermark_changed, this));
 #endif
        }
 
@@ -184,9 +178,6 @@ private:
                        checked_set (_background_image, *config->player_background_image());
                }
                checked_set (_kdm_server_url, config->kdm_server_url());
-               if (config->player_watermark()) {
-                       checked_set (_watermark, *config->player_watermark());
-               }
 #endif
        }
 
@@ -241,11 +232,6 @@ private:
        {
                Config::instance()->set_kdm_server_url(wx_to_std(_kdm_server_url->GetValue()));
        }
-
-       void watermark_changed ()
-       {
-               Config::instance()->set_player_watermark(wx_to_std(_watermark->GetPath()));
-       }
 #endif
 
        wxChoice* _player_mode;
@@ -257,10 +243,157 @@ private:
 #ifdef DCPOMATIC_VARIANT_SWAROOP
        FilePickerCtrl* _background_image;
        wxTextCtrl* _kdm_server_url;
-       FilePickerCtrl* _watermark;
 #endif
 };
 
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+class WatermarkPage : public StandardPage
+{
+public:
+       WatermarkPage (wxSize panel_size, int border)
+               : StandardPage (panel_size, border)
+       {}
+
+       wxString GetName () const
+       {
+               return _("Watermark");
+       }
+
+private:
+       void setup ()
+       {
+               wxGridBagSizer* table = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+               _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border);
+
+               int r = 0;
+
+               add_label_to_sizer (table, _panel, _("Theatre name"), true, wxGBPosition(r, 0));
+               _theatre = new wxTextCtrl (_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(300, -1));
+               table->Add (_theatre, wxGBPosition(r, 1), wxGBSpan(1, 2));
+               ++r;
+
+               add_label_to_sizer (table, _panel, _("Period"), true, wxGBPosition(r, 0));
+               _period = new wxSpinCtrl (_panel, wxID_ANY);
+               _period->SetRange (1, 60);
+               table->Add (_period, wxGBPosition(r, 1));
+               add_label_to_sizer (table, _panel, _("minutes"), false, wxGBPosition(r, 2));
+               ++r;
+
+               add_label_to_sizer (table, _panel, _("Duration"), true, wxGBPosition(r, 0));
+               _duration = new wxSpinCtrl (_panel, wxID_ANY);
+               _duration->SetRange (100, 5000);
+               table->Add (_duration, wxGBPosition(r, 1));
+               add_label_to_sizer (table, _panel, _("milliseconds"), false, wxGBPosition(r, 2));
+               ++r;
+
+               _theatre->Bind (wxEVT_TEXT, bind(&WatermarkPage::theatre_changed, this));
+               _duration->Bind (wxEVT_SPINCTRL, bind(&WatermarkPage::duration_changed, this));
+               _period->Bind (wxEVT_SPINCTRL, bind(&WatermarkPage::period_changed, this));
+       }
+
+       void config_changed ()
+       {
+               Config* config = Config::instance ();
+               checked_set (_theatre, config->player_watermark_theatre());
+               checked_set (_duration, config->player_watermark_duration());
+               checked_set (_period, config->player_watermark_period());
+       }
+
+       void theatre_changed ()
+       {
+               Config::instance()->set_player_watermark_theatre(wx_to_std(_theatre->GetValue()));
+       }
+
+       void period_changed ()
+       {
+               Config::instance()->set_player_watermark_period(_period->GetValue());
+       }
+
+       void duration_changed ()
+       {
+               Config::instance()->set_player_watermark_duration(_duration->GetValue());
+       }
+
+       wxTextCtrl* _theatre;
+       wxSpinCtrl* _period;
+       wxSpinCtrl* _duration;
+};
+
+class DevicesPage : public StandardPage
+{
+public:
+       DevicesPage (wxSize panel_size, int border)
+               : StandardPage (panel_size, border)
+       {}
+
+       wxString GetName () const
+       {
+               return _("Devices");
+       }
+
+private:
+       void setup ()
+       {
+               vector<string> columns;
+               columns.push_back(wx_to_std(_("Manufacturer ID")));
+               columns.push_back(wx_to_std(_("Product code")));
+               columns.push_back(wx_to_std(_("Serial")));
+               columns.push_back(wx_to_std(_("Manufacture week")));
+               columns.push_back(wx_to_std(_("Manufacture year")));
+               _monitor_list = new EditableList<Monitor, MonitorDialog> (
+                       _panel,
+                       columns,
+                       boost::bind (&Config::required_monitors, Config::instance()),
+                       boost::bind (&Config::set_required_monitors, Config::instance(), _1),
+                       boost::bind (&DevicesPage::monitor_column, this, _1, _2),
+                       true,
+                       true,
+                       100
+                       );
+               _panel->GetSizer()->Add(_monitor_list, 1, wxEXPAND | wxALL, _border);
+
+               wxButton* get = new wxButton(_panel, wxID_ANY, _("Read current devices"));
+               _panel->GetSizer()->Add(get, 0, wxEXPAND | wxALL, DCPOMATIC_SIZER_GAP);
+               get->Bind(wxEVT_BUTTON, bind(&DevicesPage::get_clicked, this));
+       }
+
+       void get_clicked ()
+       {
+               Config::instance()->set_required_monitors(get_monitors());
+               _monitor_list->refresh ();
+       }
+
+       string monitor_column (Monitor m, int c)
+       {
+               switch (c) {
+               case 0:
+                       return m.manufacturer_id;
+               case 1:
+                       return locale_convert<string>(m.manufacturer_product_code);
+               case 2:
+                       return locale_convert<string>(m.serial_number);
+               case 3:
+                       return locale_convert<string>(m.week_of_manufacture);
+               case 4:
+                       return locale_convert<string>(m.year_of_manufacture);
+               default:
+                       DCPOMATIC_ASSERT(false);
+               }
+
+               return "";
+       }
+
+       void config_changed ()
+       {
+               _monitor_list->refresh ();
+       }
+
+private:
+       EditableList<Monitor, MonitorDialog>* _monitor_list;
+};
+
+#endif
+
 wxPreferencesEditor*
 create_player_config_dialog ()
 {
@@ -278,7 +411,11 @@ create_player_config_dialog ()
        int const border = 8;
 #endif
 
-       e->AddPage (new PlayerGeneralPage (ps, border));
-       e->AddPage (new KeysPage (ps, border));
+       e->AddPage (new PlayerGeneralPage(ps, border));
+       e->AddPage (new KeysPage(ps, border));
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       e->AddPage (new WatermarkPage(ps, border));
+       e->AddPage (new DevicesPage(ps, border));
+#endif
        return e;
 }