restart->SetFont (font);
++r;
- add_label_to_sizer (table, _panel, _("Threads to use for encoding on this host"), true, wxGBPosition (r, 0));
- _num_local_encoding_threads = new wxSpinCtrl (_panel);
- table->Add (_num_local_encoding_threads, wxGBPosition (r, 1));
+ add_label_to_sizer (table, _panel, _("Number of threads DCP-o-matic should use"), true, wxGBPosition (r, 0));
+ _master_encoding_threads = new wxSpinCtrl (_panel);
+ table->Add (_master_encoding_threads, wxGBPosition (r, 1));
+ ++r;
+
+ add_label_to_sizer (table, _panel, _("Number of threads DCP-o-matic encode server should use"), true, wxGBPosition (r, 0));
+ _server_encoding_threads = new wxSpinCtrl (_panel);
+ table->Add (_server_encoding_threads, wxGBPosition (r, 1));
++r;
add_label_to_sizer (table, _panel, _("Cinema and screen database file"), true, wxGBPosition (r, 0));
- _cinemas_file = new FilePickerCtrl (_panel, _("Select cinema and screen database file"), "*.xml");
+ _cinemas_file = new FilePickerCtrl (_panel, _("Select cinema and screen database file"), "*.xml", true);
table->Add (_cinemas_file, wxGBPosition (r, 1));
++r;
- add_label_to_sizer (table, _panel, _("Sound output"), true, wxGBPosition (r, 0));
- _sound_output = new wxChoice (_panel, wxID_ANY);
- table->Add (_sound_output, wxGBPosition (r, 1));
+ _preview_sound = new wxCheckBox (_panel, wxID_ANY, _("Play sound in the preview via"));
+ table->Add (_preview_sound, wxGBPosition (r, 0));
+ _preview_sound_output = new wxChoice (_panel, wxID_ANY);
+ table->Add (_preview_sound_output, wxGBPosition (r, 1));
++r;
#ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
for (unsigned int i = 0; i < audio.getDeviceCount(); ++i) {
RtAudio::DeviceInfo dev = audio.getDeviceInfo (i);
if (dev.probed && dev.outputChannels > 0) {
- _sound_output->Append (std_to_wx (dev.name));
+ _preview_sound_output->Append (std_to_wx (dev.name));
}
}
- _set_language->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::set_language_changed, this));
- _language->Bind (wxEVT_CHOICE, boost::bind (&GeneralPage::language_changed, this));
- _cinemas_file->Bind (wxEVT_FILEPICKER_CHANGED, boost::bind (&GeneralPage::cinemas_file_changed, this));
- _sound_output->Bind (wxEVT_CHOICE, boost::bind (&GeneralPage::sound_output_changed, this));
+ _set_language->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::set_language_changed, this));
+ _language->Bind (wxEVT_CHOICE, boost::bind (&GeneralPage::language_changed, this));
+ _cinemas_file->Bind (wxEVT_FILEPICKER_CHANGED, boost::bind (&GeneralPage::cinemas_file_changed, this));
+ _preview_sound->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::preview_sound_changed, this));
+ _preview_sound_output->Bind (wxEVT_CHOICE, boost::bind (&GeneralPage::preview_sound_output_changed, this));
- _num_local_encoding_threads->SetRange (1, 128);
- _num_local_encoding_threads->Bind (wxEVT_SPINCTRL, boost::bind (&GeneralPage::num_local_encoding_threads_changed, this));
+ _master_encoding_threads->SetRange (1, 128);
+ _master_encoding_threads->Bind (wxEVT_SPINCTRL, boost::bind (&GeneralPage::master_encoding_threads_changed, this));
+ _server_encoding_threads->SetRange (1, 128);
+ _server_encoding_threads->Bind (wxEVT_SPINCTRL, boost::bind (&GeneralPage::server_encoding_threads_changed, this));
#ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
_analyse_ebur128->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::analyse_ebur128_changed, this));
checked_set (_language, lang);
- checked_set (_num_local_encoding_threads, config->num_local_encoding_threads ());
+ checked_set (_master_encoding_threads, config->master_encoding_threads ());
+ checked_set (_server_encoding_threads, config->server_encoding_threads ());
#ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
checked_set (_analyse_ebur128, config->analyse_ebur128 ());
#endif
checked_set (_issuer, config->dcp_issuer ());
checked_set (_creator, config->dcp_creator ());
checked_set (_cinemas_file, config->cinemas_file());
+ checked_set (_preview_sound, config->preview_sound());
- optional<string> const current_so = get_sound_output ();
+ optional<string> const current_so = get_preview_sound_output ();
string configured_so;
- if (config->sound_output()) {
- configured_so = config->sound_output().get();
+ if (config->preview_sound_output()) {
+ configured_so = config->preview_sound_output().get();
} else {
/* No configured output means we should use the default */
RtAudio audio (DCPOMATIC_RTAUDIO_API);
}
if (!current_so || *current_so != configured_so) {
- /* Update _sound_output with the configured value */
+ /* Update _preview_sound_output with the configured value */
unsigned int i = 0;
- while (i < _sound_output->GetCount()) {
- if (_sound_output->GetString(i) == std_to_wx(configured_so)) {
- _sound_output->SetSelection (i);
+ while (i < _preview_sound_output->GetCount()) {
+ if (_preview_sound_output->GetString(i) == std_to_wx(configured_so)) {
+ _preview_sound_output->SetSelection (i);
break;
}
++i;
setup_sensitivity ();
}
- /** @return Currently-selected sound output in the dialogue */
- optional<string> get_sound_output ()
+ /** @return Currently-selected preview sound output in the dialogue */
+ optional<string> get_preview_sound_output ()
{
- int const sel = _sound_output->GetSelection ();
+ int const sel = _preview_sound_output->GetSelection ();
if (sel == wxNOT_FOUND) {
return optional<string> ();
}
- return wx_to_std (_sound_output->GetString (sel));
+ return wx_to_std (_preview_sound_output->GetString (sel));
}
void setup_sensitivity ()
{
_language->Enable (_set_language->GetValue ());
_check_for_test_updates->Enable (_check_for_updates->GetValue ());
+ _preview_sound_output->Enable (_preview_sound->GetValue ());
}
void set_language_changed ()
Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ());
}
- void num_local_encoding_threads_changed ()
+ void master_encoding_threads_changed ()
+ {
+ Config::instance()->set_master_encoding_threads (_master_encoding_threads->GetValue ());
+ }
+
+ void server_encoding_threads_changed ()
{
- Config::instance()->set_num_local_encoding_threads (_num_local_encoding_threads->GetValue ());
+ Config::instance()->set_server_encoding_threads (_server_encoding_threads->GetValue ());
}
void issuer_changed ()
Config::instance()->set_cinemas_file (wx_to_std (_cinemas_file->GetPath ()));
}
- void sound_output_changed ()
+ void preview_sound_changed ()
+ {
+ Config::instance()->set_preview_sound (_preview_sound->GetValue ());
+ }
+
+ void preview_sound_output_changed ()
{
RtAudio audio (DCPOMATIC_RTAUDIO_API);
- optional<string> const so = get_sound_output();
+ optional<string> const so = get_preview_sound_output();
if (!so || *so == audio.getDeviceInfo(audio.getDefaultOutputDevice()).name) {
- Config::instance()->unset_sound_output ();
+ Config::instance()->unset_preview_sound_output ();
} else {
- Config::instance()->set_sound_output (*so);
+ Config::instance()->set_preview_sound_output (*so);
}
}
wxCheckBox* _set_language;
wxChoice* _language;
- wxSpinCtrl* _num_local_encoding_threads;
+ wxSpinCtrl* _master_encoding_threads;
+ wxSpinCtrl* _server_encoding_threads;
FilePickerCtrl* _cinemas_file;
- wxChoice* _sound_output;
+ wxCheckBox* _preview_sound;
+ wxChoice* _preview_sound_output;
#ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
wxCheckBox* _analyse_ebur128;
#endif
_container = new wxChoice (_panel, wxID_ANY);
table->Add (_container);
+ add_label_to_sizer (table, _panel, _("Default scale-to"), true);
+ _scale_to = new wxChoice (_panel, wxID_ANY);
+ table->Add (_scale_to);
+
add_label_to_sizer (table, _panel, _("Default content type"), true);
_dcp_content_type = new wxChoice (_panel, wxID_ANY);
table->Add (_dcp_content_type);
_container->Bind (wxEVT_CHOICE, boost::bind (&DefaultsPage::container_changed, this));
+ _scale_to->Append (_("Guess from content"));
+
+ for (size_t i = 0; i < ratios.size(); ++i) {
+ _scale_to->Append (std_to_wx (ratios[i]->nickname ()));
+ }
+
+ _scale_to->Bind (wxEVT_CHOICE, boost::bind (&DefaultsPage::scale_to_changed, this));
+
vector<DCPContentType const *> const ct = DCPContentType::all ();
for (size_t i = 0; i < ct.size(); ++i) {
_dcp_content_type->Append (std_to_wx (ct[i]->pretty_name ()));
if (ratios[i] == config->default_container ()) {
_container->SetSelection (i);
}
+ if (ratios[i] == config->default_scale_to ()) {
+ _scale_to->SetSelection (i + 1);
+ }
+ }
+
+ if (!config->default_scale_to()) {
+ _scale_to->SetSelection (0);
}
vector<DCPContentType const *> const ct = DCPContentType::all ();
Config::instance()->set_default_container (ratio[_container->GetSelection()]);
}
+ void scale_to_changed ()
+ {
+ int const s = _scale_to->GetSelection ();
+ if (s == 0) {
+ Config::instance()->set_default_scale_to (0);
+ } else {
+ vector<Ratio const *> ratio = Ratio::all ();
+ Config::instance()->set_default_scale_to (ratio[s - 1]);
+ }
+ }
+
void dcp_content_type_changed ()
{
vector<DCPContentType const *> ct = DCPContentType::all ();
wxDirPickerCtrl* _kdm_directory;
#endif
wxChoice* _container;
+ wxChoice* _scale_to;
wxChoice* _dcp_content_type;
wxChoice* _dcp_audio_channels;
wxChoice* _standard;
wxButton* _reset_kdm_email;
};
+class CoverSheetPage : public StandardPage
+{
+public:
+
+ CoverSheetPage (wxSize panel_size, int border)
+#ifdef DCPOMATIC_OSX
+ /* We have to force both width and height of this one */
+ : StandardPage (wxSize (480, 128), border)
+#else
+ : StandardPage (panel_size, border)
+#endif
+ {}
+
+ wxString GetName () const
+ {
+ return _("Cover Sheet");
+ }
+
+#ifdef DCPOMATIC_OSX
+ wxBitmap GetLargeIcon () const
+ {
+ return wxBitmap ("cover_sheet", wxBITMAP_TYPE_PNG_RESOURCE);
+ }
+#endif
+
+private:
+ void setup ()
+ {
+ _cover_sheet = new wxTextCtrl (_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (-1, 200), wxTE_MULTILINE);
+ _panel->GetSizer()->Add (_cover_sheet, 0, wxEXPAND | wxALL, _border);
+
+ _reset_cover_sheet = new wxButton (_panel, wxID_ANY, _("Reset to default text"));
+ _panel->GetSizer()->Add (_reset_cover_sheet, 0, wxEXPAND | wxALL, _border);
+
+ _cover_sheet->Bind (wxEVT_TEXT, boost::bind (&CoverSheetPage::cover_sheet_changed, this));
+ _reset_cover_sheet->Bind (wxEVT_BUTTON, boost::bind (&CoverSheetPage::reset_cover_sheet, this));
+ }
+
+ void config_changed ()
+ {
+ checked_set (_cover_sheet, Config::instance()->cover_sheet ());
+ }
+
+ void cover_sheet_changed ()
+ {
+ if (_cover_sheet->GetValue().IsEmpty ()) {
+ /* Sometimes we get sent an erroneous notification that the cover sheet
+ is empty; I don't know why.
+ */
+ return;
+ }
+ Config::instance()->set_cover_sheet (wx_to_std (_cover_sheet->GetValue ()));
+ }
+
+ void reset_cover_sheet ()
+ {
+ Config::instance()->reset_cover_sheet ();
+ checked_set (_cover_sheet, Config::instance()->cover_sheet ());
+ }
+
+ wxTextCtrl* _cover_sheet;
+ wxButton* _reset_cover_sheet;
+};
+
+
/** @class AdvancedPage
* @brief Advanced page of the preferences dialog.
*/
e->AddPage (new KeysPage (ps, border));
e->AddPage (new TMSPage (ps, border));
e->AddPage (new KDMEmailPage (ps, border));
+ e->AddPage (new CoverSheetPage (ps, border));
e->AddPage (new AdvancedPage (ps, border));
return e;
}