X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcontent_panel.cc;h=ceebd6e14282f846d8f174fd323abad7509c3a2c;hb=cda2e5441938ebca1c94afd96f9a3a93e7bf3a08;hp=d1859b894e1c34a8f391ed7dc0c19b9daedf2ade;hpb=da908d815787cd0272c8bdeef40e1a4d2f6a29f8;p=dcpomatic.git diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index d1859b894..ceebd6e14 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -34,6 +34,7 @@ #include "lib/compose.hpp" #include "lib/config.h" #include "lib/content_factory.h" +#include "lib/cross.h" #include "lib/dcp_content.h" #include "lib/dcpomatic_log.h" #include "lib/ffmpeg_content.h" @@ -57,7 +58,6 @@ using std::dynamic_pointer_cast; using std::exception; using std::list; using std::make_shared; -using std::max; using std::shared_ptr; using std::string; using std::vector; @@ -134,6 +134,7 @@ ContentPanel::ContentPanel (wxNotebook* n, shared_ptr film, weak_ptrAddPage (_timing_panel, _("Timing"), false); + _timing_panel->create (); _content->Bind (wxEVT_LIST_ITEM_SELECTED, boost::bind (&ContentPanel::item_selected, this)); _content->Bind (wxEVT_LIST_ITEM_DESELECTED, boost::bind (&ContentPanel::item_deselected, this)); @@ -357,6 +358,7 @@ ContentPanel::check_selection () if (have_video && !_video_panel) { _video_panel = new VideoPanel (this); _notebook->InsertPage (off, _video_panel, _video_panel->name()); + _video_panel->create (); } else if (!have_video && _video_panel) { _notebook->DeletePage (off); _video_panel = 0; @@ -369,6 +371,7 @@ ContentPanel::check_selection () if (have_audio && !_audio_panel) { _audio_panel = new AudioPanel (this); _notebook->InsertPage (off, _audio_panel, _audio_panel->name()); + _audio_panel->create (); } else if (!have_audio && _audio_panel) { _notebook->DeletePage (off); _audio_panel = 0; @@ -382,6 +385,7 @@ ContentPanel::check_selection () if (have_text[i] && !_text_panel[i]) { _text_panel[i] = new TextPanel (this, static_cast(i)); _notebook->InsertPage (off, _text_panel[i], _text_panel[i]->name()); + _text_panel[i]->create (); } else if (!have_text[i] && _text_panel[i]) { _notebook->DeletePage (off); _text_panel[i] = 0; @@ -420,13 +424,15 @@ ContentPanel::add_file_clicked () return; } + auto path = Config::instance()->add_files_path(); + /* The wxFD_CHANGE_DIR here prevents a `could not set working directory' error 123 on Windows when using non-Latin filenames or paths. */ auto d = new wxFileDialog ( _splitter, _("Choose a file or files"), - wxT (""), + std_to_wx(path ? path->string() : home_directory().string()), wxT (""), wxT ("All files|*.*|Subtitle files|*.srt;*.xml|Audio files|*.wav;*.w64;*.flac;*.aif;*.aiff"), wxFD_MULTIPLE | wxFD_CHANGE_DIR @@ -441,12 +447,16 @@ ContentPanel::add_file_clicked () wxArrayString paths; d->GetPaths (paths); - list path_list; + vector path_list; for (unsigned int i = 0; i < paths.GetCount(); ++i) { - path_list.push_back (wx_to_std (paths[i])); + path_list.push_back (wx_to_std(paths[i])); } add_files (path_list); + if (!path_list.empty()) { + Config::instance()->set_add_files_path(path_list[0].parent_path()); + } + d->Destroy (); } @@ -788,9 +798,9 @@ ContentPanel::files_dropped (wxDropFilesEvent& event) } auto paths = event.GetFiles (); - list path_list; + vector path_list; for (int i = 0; i < event.GetNumberOfFiles(); i++) { - path_list.push_back (wx_to_std (paths[i])); + path_list.push_back (wx_to_std(paths[i])); } add_files (path_list); @@ -798,14 +808,14 @@ ContentPanel::files_dropped (wxDropFilesEvent& event) void -ContentPanel::add_files (list paths) +ContentPanel::add_files (vector paths) { /* It has been reported that the paths returned from e.g. wxFileDialog are not always sorted; I can't reproduce that, but sort them anyway. Don't use ImageFilenameSorter as a normal alphabetical sort is expected here. */ - paths.sort (CaseInsensitiveSorter ()); + std::sort (paths.begin(), paths.end(), CaseInsensitiveSorter()); /* XXX: check for lots of files here and do something */