X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic_playlist.cc;h=de6ae107b36883bdc05914a5c044ccf30482779e;hp=0b8f935b3aaf0d8dc02ba1b3e7dcd0599b092e10;hb=c403e757cf0b029954fe18dc969314bfb179412f;hpb=a72e28935d88d569a64f3d08a8791b368dda11d7 diff --git a/src/tools/dcpomatic_playlist.cc b/src/tools/dcpomatic_playlist.cc index 0b8f935b3..de6ae107b 100644 --- a/src/tools/dcpomatic_playlist.cc +++ b/src/tools/dcpomatic_playlist.cc @@ -32,6 +32,10 @@ #include #include #include +#include +#ifdef __WXOSX__ +#include +#endif using std::exception; using std::cout; @@ -89,7 +93,7 @@ public: the dark-grey background on Windows. */ wxPanel* overall_panel = new wxPanel (this, wxID_ANY); - wxBoxSizer* main_sizer = new wxBoxSizer (wxHORIZONTAL); + wxBoxSizer* h_sizer = new wxBoxSizer (wxHORIZONTAL); _list = new wxListCtrl ( overall_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxLC_SINGLE_SEL @@ -121,7 +125,7 @@ public: _list->SetImageList (images, wxIMAGE_LIST_SMALL); - main_sizer->Add (_list, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_GAP); + h_sizer->Add (_list, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_GAP); wxBoxSizer* button_sizer = new wxBoxSizer (wxVERTICAL); _up = new Button (overall_panel, _("Up")); @@ -137,8 +141,20 @@ public: button_sizer->Add (_save, 0, wxEXPAND | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); button_sizer->Add (_load, 0, wxEXPAND | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); - main_sizer->Add (button_sizer, 0, wxALL, DCPOMATIC_SIZER_GAP); - overall_panel->SetSizer (main_sizer); + h_sizer->Add (button_sizer, 0, wxALL, DCPOMATIC_SIZER_GAP); + + wxBoxSizer* v_sizer = new wxBoxSizer (wxVERTICAL); + + wxBoxSizer* allowed_shows_sizer = new wxBoxSizer (wxHORIZONTAL); + _allowed_shows_enable = new wxCheckBox (overall_panel, wxID_ANY, _("Limit number of shows with this playlist to")); + allowed_shows_sizer->Add (_allowed_shows_enable, 0, wxRIGHT, DCPOMATIC_SIZER_GAP); + _allowed_shows = new wxSpinCtrl (overall_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 65536, 100); + allowed_shows_sizer->Add (_allowed_shows); + + v_sizer->Add (allowed_shows_sizer, 0, wxALL, DCPOMATIC_SIZER_GAP); + v_sizer->Add (h_sizer); + + overall_panel->SetSizer (v_sizer); _list->Bind (wxEVT_LEFT_DOWN, bind(&DOMFrame::list_left_click, this, _1)); _list->Bind (wxEVT_COMMAND_LIST_ITEM_SELECTED, boost::bind (&DOMFrame::selection_changed, this)); @@ -149,12 +165,24 @@ public: _remove->Bind (wxEVT_BUTTON, bind(&DOMFrame::remove_clicked, this)); _save->Bind (wxEVT_BUTTON, bind(&DOMFrame::save_clicked, this)); _load->Bind (wxEVT_BUTTON, bind(&DOMFrame::load_clicked, this)); + _allowed_shows_enable->Bind (wxEVT_CHECKBOX, bind(&DOMFrame::allowed_shows_changed, this)); + _allowed_shows->Bind (wxEVT_SPINCTRL, bind(&DOMFrame::allowed_shows_changed, this)); setup_sensitivity (); } private: + void allowed_shows_changed () + { + if (_allowed_shows_enable->GetValue()) { + _playlist.set_allowed_shows (_allowed_shows->GetValue()); + } else { + _playlist.unset_allowed_shows (); + } + setup_sensitivity (); + } + void add (SPLEntry e) { wxListItem item; @@ -174,7 +202,7 @@ private: _list->SetItem (N, 1, std_to_wx(e.id)); _list->SetItem (N, 2, std_to_wx(dcp::content_kind_to_string(e.kind))); _list->SetItem (N, 3, e.type == SPLEntry::DCP ? _("DCP") : _("E-cinema")); - _list->SetItem (N, 4, e.encrypted ? _("Y") : _("N")); + _list->SetItem (N, 4, e.encrypted ? S_("Question|Y") : S_("Question|N")); _list->SetItem (N, COLUMN_SKIPPABLE, wxEmptyString, e.skippable ? 0 : 1); _list->SetItem (N, COLUMN_DISABLE_TIMELINE, wxEmptyString, e.disable_timeline ? 0 : 1); _list->SetItem (N, COLUMN_STOP_AFTER_PLAY, wxEmptyString, e.stop_after_play ? 0 : 1); @@ -187,6 +215,7 @@ private: _up->Enable (selected > 0); _down->Enable (selected != -1 && selected < (_list->GetItemCount() - 1)); _remove->Enable (num_selected > 0); + _allowed_shows->Enable (_allowed_shows_enable->GetValue()); } void list_left_click (wxMouseEvent& ev) @@ -283,7 +312,9 @@ private: wxString default_dir = c->player_playlist_directory() ? std_to_wx(c->player_playlist_directory()->string()) : wxString(wxEmptyString); wxFileDialog* d = new wxFileDialog (this, _("Select playlist file"), default_dir, wxEmptyString, wxT("XML files (*.xml)|*.xml"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); if (d->ShowModal() == wxID_OK) { - _playlist.write (wx_to_std(d->GetPath())); + boost::filesystem::path file = wx_to_std (d->GetPath()); + file.replace_extension (".xml"); + _playlist.write (file); } } @@ -303,6 +334,14 @@ private: } else { error_dialog (this, _("Some content in this playlist was not found.")); } + optional allowed_shows = _playlist.allowed_shows (); + _allowed_shows_enable->SetValue (static_cast(allowed_shows)); + if (allowed_shows) { + _allowed_shows->SetValue (*allowed_shows); + } else { + _allowed_shows->SetValue (65536); + } + setup_sensitivity (); } } @@ -313,6 +352,8 @@ private: wxButton* _remove; wxButton* _save; wxButton* _load; + wxCheckBox* _allowed_shows_enable; + wxSpinCtrl* _allowed_shows; SPL _playlist; ContentDialog* _content_dialog; @@ -349,7 +390,7 @@ private: unsetenv ("UBUNTU_MENUPROXY"); #endif - #ifdef __WXOSX__ +#ifdef __WXOSX__ ProcessSerialNumber serial; GetCurrentProcess (&serial); TransformProcessType (&serial, kProcessTransformToForegroundApplication);