From: Carl Hetherington Date: Sat, 29 Feb 2020 22:53:14 +0000 (+0100) Subject: Add 'proper' config dialog for the playlist editor. X-Git-Tag: v2.15.45~4 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=054695b21346c089cb0d6c84d82dbec935d2acd7 Add 'proper' config dialog for the playlist editor. --- diff --git a/src/tools/dcpomatic_playlist.cc b/src/tools/dcpomatic_playlist.cc index 7751fc1b3..f8b888fe3 100644 --- a/src/tools/dcpomatic_playlist.cc +++ b/src/tools/dcpomatic_playlist.cc @@ -23,7 +23,7 @@ #include "../wx/content_view.h" #include "../wx/dcpomatic_button.h" #include "../wx/about_dialog.h" -#include "../wx/player_config_dialog.h" +#include "../wx/playlist_editor_config_dialog.h" #include "../lib/util.h" #include "../lib/config.h" #include "../lib/cross.h" @@ -499,7 +499,7 @@ private: void edit_preferences () { if (!_config_dialog) { - _config_dialog = create_player_config_dialog (); + _config_dialog = create_playlist_editor_config_dialog (); } _config_dialog->Show (this); } diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 55d387528..272d2e8ee 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -1029,3 +1029,119 @@ SoundPage::get_sound_output () return wx_to_std (_sound_output->GetString (sel)); } + + +LocationsPage::LocationsPage (wxSize panel_size, int border) + : StandardPage (panel_size, border) +{ + +} + +wxString +LocationsPage::GetName () const +{ + return _("Locations"); +} + +#ifdef DCPOMATIC_OSX +wxBitmap +LocationsPage::GetLargeIcon () const +{ + return wxBitmap ("locations", wxBITMAP_TYPE_PNG_RESOURCE); +} +#endif + +void +LocationsPage::setup () +{ + + int r = 0; + + wxGridBagSizer* table = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); + _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border); + + add_label_to_sizer (table, _panel, _("Content directory"), true, wxGBPosition (r, 0)); + _content_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); + table->Add (_content_directory, wxGBPosition (r, 1)); + ++r; + + add_label_to_sizer (table, _panel, _("Playlist directory"), true, wxGBPosition (r, 0)); + _playlist_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); + table->Add (_playlist_directory, wxGBPosition (r, 1)); + ++r; + + add_label_to_sizer (table, _panel, _("KDM directory"), true, wxGBPosition (r, 0)); + _kdm_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); + table->Add (_kdm_directory, wxGBPosition (r, 1)); + ++r; + +#ifdef DCPOMATIC_VARIANT_SWAROOP + add_label_to_sizer (table, _panel, _("Background image"), true, wxGBPosition (r, 0)); + _background_image = new FilePickerCtrl (_panel, _("Select image file"), "*.png;*.jpg;*.jpeg;*.tif;*.tiff", true, false); + table->Add (_background_image, wxGBPosition (r, 1)); + ++r; +#endif + + _content_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::content_directory_changed, this)); + _playlist_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::playlist_directory_changed, this)); + _kdm_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::kdm_directory_changed, this)); +#ifdef DCPOMATIC_VARIANT_SWAROOP + _background_image->Bind (wxEVT_FILEPICKER_CHANGED, bind(&LocationsPage::background_image_changed, this)); +#endif +} + +void +LocationsPage::config_changed () +{ + Config* config = Config::instance (); + + if (config->player_content_directory()) { + checked_set (_content_directory, *config->player_content_directory()); + } + if (config->player_playlist_directory()) { + checked_set (_playlist_directory, *config->player_playlist_directory()); + } + if (config->player_kdm_directory()) { + checked_set (_kdm_directory, *config->player_kdm_directory()); + } +#ifdef DCPOMATIC_VARIANT_SWAROOP + if (config->player_background_image()) { + checked_set (_background_image, *config->player_background_image()); + } +#endif +} + +void +LocationsPage::content_directory_changed () +{ + Config::instance()->set_player_content_directory(wx_to_std(_content_directory->GetPath())); +} + +void +LocationsPage::playlist_directory_changed () +{ + Config::instance()->set_player_playlist_directory(wx_to_std(_playlist_directory->GetPath())); +} + +void +LocationsPage::kdm_directory_changed () +{ + Config::instance()->set_player_kdm_directory(wx_to_std(_kdm_directory->GetPath())); +} + +#ifdef DCPOMATIC_VARIANT_SWAROOP +void +LocationsPage::background_image_changed () +{ + boost::filesystem::path const f = wx_to_std(_background_image->GetPath()); + if (!boost::filesystem::is_regular_file(f) || !wxImage::CanRead(std_to_wx(f.string()))) { + error_dialog (0, _("Could not load image file.")); + if (Config::instance()->player_background_image()) { + checked_set (_background_image, *Config::instance()->player_background_image()); + } + return; + } + + Config::instance()->set_player_background_image(f); +} +#endif diff --git a/src/wx/config_dialog.h b/src/wx/config_dialog.h index 565ecf1c4..5203af609 100644 --- a/src/wx/config_dialog.h +++ b/src/wx/config_dialog.h @@ -214,4 +214,33 @@ private: Button* _reset_to_default; }; +class LocationsPage : public StandardPage +{ +public: + LocationsPage (wxSize panel_size, int border); + + wxString GetName () const; + +#ifdef DCPOMATIC_OSX + wxBitmap GetLargeIcon () const; +#endif + +private: + void setup (); + void config_changed (); + void content_directory_changed (); + void playlist_directory_changed (); + void kdm_directory_changed (); + +#ifdef DCPOMATIC_VARIANT_SWAROOP + void background_image_changed (); +#endif + + wxDirPickerCtrl* _content_directory; + wxDirPickerCtrl* _playlist_directory; + wxDirPickerCtrl* _kdm_directory; +#ifdef DCPOMATIC_VARIANT_SWAROOP + FilePickerCtrl* _background_image; +#endif +}; #endif diff --git a/src/wx/player_config_dialog.cc b/src/wx/player_config_dialog.cc index 11092efe4..5a21d231b 100644 --- a/src/wx/player_config_dialog.cc +++ b/src/wx/player_config_dialog.cc @@ -266,122 +266,6 @@ private: #endif }; -class LocationsPage : public StandardPage -{ -public: - LocationsPage (wxSize panel_size, int border) - : StandardPage (panel_size, border) - {} - - wxString GetName () const - { - return _("Locations"); - } - -#ifdef DCPOMATIC_OSX - wxBitmap GetLargeIcon () const - { - return wxBitmap ("locations", wxBITMAP_TYPE_PNG_RESOURCE); - } -#endif - -private: - void setup () - { - - int r = 0; - - wxGridBagSizer* table = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP); - _panel->GetSizer()->Add (table, 1, wxALL | wxEXPAND, _border); - - add_label_to_sizer (table, _panel, _("Content directory"), true, wxGBPosition (r, 0)); - _content_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); - table->Add (_content_directory, wxGBPosition (r, 1)); - ++r; - - add_label_to_sizer (table, _panel, _("Playlist directory"), true, wxGBPosition (r, 0)); - _playlist_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); - table->Add (_playlist_directory, wxGBPosition (r, 1)); - ++r; - - add_label_to_sizer (table, _panel, _("KDM directory"), true, wxGBPosition (r, 0)); - _kdm_directory = new wxDirPickerCtrl (_panel, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); - table->Add (_kdm_directory, wxGBPosition (r, 1)); - ++r; - -#ifdef DCPOMATIC_VARIANT_SWAROOP - add_label_to_sizer (table, _panel, _("Background image"), true, wxGBPosition (r, 0)); - _background_image = new FilePickerCtrl (_panel, _("Select image file"), "*.png;*.jpg;*.jpeg;*.tif;*.tiff", true, false); - table->Add (_background_image, wxGBPosition (r, 1)); - ++r; -#endif - - _content_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::content_directory_changed, this)); - _playlist_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::playlist_directory_changed, this)); - _kdm_directory->Bind (wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::kdm_directory_changed, this)); -#ifdef DCPOMATIC_VARIANT_SWAROOP - _background_image->Bind (wxEVT_FILEPICKER_CHANGED, bind(&LocationsPage::background_image_changed, this)); -#endif - } - - void config_changed () - { - Config* config = Config::instance (); - - if (config->player_content_directory()) { - checked_set (_content_directory, *config->player_content_directory()); - } - if (config->player_playlist_directory()) { - checked_set (_playlist_directory, *config->player_playlist_directory()); - } - if (config->player_kdm_directory()) { - checked_set (_kdm_directory, *config->player_kdm_directory()); - } -#ifdef DCPOMATIC_VARIANT_SWAROOP - if (config->player_background_image()) { - checked_set (_background_image, *config->player_background_image()); - } -#endif - } - - void content_directory_changed () - { - Config::instance()->set_player_content_directory(wx_to_std(_content_directory->GetPath())); - } - - void playlist_directory_changed () - { - Config::instance()->set_player_playlist_directory(wx_to_std(_playlist_directory->GetPath())); - } - - void kdm_directory_changed () - { - Config::instance()->set_player_kdm_directory(wx_to_std(_kdm_directory->GetPath())); - } - -#ifdef DCPOMATIC_VARIANT_SWAROOP - void background_image_changed () - { - boost::filesystem::path const f = wx_to_std(_background_image->GetPath()); - if (!boost::filesystem::is_regular_file(f) || !wxImage::CanRead(std_to_wx(f.string()))) { - error_dialog (0, _("Could not load image file.")); - if (Config::instance()->player_background_image()) { - checked_set (_background_image, *Config::instance()->player_background_image()); - } - return; - } - - Config::instance()->set_player_background_image(f); - } -#endif - - wxDirPickerCtrl* _content_directory; - wxDirPickerCtrl* _playlist_directory; - wxDirPickerCtrl* _kdm_directory; -#ifdef DCPOMATIC_VARIANT_SWAROOP - FilePickerCtrl* _background_image; -#endif -}; /** @class PlayerAdvancedPage * @brief Advanced page of the preferences dialog for the player. diff --git a/src/wx/playlist_editor_config_dialog.cc b/src/wx/playlist_editor_config_dialog.cc new file mode 100644 index 000000000..63a28b5dd --- /dev/null +++ b/src/wx/playlist_editor_config_dialog.cc @@ -0,0 +1,47 @@ +/* + Copyright (C) 2012-2020 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include "playlist_editor_config_dialog.h" +#include "config_dialog.h" + +/** @file src/playlist_editor_config_dialog.cc + * @brief A dialogue to edit DCP-o-matic Playlist Editor configuration. + */ + +wxPreferencesEditor* +create_playlist_editor_config_dialog () +{ + wxPreferencesEditor* e = new wxPreferencesEditor (_("DCP-o-matic Playlist Editor 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); + int const border = 16; +#else + wxSize ps = wxSize (-1, -1); + int const border = 8; +#endif + + e->AddPage (new LocationsPage(ps, border)); + return e; +} diff --git a/src/wx/playlist_editor_config_dialog.h b/src/wx/playlist_editor_config_dialog.h new file mode 100644 index 000000000..7aea84a46 --- /dev/null +++ b/src/wx/playlist_editor_config_dialog.h @@ -0,0 +1,27 @@ +/* + Copyright (C) 2012-2020 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +/** @file src/playlist_editor_config_dialog.h + * @brief A dialogue to edit DCP-o-matic Playlist Editor configuration. + */ + +class wxPreferencesEditor; + +wxPreferencesEditor* create_playlist_editor_config_dialog (); diff --git a/src/wx/wscript b/src/wx/wscript index 278407042..4605c9399 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -102,6 +102,7 @@ sources = """ player_information.cc playhead_to_timecode_dialog.cc playhead_to_frame_dialog.cc + playlist_editor_config_dialog.cc question_dialog.cc rating_dialog.cc qube_certificate_panel.cc