From: Carl Hetherington Date: Tue, 9 Oct 2018 22:08:22 +0000 (+0100) Subject: Add load button for SPL. X-Git-Tag: v2.13.58~1 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=475f587f08a7cb1b915be37050abc0b09f6bfc67 Add load button for SPL. --- diff --git a/src/lib/config.cc b/src/lib/config.cc index eb13112d2..ede0b1059 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -175,6 +175,7 @@ Config::set_defaults () _player_watermark_theatre = ""; _player_watermark_period = 1; _player_watermark_duration = 50; + _allow_spl_editing = true; #endif _allowed_dcp_frame_rates.clear (); @@ -525,6 +526,7 @@ try BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("RequiredMonitor")) { _required_monitors.push_back(Monitor(i)); } + _allow_spl_editing = f.optional_bool_child("AllowSPLEditing").get_value_or(true); #endif /* Replace any cinemas from config.xml with those from the configured file */ @@ -934,6 +936,7 @@ Config::write_config () const BOOST_FOREACH (Monitor i, _required_monitors) { i.as_xml(root->add_child("RequiredMonitor")); } + root->add_child("AllowSPLEditing")->add_child_text(_allow_spl_editing ? "1" : "0"); #endif try { diff --git a/src/lib/config.h b/src/lib/config.h index baf446df3..a313e4342 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -519,6 +519,10 @@ public: std::vector required_monitors () const { return _required_monitors; } + + bool allow_spl_editing () const { + return _allow_spl_editing; + } #endif /* SET (mostly) */ @@ -999,6 +1003,10 @@ public: void set_required_monitors (std::vector monitors) { maybe_set (_required_monitors, monitors); } + + void set_allow_spl_editing (bool s) { + maybe_set (_allow_spl_editing, s); + } #endif void changed (Property p = OTHER); @@ -1203,6 +1211,7 @@ private: /** watermark duration in milliseconds */ int _player_watermark_duration; std::vector _required_monitors; + bool _allow_spl_editing; #endif static int const _current_version; diff --git a/src/wx/controls.cc b/src/wx/controls.cc index 753014c46..eb70726d0 100644 --- a/src/wx/controls.cc +++ b/src/wx/controls.cc @@ -103,6 +103,10 @@ Controls::Controls (wxWindow* parent, shared_ptr viewer, bool editor wxBoxSizer* buttons_sizer = new wxBoxSizer (wxVERTICAL); _add_button = new wxButton(this, wxID_ANY, _("Add")); buttons_sizer->Add (_add_button); + _save_button = new wxButton(this, wxID_ANY, _("Save...")); + buttons_sizer->Add (_save_button); + _load_button = new wxButton(this, wxID_ANY, _("Load...")); + buttons_sizer->Add (_load_button); e_sizer->Add (buttons_sizer, 0, wxALL | wxEXPAND, DCPOMATIC_SIZER_GAP); _v_sizer->Add (e_sizer, 1, wxEXPAND); @@ -113,6 +117,8 @@ Controls::Controls (wxWindow* parent, shared_ptr viewer, bool editor _cpl->Show (false); _spl_view->Show (false); _add_button->Show (false); + _save_button->Show (false); + _load_button->Show (false); _log->Show (false); wxBoxSizer* h_sizer = new wxBoxSizer (wxHORIZONTAL); @@ -169,6 +175,8 @@ Controls::Controls (wxWindow* parent, shared_ptr viewer, bool editor _jump_to_selected->SetValue (Config::instance()->jump_to_selected ()); } _add_button->Bind (wxEVT_BUTTON, boost::bind(&Controls::add_clicked, this)); + _save_button->Bind (wxEVT_BUTTON, boost::bind(&Controls::save_clicked, this)); + _load_button->Bind (wxEVT_BUTTON, boost::bind(&Controls::load_clicked, this)); _viewer->PositionChanged.connect (boost::bind(&Controls::position_changed, this)); _viewer->Started.connect (boost::bind(&Controls::started, this)); @@ -186,6 +194,7 @@ Controls::Controls (wxWindow* parent, shared_ptr viewer, bool editor ); _config_changed_connection = Config::instance()->Changed.connect (bind(&Controls::config_changed, this, _1)); + config_changed (Config::OTHER); } void @@ -199,11 +208,47 @@ Controls::add_clicked () setup_sensitivity (); } +void +Controls::save_clicked () +{ + wxFileDialog* d = new wxFileDialog ( + this, _("Select playlist file"), wxEmptyString, wxEmptyString, wxT ("XML files (*.xml)|*.xml"), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT + ); + + if (d->ShowModal() == wxID_OK) { + _spl.as_xml (boost::filesystem::path(wx_to_std(d->GetPath()))); + } + + d->Destroy (); +} + +void +Controls::load_clicked () +{ + wxFileDialog* d = new wxFileDialog ( + this, _("Select playlist file"), wxEmptyString, wxEmptyString, wxT ("XML files (*.xml)|*.xml") + ); + + if (d->ShowModal() == wxID_OK) { + _spl = SPL (boost::filesystem::path(wx_to_std(d->GetPath()))); + _spl_view->DeleteAllItems (); + BOOST_FOREACH (SPLEntry i, _spl.playlist) { + add_cpl_to_list (i.cpl, _spl_view); + } + SPLChanged (_spl); + } + + d->Destroy (); +} + void Controls::config_changed (int property) { if (property == Config::PLAYER_DCP_DIRECTORY) { update_dcp_directory (); + } else { + setup_sensitivity (); } } @@ -444,7 +489,8 @@ Controls::setup_sensitivity () _eye->Enable (c && _film->three_d ()); } - _add_button->Enable (static_cast(selected_cpl())); + _add_button->Enable (Config::instance()->allow_spl_editing() && static_cast(selected_cpl())); + _save_button->Enable (Config::instance()->allow_spl_editing()); } optional @@ -522,6 +568,8 @@ Controls::show_extended_player_controls (bool s) _spl_view->Show (s); _log->Show (s); _add_button->Show (s); + _save_button->Show (s); + _load_button->Show (s); _v_sizer->Layout (); } diff --git a/src/wx/controls.h b/src/wx/controls.h index fd8178435..09e942e1c 100644 --- a/src/wx/controls.h +++ b/src/wx/controls.h @@ -94,6 +94,8 @@ private: void stop_clicked (); #endif void add_clicked (); + void save_clicked (); + void load_clicked (); void add_cpl_to_list (boost::shared_ptr cpl, wxListCtrl* list); boost::shared_ptr _film; @@ -110,6 +112,8 @@ private: wxListCtrl* _spl_view; wxTextCtrl* _log; wxButton* _add_button; + wxButton* _save_button; + wxButton* _load_button; std::vector _cpls; wxSlider* _slider; wxButton* _rewind_button;