X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftools%2Fdcpomatic_playlist.cc;h=50f692376d0cace72ead47bb8cde2f78a97f28ed;hb=3dff622252d0cb84b506dd220773541c7da40be2;hp=a81c0b730ef68873e22586e539a307d26223f14e;hpb=1d08c7b46a8d8ef99e4fbd14225dcdf9f6cb4667;p=dcpomatic.git diff --git a/src/tools/dcpomatic_playlist.cc b/src/tools/dcpomatic_playlist.cc index a81c0b730..50f692376 100644 --- a/src/tools/dcpomatic_playlist.cc +++ b/src/tools/dcpomatic_playlist.cc @@ -21,6 +21,7 @@ #include "../wx/wx_util.h" #include "../wx/wx_signal_manager.h" #include "../wx/content_view.h" +#include "../wx/dcpomatic_button.h" #include "../lib/util.h" #include "../lib/config.h" #include "../lib/cross.h" @@ -44,7 +45,7 @@ using boost::dynamic_pointer_cast; class ContentDialog : public wxDialog, public ContentStore { public: - ContentDialog (wxWindow* parent, weak_ptr film) + ContentDialog (wxWindow* parent) : wxDialog (parent, wxID_ANY, _("Add content"), wxDefaultPosition, wxSize(800, 640)) , _content_view (new ContentView(this)) { @@ -82,9 +83,7 @@ class DOMFrame : public wxFrame public: explicit DOMFrame (wxString const & title) : wxFrame (0, -1, title) - /* XXX: this is a bit of a hack, but we need it to be able to use the Content class hierarchy */ - , _film (new Film(optional())) - , _content_dialog (new ContentDialog(this, _film)) + , _content_dialog (new ContentDialog(this)) { /* Use a panel as the only child of the Frame so that we avoid the dark-grey background on Windows. @@ -125,12 +124,12 @@ public: main_sizer->Add (_list, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_GAP); wxBoxSizer* button_sizer = new wxBoxSizer (wxVERTICAL); - _up = new wxButton (overall_panel, wxID_ANY, _("Up")); - _down = new wxButton (overall_panel, wxID_ANY, _("Down")); - _add = new wxButton (overall_panel, wxID_ANY, _("Add")); - _remove = new wxButton (overall_panel, wxID_ANY, _("Remove")); - _save = new wxButton (overall_panel, wxID_ANY, _("Save playlist")); - _load = new wxButton (overall_panel, wxID_ANY, _("Load playlist")); + _up = new Button (overall_panel, _("Up")); + _down = new Button (overall_panel, _("Down")); + _add = new Button (overall_panel, _("Add")); + _remove = new Button (overall_panel, _("Remove")); + _save = new Button (overall_panel, _("Save playlist")); + _load = new Button (overall_panel, _("Load playlist")); button_sizer->Add (_up, 0, wxEXPAND | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); button_sizer->Add (_down, 0, wxEXPAND | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); button_sizer->Add (_add, 0, wxEXPAND | wxBOTTOM, DCPOMATIC_BUTTON_STACK_GAP); @@ -162,7 +161,6 @@ private: item.SetId (_list->GetItemCount()); long const N = _list->InsertItem (item); set_item (N, e); - _playlist.add (e); } void selection_changed () @@ -231,7 +229,9 @@ private: if (r == wxID_OK) { shared_ptr content = _content_dialog->selected (); if (content) { - add (SPLEntry(content)); + SPLEntry e (content); + add (e); + _playlist.add (e); } } } @@ -279,18 +279,26 @@ private: void save_clicked () { - wxFileDialog* d = new wxFileDialog (this, _("Select playlist file"), wxEmptyString, wxEmptyString, wxT("XML files (*.xml)|*.xml"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + Config* c = Config::instance (); + 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); } } void load_clicked () { - wxFileDialog* d = new wxFileDialog (this, _("Select playlist file"), wxEmptyString, wxEmptyString, wxT("XML files (*.xml)|*.xml")); + Config* c = Config::instance (); + 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")); if (d->ShowModal() == wxID_OK) { _list->DeleteAllItems (); - if (!_playlist.read (wx_to_std(d->GetPath()), _content_dialog)) { + _playlist.read (wx_to_std(d->GetPath()), _content_dialog); + if (!_playlist.missing()) { + _list->DeleteAllItems (); BOOST_FOREACH (SPLEntry i, _playlist.get()) { add (i); } @@ -307,7 +315,6 @@ private: wxButton* _remove; wxButton* _save; wxButton* _load; - boost::shared_ptr _film; SPL _playlist; ContentDialog* _content_dialog;