X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=db3d2205215bbe5cbaa344239ad5809a081d6221;hb=0fb8f8c4ec481e342d26a332595d39fcf8cd4e94;hp=ee79aeb3763e8f6ee253985996cc56b7fa8cef7b;hpb=4548027ac50f2db16891f272d7a6c25b80062f15;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index ee79aeb37..db3d22052 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -211,7 +211,8 @@ enum { ID_file_duplicate_and_open, ID_file_history, /* Allow spare IDs after _history for the recent files list */ - ID_edit_copy = 100, + ID_file_close = 100, + ID_edit_copy, ID_edit_paste, ID_content_scale_to_fit_width, ID_content_scale_to_fit_height, @@ -295,6 +296,7 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_save_as_template, this), ID_file_save_as_template); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_duplicate, this), ID_file_duplicate); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_duplicate_and_open, this), ID_file_duplicate_and_open); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_close, this), ID_file_close); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_history, this, _1), ID_file_history, ID_file_history + HISTORY_SIZE); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_exit, this), wxID_EXIT); Bind (wxEVT_MENU, boost::bind (&DOMFrame::edit_copy, this), ID_edit_copy); @@ -339,8 +341,8 @@ public: right_sizer->Add (job_manager_view, 1, wxEXPAND | wxALL, 6); wxBoxSizer* main_sizer = new wxBoxSizer (wxHORIZONTAL); - main_sizer->Add (_film_editor, 1, wxEXPAND | wxALL, 6); - main_sizer->Add (right_sizer, 2, wxEXPAND | wxALL, 6); + main_sizer->Add (_film_editor, 0, wxEXPAND | wxALL, 6); + main_sizer->Add (right_sizer, 1, wxEXPAND | wxALL, 6); set_menu_sensitivity (); @@ -374,7 +376,7 @@ public: accel[4].Set (wxACCEL_NORMAL, WXK_LEFT, ID_back_frame); accel[5].Set (wxACCEL_NORMAL, WXK_RIGHT, ID_forward_frame); #ifdef __WXOSX__ - accel[6].Set (wxACCEL_CTRL, static_cast('W'), wxID_EXIT); + accel[6].Set (wxACCEL_CTRL, static_cast('W'), ID_file_close); #endif Bind (wxEVT_MENU, boost::bind (&ContentPanel::add_file_clicked, _film_editor->content_panel()), ID_add_file); Bind (wxEVT_MENU, boost::bind (&DOMFrame::remove_clicked, this, _1), ID_remove); @@ -450,10 +452,13 @@ public: _video_waveform_dialog = 0; } set_menu_sensitivity (); - if (_film->directory()) { + if (_film && _film->directory()) { Config::instance()->add_to_history (_film->directory().get()); } - _film->Change.connect (boost::bind (&DOMFrame::film_change, this, _1)); + if (_film) { + _film->Change.connect (boost::bind (&DOMFrame::film_change, this, _1)); + _film->Message.connect (boost::bind(&DOMFrame::film_message, this, _1)); + } } shared_ptr film () const { @@ -462,6 +467,11 @@ public: private: + void film_message (string m) + { + message_dialog (this, std_to_wx(m)); + } + void film_change (ChangeType type) { if (type == CHANGE_TYPE_DONE) { @@ -584,6 +594,31 @@ private: d->Destroy (); } + void file_close () + { + if (_film && _film->dirty ()) { + + FilmChangedClosingDialog* dialog = new FilmChangedClosingDialog (_film->name ()); + int const r = dialog->run (); + delete dialog; + + switch (r) { + case wxID_NO: + /* Don't save and carry on to close */ + break; + case wxID_YES: + /* Save and carry on to close */ + _film->write_metadata (); + break; + case wxID_CANCEL: + /* Stop */ + return; + } + } + + set_film (shared_ptr()); + } + void file_history (wxCommandEvent& event) { vector history = Config::instance()->history (); @@ -670,9 +705,9 @@ private: if (!_film->should_be_enough_disk_space (required, available, can_hard_link)) { wxString message; if (can_hard_link) { - message = wxString::Format (_("The DCP for this film will take up about %.1f Gb, and the disk that you are using only has %.1f Gb available. Do you want to continue anyway?"), required, available); + message = wxString::Format (_("The DCP for this film will take up about %.1f GB, and the disk that you are using only has %.1f GB available. Do you want to continue anyway?"), required, available); } else { - message = wxString::Format (_("The DCP and intermediate files for this film will take up about %.1f Gb, and the disk that you are using only has %.1f Gb available. You would need half as much space if the filesystem supported hard links, but it does not. Do you want to continue anyway?"), required, available); + message = wxString::Format (_("The DCP and intermediate files for this film will take up about %.1f GB, and the disk that you are using only has %.1f GB available. You would need half as much space if the filesystem supported hard links, but it does not. Do you want to continue anyway?"), required, available); } if (!confirm_dialog (this, message)) { return; @@ -1180,6 +1215,9 @@ private: _history_position = _file_menu->GetMenuItems().GetCount(); + _file_menu->AppendSeparator (); + add_item (_file_menu, _("&Close"), ID_file_close, NEEDS_FILM); + #ifndef __WXOSX__ _file_menu->AppendSeparator (); #endif @@ -1408,7 +1446,7 @@ private: Config::FailedToLoad.connect (boost::bind (&App::config_failed_to_load, this)); Config::Warning.connect (boost::bind (&App::config_warning, this, _1)); - wxSplashScreen* splash = maybe_show_splash (); + splash = maybe_show_splash (); SetAppName (_("DCP-o-matic"));