X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fwx_util.cc;h=1a537c0875759f16cafe388a1a4f739cb46cde22;hb=6bfda50f36b35a6635e9da7a25f84319ca29d92f;hp=0b1c68319262ee5cd03469d9518f39709c54bc2e;hpb=6829a1c1b3c577cdd6bc6d206dd52608b0a976ab;p=dcpomatic.git diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc index 0b1c68319..1a537c087 100644 --- a/src/wx/wx_util.cc +++ b/src/wx/wx_util.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2016 Carl Hetherington + Copyright (C) 2012-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -24,17 +24,25 @@ #include "wx_util.h" #include "file_picker_ctrl.h" +#include "static_text.h" +#include "password_entry.h" #include "lib/config.h" +#include "lib/job_manager.h" #include "lib/util.h" #include "lib/cross.h" +#include "lib/job.h" #include #include #include +#include #include #include -using namespace std; -using namespace boost; +using std::string; +using std::vector; +using std::pair; +using boost::shared_ptr; +using boost::optional; using dcp::locale_convert; wxStaticText * @@ -49,7 +57,7 @@ create_label (wxWindow* p, wxString t, bool) t += wxT (":"); } #endif - return new wxStaticText (p, wxID_ANY, t); + return new StaticText (p, t); } /** Add a wxStaticText to a wxSizer, aligning it at vertical centre. @@ -150,6 +158,7 @@ message_dialog (wxWindow* parent, wxString m) d->Destroy (); } +/** @return true if the user answered "yes" */ bool confirm_dialog (wxWindow* parent, wxString m) { @@ -285,6 +294,14 @@ checked_set (wxTextCtrl* widget, string value) } } +void +checked_set (PasswordEntry* entry, string value) +{ + if (entry->get() != value) { + entry->set(value); + } +} + void checked_set (wxTextCtrl* widget, wxString value) { @@ -354,6 +371,9 @@ dcpomatic_setup_i18n () of wxWidgets. */ locale->AddCatalog (wxT ("dcpomatic2-wxstd")); + + /* Fedora 29 (at least) installs wxstd3.mo instead of wxstd.mo */ + locale->AddCatalog (wxT ("wxstd3")); #endif locale->AddCatalog (wxT ("libdcpomatic2-wx")); @@ -448,13 +468,11 @@ maybe_show_splash () { wxSplashScreen* splash = 0; try { - if (!Config::have_existing ("config.xml")) { - 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 (); - } + 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 */ @@ -485,3 +503,45 @@ calculate_mark_interval (double mark_interval) return mark_interval; } + + +/** @return false if the task was cancelled */ +bool +display_progress (wxString title, wxString task) +{ + JobManager* jm = JobManager::instance (); + + wxProgressDialog progress (title, task, 100, 0, wxPD_CAN_ABORT); + + bool ok = true; + + while (jm->work_to_do()) { + dcpomatic_sleep (1); + if (!progress.Pulse()) { + /* user pressed cancel */ + BOOST_FOREACH (shared_ptr i, jm->get()) { + i->cancel(); + } + ok = false; + break; + } + } + + return ok; +} + +bool +report_errors_from_last_job (wxWindow* parent) +{ + JobManager* jm = JobManager::instance (); + + DCPOMATIC_ASSERT (!jm->get().empty()); + + shared_ptr last = jm->get().back(); + if (last->finished_in_error()) { + error_dialog(parent, std_to_wx(last->error_summary()) + ".\n", std_to_wx(last->error_details())); + return false; + } + + return true; +}