Supporters update.
[dcpomatic.git] / src / wx / film_name_location_dialog.cc
index 0cc406d022168b9d430ec7368ae9bd7fac1b41e2..516ed86ae9cbf0fbc3e6ba960b797b31a141994d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
-#include "wx_util.h"
-#include "film_name_location_dialog.h"
+
 #include "check_box.h"
+#include "film_name_location_dialog.h"
+#include "wx_util.h"
 #ifdef DCPOMATIC_USE_OWN_PICKER
 #include "dir_picker_ctrl.h"
 #endif
 #include "lib/compose.hpp"
 #include <wx/stdpaths.h>
 #include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
+
 
 using namespace std;
 using namespace boost;
 
-boost::optional<boost::filesystem::path> FilmNameLocationDialog::_directory;
+
+optional<filesystem::path> FilmNameLocationDialog::_directory;
+
 
 FilmNameLocationDialog::FilmNameLocationDialog (wxWindow* parent, wxString title, bool offer_templates)
        : TableDialog (parent, title, 2, 1, true)
@@ -45,15 +48,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 +70,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 (wxEVT_CHECKBOX, 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<wxButton *>(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<string>
 FilmNameLocationDialog::template_name () const
 {
        if (!_use_template->GetValue() || _template_name->GetSelection() == -1) {
-               return optional<string> ();
+               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 (boost::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;
 }
+