Emit no audio from DCPs if none is mapped
[dcpomatic.git] / src / wx / player_config_dialog.cc
index 802ab6b3bcb7ee40ee3d68818db43eabaa5ab221..58874e50b59ac63cb589ebd32bce6a28135823a7 100644 (file)
 
 */
 
+
 /** @file src/player_config_dialog.cc
  *  @brief A dialogue to edit DCP-o-matic Player configuration.
  */
 
+
+#include "check_box.h"
 #include "config_dialog.h"
-#include "wx_util.h"
+#include "dir_picker_ctrl.h"
 #include "editable_list.h"
-#include "filter_dialog.h"
+#include "email_dialog.h"
 #include "file_picker_ctrl.h"
-#include "dir_picker_ctrl.h"
-#include "server_dialog.h"
+#include "filter_dialog.h"
 #include "make_chain_dialog.h"
-#include "email_dialog.h"
-#include "name_format_editor.h"
 #include "nag_dialog.h"
-#include "check_box.h"
+#include "name_format_editor.h"
+#include "server_dialog.h"
 #include "static_text.h"
+#include "wx_util.h"
 #include "lib/config.h"
-#include "lib/ratio.h"
-#include "lib/filter.h"
+#include "lib/cross.h"
 #include "lib/dcp_content_type.h"
+#include "lib/exceptions.h"
+#include "lib/filter.h"
 #include "lib/log.h"
+#include "lib/ratio.h"
 #include "lib/util.h"
-#include "lib/cross.h"
-#include "lib/exceptions.h"
-#include <dcp/locale_convert.h>
-#include <dcp/exceptions.h>
 #include <dcp/certificate_chain.h>
-#include <wx/stdpaths.h>
+#include <dcp/exceptions.h>
+#include <dcp/locale_convert.h>
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
+#include <wx/filepicker.h>
 #include <wx/preferences.h>
 #include <wx/spinctrl.h>
-#include <wx/filepicker.h>
+#include <wx/stdpaths.h>
+LIBDCP_ENABLE_WARNINGS
 #include <RtAudio.h>
 #include <boost/filesystem.hpp>
-#include <iostream>
 
-using std::vector;
-using std::string;
+
+using std::function;
 using std::list;
-using std::cout;
-using std::pair;
 using std::make_pair;
 using std::map;
-using boost::bind;
+using std::pair;
 using std::shared_ptr;
-using std::function;
+using std::string;
+using std::vector;
+using boost::bind;
 using boost::optional;
 #if BOOST_VERSION >= 106100
 using namespace boost::placeholders;
 #endif
 using dcp::locale_convert;
 
+
 class PlayerGeneralPage : public GeneralPage
 {
 public:
@@ -78,7 +83,7 @@ public:
        {}
 
 private:
-       void setup ()
+       void setup () override
        {
                wxGridBagSizer* table = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
                _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border);
@@ -91,7 +96,7 @@ private:
                _player_mode = new wxChoice (_panel, wxID_ANY);
                _player_mode->Append (_("window"));
                _player_mode->Append (_("full screen"));
-               _player_mode->Append (_("full screen with controls on other monitor"));
+               _player_mode->Append (_("full screen with separate advanced controls"));
                table->Add (_player_mode, wxGBPosition(r, 1));
                ++r;
 
@@ -120,25 +125,19 @@ private:
                table->Add (_respect_kdm, wxGBPosition(r, 0), wxGBSpan(1, 2));
                ++r;
 
-               add_label_to_sizer (table, _panel, _("Activity log file"), true, wxGBPosition (r, 0));
-               _activity_log_file = new FilePickerCtrl (_panel, _("Select activity log file"), "*", false, true);
-               table->Add (_activity_log_file, wxGBPosition(r, 1));
-               ++r;
-
                add_label_to_sizer (table, _panel, _("Debug log file"), true, wxGBPosition (r, 0));
-               _debug_log_file = new FilePickerCtrl (_panel, _("Select debug log file"), "*", false, true);
+               _debug_log_file = new FilePickerCtrl(_panel, _("Select debug log file"), "*", false, true, "DebugLogPath");
                table->Add (_debug_log_file, wxGBPosition(r, 1));
                ++r;
 
                _player_mode->Bind (wxEVT_CHOICE, bind(&PlayerGeneralPage::player_mode_changed, this));
                _image_display->Bind (wxEVT_CHOICE, bind(&PlayerGeneralPage::image_display_changed, this));
                _video_display_mode->Bind (wxEVT_CHOICE, bind(&PlayerGeneralPage::video_display_mode_changed, this));
-               _respect_kdm->Bind (wxEVT_CHECKBOX, bind(&PlayerGeneralPage::respect_kdm_changed, this));
-               _activity_log_file->Bind (wxEVT_FILEPICKER_CHANGED, bind(&PlayerGeneralPage::activity_log_file_changed, this));
+               _respect_kdm->bind(&PlayerGeneralPage::respect_kdm_changed, this);
                _debug_log_file->Bind (wxEVT_FILEPICKER_CHANGED, bind(&PlayerGeneralPage::debug_log_file_changed, this));
        }
 
-       void config_changed ()
+       void config_changed () override
        {
                GeneralPage::config_changed ();
 
@@ -167,9 +166,6 @@ private:
 
                checked_set (_image_display, config->image_display());
                checked_set (_respect_kdm, config->respect_kdm_validity_periods());
-               if (config->player_activity_log_file()) {
-                       checked_set (_activity_log_file, *config->player_activity_log_file());
-               }
                if (config->player_debug_log_file()) {
                        checked_set (_debug_log_file, *config->player_debug_log_file());
                }
@@ -210,21 +206,17 @@ private:
                Config::instance()->set_respect_kdm_validity_periods(_respect_kdm->GetValue());
        }
 
