X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_name_location_dialog.cc;h=05ffa7a685264cfbd46a3e683f21015b3be2bd16;hb=a22f1bda1083345a649ca9c4d893cae79b141191;hp=0cc406d022168b9d430ec7368ae9bd7fac1b41e2;hpb=9c1bb2e5ca7c80c4e26b1b2e41159aa171360a94;p=dcpomatic.git diff --git a/src/wx/film_name_location_dialog.cc b/src/wx/film_name_location_dialog.cc index 0cc406d02..05ffa7a68 100644 --- a/src/wx/film_name_location_dialog.cc +++ b/src/wx/film_name_location_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2018 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,22 +18,29 @@ */ -#include "wx_util.h" -#include "film_name_location_dialog.h" + #include "check_box.h" +#include "film_name_location_dialog.h" +#include "wx_util.h" +/* This must come after wx_util.h as it defines DCPOMATIC_USE_OWN_PICKER */ #ifdef DCPOMATIC_USE_OWN_PICKER #include "dir_picker_ctrl.h" #endif -#include "lib/config.h" #include "lib/compose.hpp" +#include "lib/config.h" +#include +LIBDCP_DISABLE_WARNINGS #include +LIBDCP_ENABLE_WARNINGS #include -#include + using namespace std; using namespace boost; -boost::optional FilmNameLocationDialog::_directory; + +optional FilmNameLocationDialog::_directory; + FilmNameLocationDialog::FilmNameLocationDialog (wxWindow* parent, wxString title, bool offer_templates) : TableDialog (parent, title, 2, 1, true) @@ -45,15 +52,14 @@ FilmNameLocationDialog::FilmNameLocationDialog (wxWindow* parent, wxString title #ifdef DCPOMATIC_USE_OWN_PICKER _folder = new DirPickerCtrl (this); + _folder->Changed.connect (bind(&FilmNameLocationDialog::folder_changed, this)); #else _folder = new wxDirPickerCtrl (this, wxID_ANY, wxEmptyString, wxDirSelectorPromptStr, wxDefaultPosition, wxSize (300, -1)); + _folder->Bind (wxEVT_DIRPICKER_CHANGED, bind(&FilmNameLocationDialog::folder_changed, this)); #endif - if (!_directory) { - _directory = Config::instance()->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())); - } - - _folder->SetPath (std_to_wx (_directory.get().string())); + auto dir = _directory.get_value_or(Config::instance()->default_directory_or(wx_to_std(wxStandardPaths::Get().GetDocumentsDir()))); + _folder->SetPath (std_to_wx(dir.string())); add (_folder); if (offer_templates) { @@ -68,70 +74,90 @@ FilmNameLocationDialog::FilmNameLocationDialog (wxWindow* parent, wxString title if (offer_templates) { _template_name->Enable (false); - BOOST_FOREACH (string i, Config::instance()->templates ()) { - _template_name->Append (std_to_wx (i)); + for (auto i: Config::instance()->templates ()) { + _template_name->Append (std_to_wx(i)); } - _use_template->Bind (wxEVT_CHECKBOX, bind (&FilmNameLocationDialog::use_template_clicked, this)); + _use_template->bind(&FilmNameLocationDialog::use_template_clicked, this); } layout (); + + _name->Bind (wxEVT_TEXT, bind(&FilmNameLocationDialog::setup_sensitivity, this)); + setup_sensitivity (); } + +void +FilmNameLocationDialog::setup_sensitivity () +{ + auto ok = dynamic_cast(FindWindowById(wxID_OK, this)); + if (ok) { + ok->Enable (!_name->GetValue().IsEmpty()); + } +} + + void FilmNameLocationDialog::use_template_clicked () { - _template_name->Enable (_use_template->GetValue ()); + _template_name->Enable (_use_template->GetValue()); } -FilmNameLocationDialog::~FilmNameLocationDialog () + +void +FilmNameLocationDialog::folder_changed () { - _directory = wx_to_std (_folder->GetPath ()); + _directory = wx_to_std (_folder->GetPath()); } -boost::filesystem::path + +filesystem::path FilmNameLocationDialog::path () const { filesystem::path p; - p /= wx_to_std (_folder->GetPath ()); - p /= wx_to_std (_name->GetValue ()); + p /= wx_to_std (_folder->GetPath()); + p /= wx_to_std (_name->GetValue()); return p; } + optional FilmNameLocationDialog::template_name () const { if (!_use_template->GetValue() || _template_name->GetSelection() == -1) { - return optional (); + return {}; } return wx_to_std (_template_name->GetString(_template_name->GetSelection())); } + /** Check the path that is in our controls and offer confirmations or errors as required. * @return true if the path should be used. */ bool FilmNameLocationDialog::check_path () { - if (boost::filesystem::is_directory (path()) && !boost::filesystem::is_empty(path())) { + if (filesystem::is_directory(path()) && !filesystem::is_empty(path())) { if (!confirm_dialog ( this, std_to_wx ( - String::compose (wx_to_std (_("The directory %1 already exists and is not empty. " + String::compose(wx_to_std(_("The directory %1 already exists and is not empty. " "Are you sure you want to use it?")), - path().string().c_str()) + path().string().c_str()) ) )) { return false; } - } else if (boost::filesystem::is_regular_file (path())) { + } else if (filesystem::is_regular_file(path())) { error_dialog ( this, - String::compose (wx_to_std (_("%1 already exists as a file, so you cannot use it for a film.")), path().c_str()) + String::compose (wx_to_std(_("%1 already exists as a file, so you cannot use it for a film.")), path().c_str()) ); return false; } return true; } +