X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=c35f7f09e354207318474e5e6c200d0175841ef0;hb=9fd1cd191fe59ab53f5942dfdc631dac06efa206;hp=dcf6d7f4909d0f826b369654935197e5170c4f88;hpb=da9fd55339dab2605d14579a0f79588db27c232a;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index dcf6d7f49..c35f7f09e 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -46,10 +46,12 @@ #include "wx/export_dialog.h" #include "wx/paste_dialog.h" #include "wx/focus_manager.h" +#include "wx/html_dialog.h" #include "wx/initial_setup_dialog.h" #include "wx/send_i18n_dialog.h" #include "wx/i18n_hook.h" #include "lib/film.h" +#include "lib/analytics.h" #include "lib/emailer.h" #include "lib/config.h" #include "lib/util.h" @@ -87,6 +89,7 @@ #include #include #include +#include #ifdef __WXMSW__ #include #endif @@ -290,6 +293,8 @@ public: _config_changed_connection = Config::instance()->Changed.connect (boost::bind (&DOMFrame::config_changed, this, _1)); config_changed (Config::OTHER); + _analytics_message_connection = Analytics::instance()->Message.connect(boost::bind(&DOMFrame::analytics_message, this, _1, _2)); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_new, this), ID_file_new); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_open, this), ID_file_open); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_save, this), ID_file_save); @@ -410,7 +415,6 @@ public: film->set_name (path.filename().generic_string()); film->write_metadata (); set_film (film); - dcpomatic_log = film->log (); } void load_film (boost::filesystem::path file) @@ -427,8 +431,8 @@ public: ); } - for (list::const_iterator i = notes.begin(); i != notes.end(); ++i) { - error_dialog (0, std_to_wx (*i)); + BOOST_FOREACH (string i, notes) { + error_dialog (0, std_to_wx(i)); } set_film (film); @@ -458,6 +462,7 @@ public: if (_film) { _film->Change.connect (boost::bind (&DOMFrame::film_change, this, _1)); _film->Message.connect (boost::bind(&DOMFrame::film_message, this, _1)); + dcpomatic_log = _film->log (); } } @@ -500,7 +505,7 @@ private: } catch (boost::filesystem::filesystem_error& e) { #ifdef DCPOMATIC_WINDOWS string bad_chars = "<>:\"/|?*"; - string const filename = d->path().string(); + string const filename = d->path().filename().string(); string found_bad_chars; for (size_t i = 0; i < bad_chars.length(); ++i) { if (filename.find(bad_chars[i]) != string::npos && found_bad_chars.find(bad_chars[i]) == string::npos) { @@ -1031,7 +1036,7 @@ private: list to; to.push_back ("carl@dcpomatic.com"); Emailer emailer (d->email(), to, "DCP-o-matic translations", body); - emailer.send ("main.carlh.net", 2525); + emailer.send ("main.carlh.net", 2525, EMAIL_PROTOCOL_STARTTLS); } d->Destroy (); @@ -1105,6 +1110,9 @@ private: */ _config_changed_connection.disconnect (); + /* Also stop hearing about analytics-related stuff */ + _analytics_message_connection.disconnect (); + ev.Skip (); } @@ -1403,6 +1411,13 @@ private: _film_viewer->seek_by (_film_viewer->one_video_frame(), true); } + void analytics_message (string title, string html) + { + HTMLDialog* d = new HTMLDialog(this, std_to_wx(title), std_to_wx(html)); + d->ShowModal(); + d->Destroy(); + } + FilmEditor* _film_editor; boost::shared_ptr _film_viewer; StandardControls* _controls; @@ -1418,6 +1433,7 @@ private: int _history_position; wxMenuItem* _history_separator; boost::signals2::scoped_connection _config_changed_connection; + boost::signals2::scoped_connection _analytics_message_connection; bool _update_news_requested; shared_ptr _clipboard; }; @@ -1439,20 +1455,20 @@ public: App () : wxApp () , _frame (0) + , _splash (0) {} private: bool OnInit () { - wxSplashScreen* splash = 0; try { wxInitAllImageHandlers (); Config::FailedToLoad.connect (boost::bind (&App::config_failed_to_load, this)); Config::Warning.connect (boost::bind (&App::config_warning, this, _1)); - splash = maybe_show_splash (); + _splash = maybe_show_splash (); SetAppName (_("DCP-o-matic")); @@ -1495,9 +1511,9 @@ private: _frame = new DOMFrame (_("DCP-o-matic")); SetTopWindow (_frame); _frame->Maximize (); - if (splash) { - splash->Destroy (); - splash = 0; + if (_splash) { + _splash->Destroy (); + _splash = 0; } if (!Config::instance()->nagged(Config::NAG_INITIAL_SETUP)) { @@ -1530,7 +1546,7 @@ private: } signal_manager = new wxSignalManager (this); - Bind (wxEVT_IDLE, boost::bind (&App::idle, this)); + Bind (wxEVT_IDLE, boost::bind (&App::idle, this, _1)); Bind (wxEVT_TIMER, boost::bind (&App::check, this)); _timer.reset (new wxTimer (this)); @@ -1542,8 +1558,8 @@ private: } catch (exception& e) { - if (splash) { - splash->Destroy (); + if (_splash) { + _splash->Destroy (); } error_dialog (0, wxString::Format ("DCP-o-matic could not start."), std_to_wx(e.what())); } @@ -1582,6 +1598,11 @@ private: void report_exception () { + if (_splash) { + _splash->Destroy (); + _splash = 0; + } + try { throw; } catch (FileError& e) { @@ -1619,9 +1640,10 @@ private: report_exception (); } - void idle () + void idle (wxIdleEvent& ev) { signal_manager->ui_idle (); + ev.Skip (); } void check () @@ -1649,6 +1671,11 @@ private: return false; } + if (_splash) { + _splash->Destroy (); + _splash = 0; + } + RecreateChainDialog* d = new RecreateChainDialog (_frame); int const r = d->ShowModal (); d->Destroy (); @@ -1656,6 +1683,7 @@ private: } DOMFrame* _frame; + wxSplashScreen* _splash; shared_ptr _timer; string _film_to_load; string _film_to_create;