-       void activity_log_file_changed ()
-       {
-               Config::instance()->set_player_activity_log_file(wx_to_std(_activity_log_file->GetPath()));
-       }
-
        void debug_log_file_changed ()
        {
-               Config::instance()->set_player_debug_log_file(wx_to_std(_debug_log_file->GetPath()));
+               if (auto path = _debug_log_file->path()) {
+                       Config::instance()->set_player_debug_log_file(*path);
+               }
        }
 
        wxChoice* _player_mode;
        wxChoice* _image_display;
        wxChoice* _video_display_mode;
-       wxCheckBox* _respect_kdm;
-       FilePickerCtrl* _activity_log_file;
+       CheckBox* _respect_kdm;
        FilePickerCtrl* _debug_log_file;
 };
 
@@ -243,15 +235,15 @@ public:
                , _log_timing (0)
        {}
 
-       wxString GetName () const
+       wxString GetName () const override
        {
                return _("Advanced");
        }
 
 #ifdef DCPOMATIC_OSX
-       wxBitmap GetLargeIcon () const
+       wxBitmap GetLargeIcon () const override
        {
-               return wxBitmap ("advanced", wxBITMAP_TYPE_PNG_RESOURCE);
+               return wxBitmap(icon_path("advanced"), wxBITMAP_TYPE_PNG);
        }
 #endif
 
@@ -267,9 +259,9 @@ private:
                table->Add (m, 0, flags, DCPOMATIC_SIZER_Y_GAP);
        }
 
-       void setup ()
+       void setup () override
        {
-               wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+               auto table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
                table->AddGrowableCol (1, 1);
                _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border);
 
@@ -285,6 +277,8 @@ private:
                        /// TRANSLATORS: translate the word "Timing" here; do not include the "Config|" prefix
                        _log_timing = new CheckBox (_panel, S_("Config|Timing"));
                        t->Add (_log_timing, 1, wxEXPAND | wxALL);
+                       _log_debug_video_view = new CheckBox(_panel, _("Debug: video view"));
+                       t->Add(_log_debug_video_view, 1, wxEXPAND | wxALL);
                        table->Add (t, 0, wxALL, 6);
                }
 
@@ -294,18 +288,19 @@ private:
                table->AddSpacer (0);
 #endif
 
-               _log_general->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
-               _log_warning->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
-               _log_error->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
-               _log_timing->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::log_changed, this));
+               _log_general->bind(&PlayerAdvancedPage::log_changed, this);
+               _log_warning->bind(&PlayerAdvancedPage::log_changed, this);
+               _log_error->bind(&PlayerAdvancedPage::log_changed, this);
+               _log_timing->bind(&PlayerAdvancedPage::log_changed, this);
+               _log_debug_video_view->bind(&PlayerAdvancedPage::log_changed, this);
 #ifdef DCPOMATIC_WINDOWS
-               _win32_console->Bind (wxEVT_CHECKBOX, boost::bind (&PlayerAdvancedPage::win32_console_changed, this));
+               _win32_console->bind(&PlayerAdvancedPage::win32_console_changed, this);
 #endif
        }
 
-       void config_changed ()
+       void config_changed () override
        {
-               Config* config = Config::instance ();
+               auto config = Config::instance ();
 
                checked_set (_log_general, config->log_types() & LogEntry::TYPE_GENERAL);
                checked_set (_log_warning, config->log_types() & LogEntry::TYPE_WARNING);
@@ -331,6 +326,9 @@ private:
                if (_log_timing->GetValue ()) {
                        types |= LogEntry::TYPE_TIMING;
                }
+               if (_log_debug_video_view->GetValue()) {
+                       types |= LogEntry::TYPE_DEBUG_VIDEO_VIEW;
+               }
                Config::instance()->set_log_types (types);
        }
 
@@ -341,12 +339,13 @@ private:
        }
 #endif
 
-       wxCheckBox* _log_general;
-       wxCheckBox* _log_warning;
-       wxCheckBox* _log_error;
-       wxCheckBox* _log_timing;
+       CheckBox* _log_general;
+       CheckBox* _log_warning;
+       CheckBox* _log_error;
+       CheckBox* _log_timing;
+       CheckBox* _log_debug_video_view;
 #ifdef DCPOMATIC_WINDOWS
-       wxCheckBox* _win32_console;
+       CheckBox* _win32_console;
 #endif
 };
 
@@ -354,17 +353,17 @@ private:
 wxPreferencesEditor*
 create_player_config_dialog ()
 {
-       wxPreferencesEditor* e = new wxPreferencesEditor (_("DCP-o-matic Player Preferences"));
+       auto e = new wxPreferencesEditor (_("DCP-o-matic Player Preferences"));
 
 #ifdef DCPOMATIC_OSX
        /* Width that we force some of the config panels to be on OSX so that
           the containing window doesn't shrink too much when we select those panels.
           This is obviously an unpleasant hack.
        */
-       wxSize ps = wxSize (520, -1);
+       auto ps = wxSize (520, -1);
        int const border = 16;
 #else
-       wxSize ps = wxSize (-1, -1);
+       auto ps = wxSize (-1, -1);
        int const border = 8;
 #endif