From bd24f28d9d78c40d1f790c4213100532407ff783 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 7 Jan 2023 20:12:55 +0100 Subject: [PATCH] Add DirDialog. --- src/wx/dir_dialog.cc | 73 ++++++++++++++++++++++++++++++++++++++++++++ src/wx/dir_dialog.h | 48 +++++++++++++++++++++++++++++ src/wx/wscript | 1 + 3 files changed, 122 insertions(+) create mode 100644 src/wx/dir_dialog.cc create mode 100644 src/wx/dir_dialog.h diff --git a/src/wx/dir_dialog.cc b/src/wx/dir_dialog.cc new file mode 100644 index 000000000..ec178de55 --- /dev/null +++ b/src/wx/dir_dialog.cc @@ -0,0 +1,73 @@ +/* + Copyright (C) 2023 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 "dir_dialog.h" +#include "wx_util.h" +#include "lib/config.h" +#include "lib/cross.h" +#include +#include + + +using std::vector; + + +DirDialog::DirDialog( + wxWindow* parent, + wxString title, + long style, + std::string initial_path_key + ) + : wxDirDialog( + parent, + title, + std_to_wx(Config::instance()->initial_path(initial_path_key).get_value_or(home_directory()).string()), + style + ) + , _initial_path_key(initial_path_key) +{ + +} + + +boost::filesystem::path +DirDialog::path() const +{ + return wx_to_std(GetPath()); +} + + +bool +DirDialog::show() +{ + /* Call the specific ShowModal so that other classes can inherit from this one and + * override ShowModal without unexpected effects. + */ + auto response = wxDirDialog::ShowModal(); + if (response != wxID_OK) { + return false; + } + + Config::instance()->set_initial_path(_initial_path_key, path().parent_path()); + return true; +} + + diff --git a/src/wx/dir_dialog.h b/src/wx/dir_dialog.h new file mode 100644 index 000000000..f733f8327 --- /dev/null +++ b/src/wx/dir_dialog.h @@ -0,0 +1,48 @@ +/* + Copyright (C) 2023 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 +LIBDCP_DISABLE_WARNINGS +#include +LIBDCP_ENABLE_WARNINGS +#include +#include + + +class DirDialog : public wxDirDialog +{ +public: + DirDialog( + wxWindow* parent, + wxString title, + long style, + std::string initial_path_key + ); + + /** @return true if OK was clicked */ + bool show(); + + boost::filesystem::path path() const; + +private: + std::string _initial_path_key; +}; + diff --git a/src/wx/wscript b/src/wx/wscript index b3b447fdf..3e5483647 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -58,6 +58,7 @@ sources = """ dcpomatic_button.cc dcpomatic_choice.cc dcpomatic_spin_ctrl.cc + dir_dialog.cc dir_picker_ctrl.cc disk_warning_dialog.cc dkdm_dialog.cc -- 2.30.2