X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=a563863590f30896c54756bc7884eeb12f3003b6;hb=03640a32d84c7c9c443351a3531fe702bbfff012;hp=9cd99a265f553b9e51f39a600e20dbe340a0a9a7;hpb=045f61f0120bb15c7329f2e621e149be9e88011a;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 9cd99a265..a56386359 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -45,7 +45,8 @@ #include "wx/save_template_dialog.h" #include "wx/templates_dialog.h" #include "wx/nag_dialog.h" -#include "wx/export_dialog.h" +#include "wx/export_subtitles_dialog.h" +#include "wx/export_video_file_dialog.h" #include "wx/paste_dialog.h" #include "wx/focus_manager.h" #include "wx/html_dialog.h" @@ -84,23 +85,23 @@ #include "lib/text_content.h" #include "lib/dcpomatic_log.h" #include "lib/subtitle_encoder.h" +#include "lib/warnings.h" #include #include +DCPOMATIC_DISABLE_WARNINGS #include #include #include #include #include #include +DCPOMATIC_ENABLE_WARNINGS #ifdef __WXGTK__ #include #endif #ifdef __WXMSW__ #include #endif -#ifdef __WXOSX__ -#include -#endif #include #include #include @@ -130,6 +131,9 @@ using boost::optional; using boost::function; using boost::is_any_of; using boost::algorithm::find; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif using dcp::raw_convert; class FilmChangedClosingDialog : public boost::noncopyable @@ -227,7 +231,8 @@ enum { ID_jobs_make_kdms, ID_jobs_make_dkdms, ID_jobs_make_self_dkdm, - ID_jobs_export, + ID_jobs_export_video_file, + ID_jobs_export_subtitles, ID_jobs_send_dcp_to_tms, ID_jobs_show_dcp, ID_jobs_open_dcp_in_player, @@ -268,6 +273,7 @@ public: , _history_position (0) , _history_separator (0) , _update_news_requested (false) + , _first_shown_called (false) { #if defined(DCPOMATIC_WINDOWS) if (Config::instance()->win32_console ()) { @@ -319,7 +325,8 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_dkdms, this), ID_jobs_make_dkdms); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_dcp_batch, this), ID_jobs_make_dcp_batch); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_self_dkdm, this), ID_jobs_make_self_dkdm); - Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_export, this), ID_jobs_export); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_export_video_file, this), ID_jobs_export_video_file); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_export_subtitles, this), ID_jobs_export_subtitles); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_send_dcp_to_tms, this), ID_jobs_send_dcp_to_tms); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_show_dcp, this), ID_jobs_show_dcp); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_open_dcp_in_player, this), ID_jobs_open_dcp_in_player); @@ -336,6 +343,7 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_report_a_problem, this), ID_help_report_a_problem); Bind (wxEVT_CLOSE_WINDOW, boost::bind (&DOMFrame::close, this, _1)); + Bind (wxEVT_SHOW, boost::bind (&DOMFrame::show, this, _1)); /* Use a panel as the only child of the Frame so that we avoid the dark-grey background on Windows. @@ -490,6 +498,14 @@ public: private: + void show (wxShowEvent& ev) + { + if (ev.IsShown() && !_first_shown_called) { + _film_editor->first_shown (); + _first_shown_called = true; + } + } + void film_message (string m) { message_dialog (this, std_to_wx(m)); @@ -865,7 +881,11 @@ private: _film->write_metadata (); if (send_to_other_tool (BATCH_JOB_PORT, &start_batch_converter, _film->directory()->string())) { +#ifdef DCPOMATIC_OSX + error_dialog (this, _("Could not start the batch converter. You may need to download it from dcpomatic.com.")); +#else error_dialog (this, _("Could not find batch converter.")); +#endif } } @@ -876,7 +896,11 @@ private: } if (send_to_other_tool (PLAYER_PLAY_PORT, &start_player, _film->dir(_film->dcp_name(false)).string())) { +#ifdef DCPOMATIC_OSX + error_dialog (this, _("Could not start the player. You may need to download it from dcpomatic.com.")); +#else error_dialog (this, _("Could not find player.")); +#endif } } @@ -942,9 +966,10 @@ private: d->Destroy (); } - void jobs_export () + + void jobs_export_video_file () { - ExportDialog* d = new ExportDialog (this, _film->isdcf_name(true)); + ExportVideoFileDialog* d = new ExportVideoFileDialog (this, _film->isdcf_name(true)); if (d->ShowModal() == wxID_OK) { if (boost::filesystem::exists(d->path())) { bool ok = confirm_dialog( @@ -959,26 +984,35 @@ private: } shared_ptr job (new TranscodeJob (_film)); - if (d->format() == EXPORT_FORMAT_SUBTITLES_DCP) { - job->set_encoder ( - shared_ptr(new SubtitleEncoder(_film, job, d->path(), d->split_reels())) - ); - } else { - job->set_encoder ( - shared_ptr ( - new FFmpegEncoder (_film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->x264_crf() + job->set_encoder ( + shared_ptr ( + new FFmpegEncoder (_film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->split_streams(), d->x264_crf() #ifdef DCPOMATIC_VARIANT_SWAROOP - , optional(), optional() + , optional(), optional() #endif - ) ) - ); - } + ) + ); JobManager::instance()->add (job); } d->Destroy (); } + + void jobs_export_subtitles () + { + ExportSubtitlesDialog* d = new ExportSubtitlesDialog (this, _film->reels().size(), _film->interop()); + if (d->ShowModal() == wxID_OK) { + shared_ptr job (new TranscodeJob (_film)); + job->set_encoder ( + shared_ptr(new SubtitleEncoder(_film, job, d->path(), _film->isdcf_name(true), d->split_reels(), d->include_font())) + ); + JobManager::instance()->add (job); + } + d->Destroy (); + } + + void jobs_send_dcp_to_tms () { _film->send_dcp_to_tms (); @@ -1311,7 +1345,8 @@ private: add_item (jobs_menu, _("Make &DKDMs...\tCtrl-D"), ID_jobs_make_dkdms, NEEDS_FILM); add_item (jobs_menu, _("Make DKDM for DCP-o-matic..."), ID_jobs_make_self_dkdm, NEEDS_FILM | NEEDS_ENCRYPTION); jobs_menu->AppendSeparator (); - add_item (jobs_menu, _("Export...\tCtrl-E"), ID_jobs_export, NEEDS_FILM); + add_item (jobs_menu, _("Export video file...\tCtrl-E"), ID_jobs_export_video_file, NEEDS_FILM); + add_item (jobs_menu, _("Export subtitles..."), ID_jobs_export_subtitles, NEEDS_FILM); jobs_menu->AppendSeparator (); add_item (jobs_menu, _("&Send DCP to TMS"), ID_jobs_send_dcp_to_tms, NEEDS_FILM | NOT_DURING_DCP_CREATION | NEEDS_CPL); @@ -1498,6 +1533,7 @@ private: boost::signals2::scoped_connection _analytics_message_connection; bool _update_news_requested; shared_ptr _clipboard; + bool _first_shown_called; }; static const wxCmdLineEntryDesc command_line_description[] = { @@ -1548,10 +1584,9 @@ private: unsetenv ("UBUNTU_MENUPROXY"); #endif -#ifdef __WXOSX__ - ProcessSerialNumber serial; - GetCurrentProcess (&serial); - TransformProcessType (&serial, kProcessTransformToForegroundApplication); +#ifdef DCPOMATIC_OSX + dcpomatic_sleep_seconds (1); + make_foreground_application (); #endif dcpomatic_setup_path_encoding ();