X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=8bcca9b22b721d20d21b1a0f8fec461f5bc20e0e;hb=c8966336f48c4de7222a97c23eccad24fab45121;hp=24c5bd5ecae4624758f36f40b1c66fa687c09ce0;hpb=aeff733d3127e2629388a9a019c07d9f32647d85;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 24c5bd5ec..8bcca9b22 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -58,6 +58,7 @@ #include "lib/analytics.h" #include "lib/emailer.h" #include "lib/config.h" +#include "lib/cross.h" #include "lib/util.h" #include "lib/video_content.h" #include "lib/content.h" @@ -127,8 +128,6 @@ using std::shared_ptr; using std::string; using std::vector; using std::wcout; -using std::wstring; -using std::wstringstream; using boost::optional; using boost::is_any_of; using boost::algorithm::find; @@ -388,12 +387,18 @@ public: #else int accelerators = 6; #endif - wxAcceleratorEntry* accel = new wxAcceleratorEntry[accelerators]; + std::vector accel(accelerators); + /* [Shortcut] Ctrl+A:Add file(s) to the film */ accel[0].Set (wxACCEL_CTRL, static_cast('A'), ID_add_file); + /* [Shortcut] Delete:Remove selected content from film */ accel[1].Set (wxACCEL_NORMAL, WXK_DELETE, ID_remove); + /* [Shortcut] Space:Start/stop playback */ accel[2].Set (wxACCEL_NORMAL, WXK_SPACE, ID_start_stop); + /* [Shortcut] Ctrl+T:Open timeline window */ accel[3].Set (wxACCEL_CTRL, static_cast('T'), ID_timeline); + /* [Shortcut] Left arrow:Move back one frame */ accel[4].Set (wxACCEL_NORMAL, WXK_LEFT, ID_back_frame); + /* [Shortcut] Right arrow:Move forward one frame */ accel[5].Set (wxACCEL_NORMAL, WXK_RIGHT, ID_forward_frame); #ifdef __WXOSX__ accel[6].Set (wxACCEL_CTRL, static_cast('W'), ID_file_close); @@ -404,9 +409,8 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::timeline_pressed, this), ID_timeline); Bind (wxEVT_MENU, boost::bind (&DOMFrame::back_frame, this), ID_back_frame); Bind (wxEVT_MENU, boost::bind (&DOMFrame::forward_frame, this), ID_forward_frame); - wxAcceleratorTable accel_table (accelerators, accel); + wxAcceleratorTable accel_table (accelerators, accel.data()); SetAcceleratorTable (accel_table); - delete[] accel; } void remove_accelerators () @@ -447,12 +451,12 @@ public: } for (auto i: notes) { - error_dialog (0, std_to_wx(i)); + error_dialog (nullptr, std_to_wx(i)); } set_film (film); - JobManager::instance()->add(shared_ptr(new CheckContentChangeJob(film))); + JobManager::instance()->add(make_shared(film)); } catch (FileNotFoundError& e) { auto const dir = e.file().parent_path(); @@ -794,7 +798,7 @@ private: a long time, and crashes/power failures are moderately likely. */ _film->write_metadata (); - _film->make_dcp (true); + _film->make_dcp (TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP); } catch (BadSettingError& e) { error_dialog (this, wxString::Format (_("Bad setting for %s."), std_to_wx(e.setting()).data()), std_to_wx(e.what())); } catch (std::exception& e) { @@ -928,7 +932,7 @@ private: _("You are making a DKDM which is encrypted by a private key held in" "\n\n%s\n\nIt is VITALLY IMPORTANT " "that you BACK UP THIS FILE since if it is lost " - "your DKDMs (and the DCPs they protect) will become useless."), std_to_wx(Config::config_file().string()).data() + "your DKDMs (and the DCPs they protect) will become useless."), std_to_wx(Config::config_read_file().string()).data() ) ); @@ -988,7 +992,7 @@ private: } } - auto job = make_shared(_film); + auto job = make_shared(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP); job->set_encoder ( make_shared ( _film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->split_streams(), d->x264_crf()) @@ -1003,7 +1007,7 @@ private: { auto d = new ExportSubtitlesDialog (this, _film->reels().size(), _film->interop()); if (d->ShowModal() == wxID_OK) { - auto job = make_shared(_film); + auto job = make_shared(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP); job->set_encoder ( make_shared(_film, job, d->path(), _film->isdcf_name(true), d->split_reels(), d->include_font()) ); @@ -1021,36 +1025,9 @@ private: void jobs_show_dcp () { DCPOMATIC_ASSERT (_film->directory ()); -#ifdef DCPOMATIC_WINDOWS - wstringstream args; - args << "/select," << _film->dir (_film->dcp_name(false)); - ShellExecute (0, L"open", L"explorer.exe", args.str().c_str(), 0, SW_SHOWDEFAULT); -#endif - -#ifdef DCPOMATIC_LINUX - int r = system ("which nautilus"); - if (WEXITSTATUS (r) == 0) { - r = system (String::compose("nautilus \"%1\"", _film->directory()->string()).c_str()); - if (WEXITSTATUS (r)) { - error_dialog (this, _("Could not show DCP."), _("Could not run nautilus")); - } - } else { - int r = system ("which konqueror"); - if (WEXITSTATUS (r) == 0) { - r = system (String::compose ("konqueror \"%1\"", _film->directory()->string()).c_str()); - if (WEXITSTATUS (r)) { - error_dialog (this, _("Could not show DCP"), _("Could not run konqueror")); - } - } + if (show_in_file_manager(_film->directory().get(), _film->dir(_film->dcp_name(false)))) { + error_dialog (this, _("Could not show DCP.")); } -#endif - -#ifdef DCPOMATIC_OSX - int r = system (String::compose ("open -R \"%1\"", _film->dir (_film->dcp_name(false)).string()).c_str()); - if (WEXITSTATUS (r)) { - error_dialog (this, _("Could not show DCP")); - } -#endif } void view_closed_captions () @@ -1302,9 +1279,12 @@ private: void setup_menu (wxMenuBar* m) { _file_menu = new wxMenu; + /* [Shortcut] Ctrl+N:New film */ add_item (_file_menu, _("New...\tCtrl-N"), ID_file_new, ALWAYS); + /* [Shortcut] Ctrl+O:Open existing film */ add_item (_file_menu, _("&Open...\tCtrl-O"), ID_file_open, ALWAYS); _file_menu->AppendSeparator (); + /* [Shortcut] Ctrl+S:Save current film */ add_item (_file_menu, _("&Save\tCtrl-S"), ID_file_save, NEEDS_FILM); _file_menu->AppendSeparator (); add_item (_file_menu, _("Save as &template..."), ID_file_save_as_template, NEEDS_FILM); @@ -1314,6 +1294,7 @@ private: _history_position = _file_menu->GetMenuItems().GetCount(); _file_menu->AppendSeparator (); + /* [Shortcut] Ctrl+W:Close current film */ add_item (_file_menu, _("&Close\tCtrl-W"), ID_file_close, NEEDS_FILM); #ifndef __WXOSX__ @@ -1327,26 +1308,35 @@ private: #endif auto edit = new wxMenu; + /* [Shortcut] Ctrl+C:Copy settings from currently selected content */ add_item (edit, _("Copy settings\tCtrl-C"), ID_edit_copy, NEEDS_FILM | NOT_DURING_DCP_CREATION | NEEDS_SINGLE_SELECTED_CONTENT); + /* [Shortcut] Ctrl+V:Paste settings into currently selected content */ add_item (edit, _("Paste settings...\tCtrl-V"), ID_edit_paste, NEEDS_FILM | NOT_DURING_DCP_CREATION | NEEDS_SELECTED_CONTENT | NEEDS_CLIPBOARD); edit->AppendSeparator (); + /* [Shortcut] Shift+Ctrl+A:Select all content */ add_item (edit, _("Select all\tShift-Ctrl-A"), ID_edit_select_all, NEEDS_FILM); #ifdef __WXOSX__ add_item (_file_menu, _("&Preferences...\tCtrl-P"), wxID_PREFERENCES, ALWAYS); #else edit->AppendSeparator (); + /* [Shortcut] Ctrl+P:Open preferences window */ add_item (edit, _("&Preferences...\tCtrl-P"), wxID_PREFERENCES, ALWAYS); #endif auto jobs_menu = new wxMenu; + /* [Shortcut] Ctrl+M:Make DCP */ add_item (jobs_menu, _("&Make DCP\tCtrl-M"), ID_jobs_make_dcp, NEEDS_FILM | NOT_DURING_DCP_CREATION); + /* [Shortcut] Ctrl+B:Make DCP in the batch converter*/ add_item (jobs_menu, _("Make DCP in &batch converter\tCtrl-B"), ID_jobs_make_dcp_batch, NEEDS_FILM | NOT_DURING_DCP_CREATION); jobs_menu->AppendSeparator (); + /* [Shortcut] Ctrl+K:Make KDMs */ add_item (jobs_menu, _("Make &KDMs...\tCtrl-K"), ID_jobs_make_kdms, NEEDS_FILM); + /* [Shortcut] Ctrl+D:Make DKDMs */ 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 (); + /* [Shortcut] Ctrl+E:Export video file */ 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 ();