From 82598b8d3bcd52c37a153621144f52d03e77fd20 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 2 Sep 2017 13:55:12 +0100 Subject: [PATCH] Remember the last directory used when opening DCPs in the player (#1121). --- ChangeLog | 2 ++ src/lib/config.cc | 4 ++++ src/lib/config.h | 15 +++++++++++---- src/tools/dcpomatic_player.cc | 16 +++++++++------- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0f9dec7b5..4e448b689 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2017-09-02 Carl Hetherington + * Remember the last directory used when opening DCPs in the player (#1121). + * Build with a version of libopenjpeg derived from 2.2.0. 2017-09-01 Carl Hetherington diff --git a/src/lib/config.cc b/src/lib/config.cc index f595b960a..4f481ef30 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -354,6 +354,7 @@ try if (f.optional_string_child("CoverSheet")) { _cover_sheet = f.optional_string_child("CoverSheet").get(); } + _last_player_load_directory = f.optional_string_child("LastPlayerLoadDirectory"); /* Replace any cinemas from config.xml with those from the configured file */ if (boost::filesystem::exists (_cinemas_file)) { @@ -631,6 +632,9 @@ Config::write_config () const } /* [XML] CoverSheet Text of the cover sheet to write when making DCPs */ root->add_child("CoverSheet")->add_child_text (_cover_sheet); + if (_last_player_load_directory) { + root->add_child("LastPlayerLoadDirectory")->add_child_text(_last_player_load_directory->string()); + } try { doc.write_to_file_formatted(config_file().string()); diff --git a/src/lib/config.h b/src/lib/config.h index 0a81dee51..2d45f14f0 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -341,6 +341,10 @@ public: return _sound_output; } + boost::optional last_player_load_directory () const { + return _last_player_load_directory; + } + void set_master_encoding_threads (int n) { maybe_set (_master_encoding_threads, n); } @@ -567,13 +571,15 @@ public: maybe_set (_sound, s, SOUND); } - void set_sound_output (std::string o) - { + void set_sound_output (std::string o) { maybe_set (_sound_output, o, SOUND_OUTPUT); } - void unset_sound_output () - { + void set_last_player_load_directory (boost::filesystem::path d) { + maybe_set (_last_player_load_directory, d); + } + + void unset_sound_output () { if (!_sound_output) { return; } @@ -764,6 +770,7 @@ private: /** name of a specific sound output stream to use, or empty to use the default */ boost::optional _sound_output; std::string _cover_sheet; + boost::optional _last_player_load_directory; /** Singleton instance, or 0 */ static Config* _instance; diff --git a/src/tools/dcpomatic_player.cc b/src/tools/dcpomatic_player.cc index 6753b5423..dec1d3f14 100644 --- a/src/tools/dcpomatic_player.cc +++ b/src/tools/dcpomatic_player.cc @@ -207,12 +207,12 @@ private: void file_open () { - wxDirDialog* c = new wxDirDialog ( - this, - _("Select DCP to open"), - wxStandardPaths::Get().GetDocumentsDir(), - wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST - ); + wxString d = wxStandardPaths::Get().GetDocumentsDir(); + if (Config::instance()->last_player_load_directory()) { + d = std_to_wx (Config::instance()->last_player_load_directory()->string()); + } + + wxDirDialog* c = new wxDirDialog (this, _("Select DCP to open"), d, wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST); int r; while (true) { @@ -225,7 +225,9 @@ private: } if (r == wxID_OK) { - load_dcp (wx_to_std (c->GetPath ())); + boost::filesystem::path const dcp (wx_to_std (c->GetPath ())); + load_dcp (dcp); + Config::instance()->set_last_player_load_directory (dcp.parent_path()); } c->Destroy (); -- 2.30.2