2 Copyright (C) 2012-2017 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 "dir_picker_ctrl.h"
30 #include "file_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 second monitor"));
94 table->Add (_player_mode, wxGBPosition(r, 1));
97 _respect_kdm = new wxCheckBox (_panel, wxID_ANY, _("Respect KDM validity periods"));
98 table->Add (_respect_kdm, wxGBPosition(r, 0), wxGBSpan(1, 2));
101 add_label_to_sizer (table, _panel, _("Log file"), true, wxGBPosition (r, 0));
102 _log_file = new FilePickerCtrl (_panel, _("Select log file"), "*", true);
103 table->Add (_log_file, wxGBPosition (r, 1));
106 _player_mode->Bind (wxEVT_CHOICE, bind(&PlayerGeneralPage::player_mode_changed, this));
107 _respect_kdm->Bind (wxEVT_CHECKBOX, bind(&PlayerGeneralPage::respect_kdm_changed, this));
108 _log_file->Bind (wxEVT_FILEPICKER_CHANGED, bind(&PlayerGeneralPage::log_file_changed, this));
111 void config_changed ()
113 GeneralPage::config_changed ();
115 Config* config = Config::instance ();
117 switch (config->player_mode()) {
118 case Config::PLAYER_MODE_WINDOW:
119 checked_set (_player_mode, 0);
121 case Config::PLAYER_MODE_FULL:
122 checked_set (_player_mode, 1);
124 case Config::PLAYER_MODE_DUAL:
125 checked_set (_player_mode, 2);
129 checked_set (_respect_kdm, config->respect_kdm_validity_periods());
130 if (config->player_log_file()) {
131 checked_set (_log_file, *config->player_log_file());
136 void player_mode_changed ()
138 switch (_player_mode->GetSelection()) {
140 Config::instance()->set_player_mode(Config::PLAYER_MODE_WINDOW);
143 Config::instance()->set_player_mode(Config::PLAYER_MODE_FULL);
146 Config::instance()->set_player_mode(Config::PLAYER_MODE_DUAL);
151 void respect_kdm_changed ()
153 Config::instance()->set_respect_kdm_validity_periods(_respect_kdm->GetValue());
156 void log_file_changed ()
158 Config::instance()->set_player_log_file(wx_to_std(_log_file->GetPath()));
161 wxChoice* _player_mode;
162 wxCheckBox* _respect_kdm;
163 FilePickerCtrl* _log_file;
167 create_player_config_dialog ()
169 wxPreferencesEditor* e = new wxPreferencesEditor ();
172 /* Width that we force some of the config panels to be on OSX so that
173 the containing window doesn't shrink too much when we select those panels.
174 This is obviously an unpleasant hack.
176 wxSize ps = wxSize (520, -1);
177 int const border = 16;
179 wxSize ps = wxSize (-1, -1);
180 int const border = 8;
183 e->AddPage (new PlayerGeneralPage (ps, border));
184 e->AddPage (new KeysPage (ps, border));