X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcontent_panel.cc;h=89690a5d0f6be9b0554efdcff2708187bc3fbd3c;hb=ad1ef39eda58b3a919ea3b7084401a0439409ec6;hp=bc3966f6c6fdff6c77930c79165211fee9ec793b;hpb=0bd80b641875632b9b2b17530d00e4546bba8088;p=dcpomatic.git diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index bc3966f6c..89690a5d0 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -41,6 +41,7 @@ #include "lib/compose.hpp" #include "lib/string_text_file_content.h" #include "lib/string_text_file.h" +#include "lib/dcpomatic_log.h" #include #include #include @@ -59,9 +60,7 @@ using boost::weak_ptr; using boost::dynamic_pointer_cast; using boost::optional; -#define LOG_GENERAL(...) _film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL); - -ContentPanel::ContentPanel (wxNotebook* n, boost::shared_ptr film, FilmViewer* viewer) +ContentPanel::ContentPanel (wxNotebook* n, shared_ptr film, weak_ptr viewer) : _video_panel (0) , _audio_panel (0) , _timeline_dialog (0) @@ -70,6 +69,7 @@ ContentPanel::ContentPanel (wxNotebook* n, boost::shared_ptr film, FilmVie , _film (film) , _film_viewer (viewer) , _generally_sensitive (true) + , _ignore_deselect (false) { for (int i = 0; i < TEXT_COUNT; ++i) { _text_panel[i] = 0; @@ -132,8 +132,8 @@ ContentPanel::ContentPanel (wxNotebook* n, boost::shared_ptr film, FilmVie _timing_panel = new TimingPanel (this, _film_viewer); _notebook->AddPage (_timing_panel, _("Timing"), false); - _content->Bind (wxEVT_LIST_ITEM_SELECTED, boost::bind (&ContentPanel::selection_changed, this)); - _content->Bind (wxEVT_LIST_ITEM_DESELECTED, boost::bind (&ContentPanel::selection_changed, this)); + _content->Bind (wxEVT_LIST_ITEM_SELECTED, boost::bind (&ContentPanel::item_selected, this)); + _content->Bind (wxEVT_LIST_ITEM_DESELECTED, boost::bind (&ContentPanel::item_deselected, this)); _content->Bind (wxEVT_LIST_ITEM_RIGHT_CLICK, boost::bind (&ContentPanel::right_click, this, _1)); _content->Bind (wxEVT_DROP_FILES, boost::bind (&ContentPanel::files_dropped, this, _1)); _add_file->Bind (wxEVT_BUTTON, boost::bind (&ContentPanel::add_file_clicked, this)); @@ -240,7 +240,32 @@ ContentPanel::film_changed (Film::Property p) } void -ContentPanel::selection_changed () +ContentPanel::item_deselected () +{ + /* Maybe this is just a re-click on the same item; if not, _ignore_deselect will stay + false and item_deselected_foo will handle the deselection. + */ + _ignore_deselect = false; + signal_manager->when_idle (boost::bind (&ContentPanel::item_deselected_idle, this)); +} + +void +ContentPanel::item_deselected_idle () +{ + if (!_ignore_deselect) { + check_selection (); + } +} + +void +ContentPanel::item_selected () +{ + _ignore_deselect = true; + check_selection (); +} + +void +ContentPanel::check_selection () { if (_last_selected == selected()) { /* This was triggered by a re-build of the view but the selection @@ -276,7 +301,9 @@ ContentPanel::selection_changed () } if (go_to && Config::instance()->jump_to_selected() && signal_manager) { - signal_manager->when_idle(boost::bind(&FilmViewer::set_position, _film_viewer, go_to.get().ceil(_film->video_frame_rate()))); + shared_ptr fv = _film_viewer.lock (); + DCPOMATIC_ASSERT (fv); + signal_manager->when_idle(boost::bind(&FilmViewer::seek, fv.get(), go_to.get().ceil(_film->video_frame_rate()), true)); } if (_timeline_dialog) { @@ -326,7 +353,6 @@ ContentPanel::selection_changed () if (have_audio && !_audio_panel) { _audio_panel = new AudioPanel (this); - _audio_panel->set_film (_film); _notebook->InsertPage (off, _audio_panel, _audio_panel->name()); } else if (!have_audio && _audio_panel) { _notebook->DeletePage (off); @@ -423,7 +449,7 @@ ContentPanel::add_folder_clicked () list > content; try { - content = content_factory (_film, path); + content = content_factory (path); } catch (exception& e) { error_dialog (_parent, e.what()); return; @@ -466,7 +492,7 @@ ContentPanel::add_dcp_clicked () } try { - _film->examine_and_add_content (shared_ptr (new DCPContent (_film, path))); + _film->examine_and_add_content (shared_ptr (new DCPContent (path))); } catch (exception& e) { error_dialog (_parent, e.what()); } @@ -487,7 +513,7 @@ ContentPanel::remove_clicked (bool hotkey) _film->remove_content (i); } - selection_changed (); + check_selection (); return false; } @@ -556,7 +582,7 @@ ContentPanel::set_film (shared_ptr film) film_changed (Film::CONTENT); film_changed (Film::AUDIO_CHANNELS); - selection_changed (); + check_selection (); setup_sensitivity (); } @@ -573,7 +599,7 @@ ContentPanel::earlier_clicked () ContentList sel = selected (); if (sel.size() == 1) { _film->move_content_earlier (sel.front ()); - selection_changed (); + check_selection (); } } @@ -583,7 +609,7 @@ ContentPanel::later_clicked () ContentList sel = selected (); if (sel.size() == 1) { _film->move_content_later (sel.front ()); - selection_changed (); + check_selection (); } } @@ -728,7 +754,7 @@ ContentPanel::add_files (list paths) try { BOOST_FOREACH (boost::filesystem::path i, paths) { - BOOST_FOREACH (shared_ptr j, content_factory (_film, i)) { + BOOST_FOREACH (shared_ptr j, content_factory(i)) { _film->examine_and_add_content (j); } }