diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-01-03 20:47:41 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-01-04 10:24:57 +0100 |
| commit | 13fae8b9710e1f630fafdc62ecd06c723edf7ff0 (patch) | |
| tree | ad4227b4e83ba3445de01b5f46cf6415e45f43c4 | |
| parent | 98a10c9874d28e2e52f7495549b80528372ffbfb (diff) | |
Add FileDialog (wrapping wxFileDialog); currently it sets up the initial path nicely.
| -rw-r--r-- | src/wx/file_dialog.cc | 80 | ||||
| -rw-r--r-- | src/wx/file_dialog.h | 49 | ||||
| -rw-r--r-- | src/wx/wscript | 1 |
3 files changed, 130 insertions, 0 deletions
diff --git a/src/wx/file_dialog.cc b/src/wx/file_dialog.cc new file mode 100644 index 000000000..7aee39493 --- /dev/null +++ b/src/wx/file_dialog.cc @@ -0,0 +1,80 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + 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 <http://www.gnu.org/licenses/>. + +*/ + + +#include "file_dialog.h" +#include "wx_util.h" +#include "lib/config.h" +#include "lib/cross.h" +#include <boost/filesystem.hpp> +#include <vector> + + +using std::vector; + + +FileDialog::FileDialog( + wxWindow* parent, + wxString title, + wxString allowed, + long style, + std::string initial_path_key + ) + : wxFileDialog( + parent, + title, + std_to_wx(Config::instance()->initial_path(initial_path_key).get_value_or(home_directory()).string()), + wxEmptyString, + allowed, + style + ) + , _initial_path_key(initial_path_key) +{ + +} + + +vector<boost::filesystem::path> +FileDialog::paths() const +{ + wxArrayString wx_paths; + GetPaths(wx_paths); + vector<boost::filesystem::path> paths; + for (unsigned int i = 0; i < wx_paths.GetCount(); ++i) { + paths.push_back(wx_to_std(wx_paths[i])); + } + return paths; +} + + +bool +FileDialog::show() +{ + auto response = ShowModal(); + if (response != wxID_OK) { + return false; + } + + auto p = paths(); + DCPOMATIC_ASSERT(!p.empty()); + Config::instance()->set_initial_path(_initial_path_key, p[0].parent_path()); + return true; +} + diff --git a/src/wx/file_dialog.h b/src/wx/file_dialog.h new file mode 100644 index 000000000..f4a7ad81e --- /dev/null +++ b/src/wx/file_dialog.h @@ -0,0 +1,49 @@ +/* + Copyright (C) 2023 Carl Hetherington <cth@carlh.net> + + 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 <http://www.gnu.org/licenses/>. + +*/ + + +#include <dcp/warnings.h> +LIBDCP_DISABLE_WARNINGS +#include <wx/wx.h> +LIBDCP_ENABLE_WARNINGS +#include <boost/filesystem.hpp> +#include <vector> + + +class FileDialog : public wxFileDialog +{ +public: + FileDialog( + wxWindow* parent, + wxString title, + wxString allowed, + long style, + std::string initial_path_key + ); + + /** @return true if OK was clicked */ + bool show(); + + std::vector<boost::filesystem::path> paths() const; + +private: + std::string _initial_path_key; +}; + diff --git a/src/wx/wscript b/src/wx/wscript index a91ec6189..b3b447fdf 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -70,6 +70,7 @@ sources = """ export_subtitles_dialog.cc export_video_file_dialog.cc extra_kdm_email_dialog.cc + file_dialog.cc file_picker_ctrl.cc film_editor.cc film_name_location_dialog.cc |
