/* Copyright (C) 2025 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 "file_picker_ctrl.h" #include "locations_preferences_page.h" #include "wx_util.h" #include #include #include using boost::bind; #if BOOST_VERSION >= 106100 using namespace boost::placeholders; #endif using namespace dcpomatic::preferences; LocationsPage::LocationsPage(wxSize panel_size, int border) : Page(panel_size, border) { } wxString LocationsPage::GetName() const { return _("Locations"); } #ifdef DCPOMATIC_OSX wxBitmap LocationsPage::GetLargeIcon() const { return wxBitmap(icon_path("locations"), wxBITMAP_TYPE_PNG); } #endif void LocationsPage::setup() { int r = 0; auto 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, char_to_wx(wxDirSelectorPromptStr), wxDefaultPosition, wxSize(300, -1)); table->Add(_content_directory, wxGBPosition(r, 1)); ++r; add_label_to_sizer(table, _panel, _("Show playlists file"), true, wxGBPosition(r, 0)); _show_playlists_file = new FilePickerCtrl(_panel, _("Select show playlists file"), char_to_wx("*.sqlite3"), false, true, "ShowPlaylistsPath"); table->Add(_show_playlists_file, wxGBPosition(r, 1)); ++r; add_label_to_sizer(table, _panel, _("KDM directory"), true, wxGBPosition(r, 0)); _kdm_directory = new wxDirPickerCtrl(_panel, wxID_ANY, wxEmptyString, char_to_wx(wxDirSelectorPromptStr), wxDefaultPosition, wxSize(300, -1)); table->Add(_kdm_directory, wxGBPosition(r, 1)); ++r; _content_directory->Bind(wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::content_directory_changed, this)); _show_playlists_file->bind(&LocationsPage::show_playlists_file_changed, this); _kdm_directory->Bind(wxEVT_DIRPICKER_CHANGED, bind(&LocationsPage::kdm_directory_changed, this)); } void LocationsPage::config_changed() { auto config = Config::instance(); if (config->player_content_directory()) { checked_set(_content_directory, *config->player_content_directory()); } checked_set(_show_playlists_file, config->show_playlists_file()); if (config->player_kdm_directory()) { checked_set(_kdm_directory, *config->player_kdm_directory()); } } void LocationsPage::content_directory_changed() { Config::instance()->set_player_content_directory(wx_to_std(_content_directory->GetPath())); } void LocationsPage::show_playlists_file_changed() { if (auto path = _show_playlists_file->path()) { Config::instance()->set_show_playlists_file(*path); } } void LocationsPage::kdm_directory_changed() { Config::instance()->set_player_kdm_directory(wx_to_std(_kdm_directory->GetPath())); }