From 13fae8b9710e1f630fafdc62ecd06c723edf7ff0 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 3 Jan 2023 20:47:41 +0100 Subject: [PATCH] Add FileDialog (wrapping wxFileDialog); currently it sets up the initial path nicely. --- src/wx/file_dialog.cc | 80 +++++++++++++++++++++++++++++++++++++++++++ src/wx/file_dialog.h | 49 ++++++++++++++++++++++++++ src/wx/wscript | 1 + 3 files changed, 130 insertions(+) create mode 100644 src/wx/file_dialog.cc create mode 100644 src/wx/file_dialog.h 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 + + 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 "file_dialog.h" +#include "wx_util.h" +#include "lib/config.h" +#include "lib/cross.h" +#include +#include + + +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 +FileDialog::paths() const +{ + wxArrayString wx_paths; + GetPaths(wx_paths); + vector 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 + + 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 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 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 -- 2.30.2