2 Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
4 This file is part of DCP-o-matic.
6 DCP-o-matic is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 DCP-o-matic is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
21 /** @file src/player_config_dialog.cc
22 * @brief A dialogue to edit DCP-o-matic Player configuration.
25 #include "config_dialog.h"
27 #include "editable_list.h"
28 #include "filter_dialog.h"
29 #include "file_picker_ctrl.h"
30 #include "dir_picker_ctrl.h"
31 #include "isdcf_metadata_dialog.h"
32 #include "server_dialog.h"
33 #include "make_chain_dialog.h"
34 #include "email_dialog.h"
35 #include "name_format_editor.h"
36 #include "nag_dialog.h"
37 #include "config_dialog.h"
38 #include "lib/config.h"
39 #include "lib/ratio.h"
40 #include "lib/filter.h"
41 #include "lib/dcp_content_type.h"
44 #include "lib/cross.h"
45 #include "lib/exceptions.h"
46 #include <dcp/locale_convert.h>
47 #include <dcp/exceptions.h>
48 #include <dcp/certificate_chain.h>
49 #include <wx/stdpaths.h>
50 #include <wx/preferences.h>
51 #include <wx/spinctrl.h>
52 #include <wx/filepicker.h>
54 #include <boost/filesystem.hpp>
55 #include <boost/foreach.hpp>
66 using boost::shared_ptr;
67 using boost::function;
68 using boost::optional;
69 using dcp::locale_convert;
71 class PlayerGeneralPage : public GeneralPage
74 PlayerGeneralPage (wxSize panel_size, int border)
75 : GeneralPage (panel_size, border)
81 wxGridBagSizer* table = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
82 _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border);
85 add_language_controls (table, r);
86 add_play_sound_controls (table, r);
87 add_update_controls (table, r);
89 add_label_to_sizer (table, _panel, _("Start player as"), true, wxGBPosition(r, 0));
90 _player_mode = new wxChoice (_panel, wxID_ANY);
91 _player_mode->Append (_("window"));
92 _player_mode->Append (_("full screen"));
93 _player_mode->Append (_("full screen with controls on other monitor"));
94 table->Add (_player_mode, wxGBPosition(r, 1));
97 add_label_to_sizer (table, _panel, _("Dual-screen displays"), true, wxGBPosition(r, 0));
98 _image_display = new wxChoice (_panel, wxID_ANY);
99 _image_display->Append (_("Image on primary, controls on secondary"));
100 _image_display->Append (_("Image on secondary, controls on primary"));
101 table->Add (_image_display, wxGBPosition(r, 1));
104 _respect_kdm = new wxCheckBox (_panel, wxID_ANY, _("Respect KDM validity periods"));
105 table->Add (_respect_kdm, wxGBPosition(r, 0), wxGBSpan(1, 2));
108 add_label_to_sizer (table, _panel, _("Log file"), true, wxGBPosition (r, 0));
109 _log_file = new FilePickerCtrl (_panel, _("Select log file"), "*", true);
110 table->Add (_log_file, wxGBPosition (r, 1));
113 add_label_to_sizer (table, _panel, _("DCP directory"), true, wxGBPosition (r, 0));
114 _dcp_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1));
115 table->Add (_dcp_directory, wxGBPosition (r, 1));
118 add_label_to_sizer (table, _panel, _("KDM directory"), true, wxGBPosition (r, 0));
119 _kdm_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1));
120 table->Add (_kdm_directory, wxGBPosition (r, 1));
123 _player_mode->Bind (wxEVT_CHOICE, bind(&PlayerGeneralPage::player_mode_changed, this));
124 _image_display->Bind (wxEVT_CHOICE, bind(&PlayerGeneralPage::image_display_changed, this));
125 _respect_kdm->Bind (wxEVT_CHECKBOX, bind(&PlayerGeneralPage::respect_kdm_changed, this));
126 _log_file->Bind (wxEVT_FILEPICKER_CHANGED, bind(&PlayerGeneralPage::log_file_changed, this));
127 _dcp_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&PlayerGeneralPage::dcp_directory_changed, this));
128 _kdm_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&PlayerGeneralPage::kdm_directory_changed, this));
131 void config_changed ()
133 GeneralPage::config_changed ();
135 Config* config = Config::instance ();
137 switch (config->player_mode()) {
138 case Config::PLAYER_MODE_WINDOW:
139 checked_set (_player_mode, 0);
141 case Config::PLAYER_MODE_FULL:
142 checked_set (_player_mode, 1);
144 case Config::PLAYER_MODE_DUAL:
145 checked_set (_player_mode, 2);
149 checked_set (_image_display, config->image_display());
150 checked_set (_respect_kdm, config->respect_kdm_validity_periods());
151 if (config->player_log_file()) {
152 checked_set (_log_file, *config->player_log_file());
154 if (config->player_dcp_directory()) {
155 checked_set (_dcp_directory, *config->player_dcp_directory());
157 if (config->player_kdm_directory()) {
158 checked_set (_kdm_directory, *config->player_kdm_directory());
163 void player_mode_changed ()
165 switch (_player_mode->GetSelection()) {
167 Config::instance()->set_player_mode(Config::PLAYER_MODE_WINDOW);
170 Config::instance()->set_player_mode(Config::PLAYER_MODE_FULL);
173 Config::instance()->set_player_mode(Config::PLAYER_MODE_DUAL);
178 void image_display_changed ()
180 Config::instance()->set_image_display(_image_display->GetSelection());
183 void respect_kdm_changed ()
185 Config::instance()->set_respect_kdm_validity_periods(_respect_kdm->GetValue());
188 void log_file_changed ()
190 Config::instance()->set_player_log_file(wx_to_std(_log_file->GetPath()));
193 void dcp_directory_changed ()
195 Config::instance()->set_player_dcp_directory(wx_to_std(_dcp_directory->GetPath()));
198 void kdm_directory_changed ()
200 Config::instance()->set_player_kdm_directory(wx_to_std(_kdm_directory->GetPath()));
203 wxChoice* _player_mode;
204 wxChoice* _image_display;
205 wxCheckBox* _respect_kdm;
206 FilePickerCtrl* _log_file;
207 wxDirPickerCtrl* _dcp_directory;
208 wxDirPickerCtrl* _kdm_directory;
212 create_player_config_dialog ()
214 wxPreferencesEditor* e = new wxPreferencesEditor ();
217 /* Width that we force some of the config panels to be on OSX so that
218 the containing window doesn't shrink too much when we select those panels.
219 This is obviously an unpleasant hack.
221 wxSize ps = wxSize (520, -1);
222 int const border = 16;
224 wxSize ps = wxSize (-1, -1);
225 int const border = 8;
228 e->AddPage (new PlayerGeneralPage (ps, border));
229 e->AddPage (new KeysPage (ps, border));