X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=9330b1b60b7e579fe67bce611c5d422dd1352580;hb=500bade4402c8391eb6fb0eb7f71a426c9cd32c1;hp=02c34a3e2c15bcfb7a487416e8f3fd18bbe8ead9;hpb=5bce9837a15647bc07977be0c304f5bd0bf212c2;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 02c34a3e2..9330b1b60 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -21,21 +21,6 @@ * @brief The main DCP-o-matic GUI. */ -#include "lib/film.h" -#include "lib/config.h" -#include "lib/util.h" -#include "lib/version.h" -#include "lib/signal_manager.h" -#include "lib/log.h" -#include "lib/job_manager.h" -#include "lib/transcode_job.h" -#include "lib/exceptions.h" -#include "lib/cinema.h" -#include "lib/kdm.h" -#include "lib/send_kdm_email_job.h" -#include "lib/server_finder.h" -#include "lib/update.h" -#include "lib/content_factory.h" #include "wx/film_viewer.h" #include "wx/film_editor.h" #include "wx/job_manager_view.h" @@ -50,11 +35,31 @@ #include "wx/update_dialog.h" #include "wx/content_panel.h" #include "wx/report_problem_dialog.h" +#include "wx/video_waveform_dialog.h" +#include "lib/film.h" +#include "lib/config.h" +#include "lib/util.h" +#include "lib/video_content.h" +#include "lib/version.h" +#include "lib/signal_manager.h" +#include "lib/log.h" +#include "lib/job_manager.h" +#include "lib/exceptions.h" +#include "lib/cinema.h" +#include "lib/screen_kdm.h" +#include "lib/send_kdm_email_job.h" +#include "lib/server_finder.h" +#include "lib/update_checker.h" +#include "lib/cross.h" +#include "lib/content_factory.h" +#include "lib/compose.hpp" +#include "lib/cinema_kdms.h" #include #include #include #include #include +#include #ifdef __WXMSW__ #include #endif @@ -91,9 +96,8 @@ public: _dialog = new wxMessageDialog ( 0, wxString::Format (_("Save changes to film \"%s\" before closing?"), std_to_wx (name).data()), - /* TRANSLATORS: this is the heading for a dialog box, which tells the user that the current - project (Film) has been changed since it was last saved. - */ + /// TRANSLATORS: this is the heading for a dialog box, which tells the user that the current + /// project (Film) has been changed since it was last saved. _("Film changed"), wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION ); @@ -136,6 +140,7 @@ enum { ID_jobs_make_kdms, ID_jobs_send_dcp_to_tms, ID_jobs_show_dcp, + ID_tools_video_waveform, ID_tools_hints, ID_tools_encoding_servers, ID_tools_check_for_updates, @@ -150,6 +155,7 @@ class DOMFrame : public wxFrame public: DOMFrame (wxString const & title) : wxFrame (NULL, -1, title) + , _video_waveform_dialog (0) , _hints_dialog (0) , _servers_list_dialog (0) , _config_dialog (0) @@ -197,6 +203,7 @@ public: Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::jobs_make_kdms, this), ID_jobs_make_kdms); Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::jobs_send_dcp_to_tms, this), ID_jobs_send_dcp_to_tms); Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::jobs_show_dcp, this), ID_jobs_show_dcp); + Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_video_waveform, this), ID_tools_video_waveform); Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_hints, this), ID_tools_hints); Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_encoding_servers, this), ID_tools_encoding_servers); Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_check_for_updates, this), ID_tools_check_for_updates); @@ -439,11 +446,22 @@ private: } try { + list screen_kdms = _film->make_kdms (d->screens(), d->cpl(), d->from(), d->until(), d->formulation()); if (d->write_to ()) { - write_kdm_files (_film, d->screens (), d->cpl (), d->from (), d->until (), d->formulation (), d->directory ()); + ScreenKDM::write_files ( + _film->name(), + screen_kdms, + d->directory() + ); } else { JobManager::instance()->add ( - shared_ptr (new SendKDMEmailJob (_film, d->screens (), d->cpl (), d->from (), d->until (), d->formulation ())) + shared_ptr (new SendKDMEmailJob ( + _film->name(), + _film->dcp_name(), + d->from(), + d->until(), + CinemaKDMs::collect (screen_kdms) + )) ); } } catch (dcp::NotEncryptedError& e) { @@ -512,6 +530,15 @@ private: #endif } + void tools_video_waveform () + { + if (!_video_waveform_dialog) { + _video_waveform_dialog = new VideoWaveformDialog (this, _film_viewer); + } + + _video_waveform_dialog->Show (); + } + void tools_hints () { if (!_hints_dialog) { @@ -590,7 +617,7 @@ private: { list > jobs = JobManager::instance()->get (); list >::iterator i = jobs.begin(); - while (i != jobs.end() && dynamic_pointer_cast (*i) == 0) { + while (i != jobs.end() && (*i)->json_name() != "transcode") { ++i; } bool const dcp_creation = (i != jobs.end ()) && !(*i)->finished (); @@ -685,6 +712,7 @@ private: add_item (jobs_menu, _("S&how DCP"), ID_jobs_show_dcp, NEEDS_FILM | NOT_DURING_DCP_CREATION | NEEDS_CPL); wxMenu* tools = new wxMenu; + add_item (tools, _("Video waveform..."), ID_tools_video_waveform, NEEDS_FILM); add_item (tools, _("Hints..."), ID_tools_hints, 0); add_item (tools, _("Encoding servers..."), ID_tools_encoding_servers, 0); add_item (tools, _("Check for updates"), ID_tools_check_for_updates, 0); @@ -743,6 +771,7 @@ private: FilmEditor* _film_editor; FilmViewer* _film_viewer; + VideoWaveformDialog* _video_waveform_dialog; HintsDialog* _hints_dialog; ServersListDialog* _servers_list_dialog; wxPreferencesEditor* _config_dialog; @@ -777,6 +806,22 @@ private: bool OnInit () try { + wxInitAllImageHandlers (); + + wxSplashScreen* splash = 0; + try { + if (!Config::have_existing ()) { + 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 */ + } + SetAppName (_("DCP-o-matic")); if (!wxApp::OnInit()) { @@ -793,7 +838,7 @@ private: TransformProcessType (&serial, kProcessTransformToForegroundApplication); #endif - wxInitAllImageHandlers (); + dcpomatic_setup_path_encoding (); /* Enable i18n; this will create a Config object to look for a force-configured language. This Config @@ -816,6 +861,9 @@ private: _frame = new DOMFrame (_("DCP-o-matic")); SetTopWindow (_frame); _frame->Maximize (); + if (splash) { + splash->Destroy (); + } _frame->Show (); if (!_film_to_load.empty() && boost::filesystem::is_directory (_film_to_load)) { @@ -883,9 +931,22 @@ private: try { throw; } catch (FileError& e) { - error_dialog (0, wxString::Format (_("An exception occurred: %s (%s).\n\n" + REPORT_PROBLEM), e.what(), e.file().string().c_str ())); + error_dialog ( + 0, + wxString::Format ( + _("An exception occurred: %s (%s)\n\n") + REPORT_PROBLEM, + std_to_wx (e.what()), + std_to_wx (e.file().string().c_str ()) + ) + ); } catch (exception& e) { - error_dialog (0, wxString::Format (_("An exception occurred: %s.\n\n"), e.what ()) + " " + REPORT_PROBLEM); + error_dialog ( + 0, + wxString::Format ( + _("An exception occurred: %s.\n\n") + " " + REPORT_PROBLEM, + std_to_wx (e.what ()) + ) + ); } catch (...) { error_dialog (0, _("An unknown exception occurred.") + " " + REPORT_PROBLEM); }