/*
- 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"
+/* 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 <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
#include <wx/stdpaths.h>
+LIBDCP_ENABLE_WARNINGS
#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)
#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) {
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;
}
+