X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fswaroop_controls.cc;h=870ac518bb1d6dc13d6d30b04c63aced19e2597e;hb=f37b8122a04c6a7f8a86c77de44ac995b9555d1a;hp=f38fd33432a2ca1a8a4047242bca98eae6ac273e;hpb=d4658d7d79bcf5bfa52f6f26eee3506bb8db82f5;p=dcpomatic.git diff --git a/src/wx/swaroop_controls.cc b/src/wx/swaroop_controls.cc index f38fd3343..870ac518b 100644 --- a/src/wx/swaroop_controls.cc +++ b/src/wx/swaroop_controls.cc @@ -34,6 +34,7 @@ using std::string; using std::cout; using std::exception; +using std::sort; using boost::shared_ptr; using boost::dynamic_pointer_cast; using boost::optional; @@ -46,7 +47,7 @@ SwaroopControls::SwaroopControls (wxWindow* parent, shared_ptr viewe , _next_button (new Button(this, "Next")) , _previous_button (new Button(this, "Previous")) , _current_disable_timeline (false) - , _current_disable_next_previous (false) + , _current_disable_next (false) { _button_sizer->Add (_previous_button, 0, wxEXPAND); _button_sizer->Add (_play_button, 0, wxEXPAND); @@ -92,7 +93,7 @@ SwaroopControls::SwaroopControls (wxWindow* parent, shared_ptr viewe _current_spl_view = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxLC_NO_HEADER); _current_spl_view->AppendColumn (wxT(""), wxLIST_FORMAT_LEFT, 500); _current_spl_view->AppendColumn (wxT(""), wxLIST_FORMAT_LEFT, 80); - e_sizer->Add (left_sizer, 0, wxALL | wxEXPAND, DCPOMATIC_SIZER_GAP); + e_sizer->Add (left_sizer, 1, wxALL | wxEXPAND, DCPOMATIC_SIZER_GAP); e_sizer->Add (_current_spl_view, 1, wxALL | wxEXPAND, DCPOMATIC_SIZER_GAP); _v_sizer->Add (e_sizer, 1, wxEXPAND); @@ -135,6 +136,7 @@ SwaroopControls::check_restart () _selected_playlist_position = index; update_current_content (); _viewer->seek (DCPTime(time), false); + _viewer->start (); } } @@ -191,8 +193,8 @@ SwaroopControls::setup_sensitivity () _pause_button->Enable (_viewer->playing()); _slider->Enable (!_current_disable_timeline); _spl_view->Enable (!_viewer->playing()); - _next_button->Enable (!_current_disable_next_previous && can_do_next()); - _previous_button->Enable (!_current_disable_next_previous && can_do_previous()); + _next_button->Enable (!_current_disable_next && can_do_next()); + _previous_button->Enable (can_do_previous()); } void @@ -206,6 +208,10 @@ SwaroopControls::stop_clicked () { _viewer->stop (); _viewer->seek (DCPTime(), true); + if (_selected_playlist) { + _selected_playlist_position = 0; + update_current_content (); + } } bool @@ -271,6 +277,13 @@ SwaroopControls::add_playlist_to_list (SPL spl) _spl_view->InsertItem (it); } +struct SPLComparator +{ + bool operator() (SPL const & a, SPL const & b) { + return a.name() < b.name(); + } +}; + void SwaroopControls::update_playlist_directory () { @@ -290,12 +303,18 @@ SwaroopControls::update_playlist_directory () SPL spl; spl.read (i->path(), _content_view); _playlists.push_back (spl); - add_playlist_to_list (spl); } } catch (exception& e) { /* Never mind */ } } + + sort (_playlists.begin(), _playlists.end(), SPLComparator()); + BOOST_FOREACH (SPL i, _playlists) { + add_playlist_to_list (i); + } + + _selected_playlist = boost::none; } void @@ -320,6 +339,9 @@ SwaroopControls::spl_selection_changed () return; } + wxProgressDialog dialog (_("DCP-o-matic"), "Loading playlist"); + dialog.Pulse (); + _current_spl_view->DeleteAllItems (); int N = 0; @@ -334,7 +356,9 @@ SwaroopControls::spl_selection_changed () _selected_playlist = selected; _selected_playlist_position = 0; + dialog.Pulse (); reset_film (); + dialog.Pulse (); update_current_content (); } @@ -371,17 +395,15 @@ SwaroopControls::update_current_content () { DCPOMATIC_ASSERT (_selected_playlist); - bool const was_playing = _viewer->stop (); + wxProgressDialog dialog (_("DCP-o-matic"), "Loading content"); SPLEntry const & e = _playlists[*_selected_playlist].get()[_selected_playlist_position]; _current_disable_timeline = e.disable_timeline; - _current_disable_next_previous = !e.skippable; + _current_disable_next = !e.skippable; setup_sensitivity (); + dialog.Pulse (); reset_film (); - if (was_playing) { - _viewer->start (); - } } void @@ -391,5 +413,15 @@ SwaroopControls::viewer_finished () return; } - next_clicked (); + bool const stop = _playlists[*_selected_playlist].get()[_selected_playlist_position].stop_after_play; + + _selected_playlist_position++; + if (_selected_playlist_position < int(_playlists[*_selected_playlist].get().size())) { + update_current_content (); + if (!stop) { + _viewer->start (); + } + } else { + ResetFilm (shared_ptr(new Film(optional()))); + } }