Add 'proper' config dialog for the playlist editor.
authorCarl Hetherington <cth@carlh.net>
Sat, 29 Feb 2020 22:53:14 +0000 (23:53 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 29 Feb 2020 22:53:52 +0000 (23:53 +0100)
src/tools/dcpomatic_playlist.cc
src/wx/config_dialog.cc
src/wx/config_dialog.h
src/wx/player_config_dialog.cc
src/wx/playlist_editor_config_dialog.cc [new file with mode: 0644]
src/wx/playlist_editor_config_dialog.h [new file with mode: 0644]
src/wx/wscript

index 7751fc1b31ff671df783a9bf90efd025bb4e72e0..f8b888fe3ec31fba541aa136b1805befeacbe2fe 100644 (file)
@@ -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);
        }
index 55d387528e9d42c55a0974d99fe094b2428bbf86..272d2e8ee0fbab334492445d97b6c10fb548b0d7 100644 (file)
@@ -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
index 565ecf1c4f738c026aa0901a1bee0256335b5885..5203af609f8e13673968d50dca03610cdf8496ee 100644 (file)
@@ -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
index 11092efe4f551c59fcbd7577c68c7c23aa5a1193..5a21d231bd840eb6b33a8c6a6d490d3ecc1178ec 100644 (file)
@@ -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 (file)
index 0000000..63a28b5
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+    Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
+
+    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 <http://www.gnu.org/licenses/>.
+
+*/
+
+#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 (file)
index 0000000..7aea84a
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+    Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
+
+    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 <http://www.gnu.org/licenses/>.
+
+*/
+
+/** @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 ();
index 2784070423f3a7371507f4f82410f6248ebb657f..4605c9399e7dcf56c56d3471a01a41d77865f7bf 100644 (file)
@@ -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