Add 'proper' config dialog for the playlist editor.
[dcpomatic.git] / src / wx / config_dialog.cc
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