X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic_player.cc;h=a75f6b9f40d2422fde57527920c1e50f37cf4872;hb=f1dbcec7552052856369631e77c5eb160badd619;hp=0346bb18ab7ddfc1897fb778f7bd2187c6cd0ac6;hpb=6abe10b28dbe3132ac329dad60befae5f40fbe69;p=dcpomatic.git diff --git a/src/tools/dcpomatic_player.cc b/src/tools/dcpomatic_player.cc index 0346bb18a..a75f6b9f4 100644 --- a/src/tools/dcpomatic_player.cc +++ b/src/tools/dcpomatic_player.cc @@ -62,6 +62,7 @@ enum { ID_file_open = 1, ID_file_add_ov, ID_file_add_kdm, + ID_file_close, ID_view_scale_appropriate, ID_view_scale_full, ID_view_scale_half, @@ -88,6 +89,7 @@ public: wxMenuBar* bar = new wxMenuBar; setup_menu (bar); + set_menu_sensitivity (); SetMenuBar (bar); #ifdef DCPOMATIC_WINDOWS @@ -99,6 +101,7 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_open, this), ID_file_open); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_add_ov, this), ID_file_add_ov); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_add_kdm, this), ID_file_add_kdm); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_close, this), ID_file_close); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_exit, this), wxID_EXIT); Bind (wxEVT_MENU, boost::bind (&DOMFrame::edit_preferences, this), wxID_PREFERENCES); Bind (wxEVT_MENU, boost::bind (&DOMFrame::set_decode_reduction, this, optional()), ID_view_scale_appropriate); @@ -160,7 +163,10 @@ public: } _viewer->set_film (_film); + _viewer->set_position (DCPTime ()); _info->triggered_update (); + + set_menu_sensitivity (); } private: @@ -169,8 +175,11 @@ private: { wxMenu* file = new wxMenu; file->Append (ID_file_open, _("&Open...\tCtrl-O")); - file->Append (ID_file_add_ov, _("&Add OV...")); - file->Append (ID_file_add_kdm, _("&Add KDM...")); + _file_add_ov = file->Append (ID_file_add_ov, _("&Add OV...")); + _file_add_kdm = file->Append (ID_file_add_kdm, _("&Add KDM...")); + file->AppendSeparator (); + file->Append (ID_file_close, _("&Close")); + file->AppendSeparator (); #ifdef __WXOSX__ file->Append (wxID_EXIT, _("&Exit")); @@ -259,6 +268,7 @@ private: } if (r == wxID_OK) { + DCPOMATIC_ASSERT (_film); shared_ptr dcp = boost::dynamic_pointer_cast(_film->content().front()); DCPOMATIC_ASSERT (dcp); dcp->add_ov (wx_to_std(c->GetPath())); @@ -274,23 +284,31 @@ private: wxFileDialog* d = new wxFileDialog (this, _("Select KDM")); if (d->ShowModal() == wxID_OK) { + DCPOMATIC_ASSERT (_film); shared_ptr dcp = boost::dynamic_pointer_cast(_film->content().front()); DCPOMATIC_ASSERT (dcp); try { dcp->add_kdm (dcp::EncryptedKDM (dcp::file_to_string (wx_to_std (d->GetPath ()), MAX_KDM_SIZE))); + dcp->examine (shared_ptr()); } catch (exception& e) { - error_dialog (this, wxString::Format (_("Could not load KDM (%s)"), e.what ())); + error_dialog (this, wxString::Format (_("Could not load KDM.")), std_to_wx(e.what())); d->Destroy (); return; } - - dcp->examine (shared_ptr()); } d->Destroy (); _info->triggered_update (); } + void file_close () + { + _viewer->set_film (shared_ptr()); + _film.reset (); + _info->triggered_update (); + set_menu_sensitivity (); + } + void file_exit () { Close (); @@ -370,12 +388,20 @@ private: } } + void set_menu_sensitivity () + { + _file_add_ov->Enable (static_cast(_film)); + _file_add_kdm->Enable (static_cast(_film)); + } + bool _update_news_requested; PlayerInformation* _info; wxPreferencesEditor* _config_dialog; FilmViewer* _viewer; boost::shared_ptr _film; boost::signals2::scoped_connection _config_changed_connection; + wxMenuItem* _file_add_ov; + wxMenuItem* _file_add_kdm; }; static const wxCmdLineEntryDesc command_line_description[] = { @@ -402,20 +428,9 @@ private: wxInitAllImageHandlers (); Config::FailedToLoad.connect (boost::bind (&App::config_failed_to_load, this)); + Config::Warning.connect (boost::bind (&App::config_warning, this, _1)); - wxSplashScreen* splash = 0; - try { - if (!Config::have_existing ("config.xml")) { - wxBitmap bitmap; - boost::filesystem::path p = shared_path () / "splash.png"; - if (bitmap.LoadFile (std_to_wx (p.string ()), wxBITMAP_TYPE_PNG)) { - splash = new wxSplashScreen (bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, 0, 0, -1); - wxYield (); - } - } - } catch (boost::filesystem::filesystem_error& e) { - /* Maybe we couldn't find the splash image; never mind */ - } + wxSplashScreen* splash = maybe_show_splash (); SetAppName (_("DCP-o-matic Player")); @@ -467,7 +482,7 @@ private: try { _frame->load_dcp (_dcp_to_load); } catch (exception& e) { - error_dialog (0, std_to_wx (String::compose (wx_to_std (_("Could not load DCP %1 (%2)")), _dcp_to_load, e.what()))); + error_dialog (0, std_to_wx (String::compose (wx_to_std (_("Could not load DCP %1.")), _dcp_to_load)), std_to_wx(e.what())); } } @@ -481,7 +496,7 @@ private: } catch (exception& e) { - error_dialog (0, wxString::Format ("DCP-o-matic Player could not start: %s", e.what ())); + error_dialog (0, _("DCP-o-matic Player could not start."), std_to_wx(e.what())); return true; } @@ -549,6 +564,11 @@ private: message_dialog (_frame, _("The existing configuration failed to load. Default values will be used instead. These may take a short time to create.")); } + void config_warning (string m) + { + message_dialog (_frame, std_to_wx (m)); + } + DOMFrame* _frame; string _dcp_to_load; };