More c++ tidying.
[dcpomatic.git] / src / wx / wx_util.cc
index bfc7c30690936ec405cd0833c6719030d1403d62..8b6d0961ba74a0f91b3e59d11c3b309a9ade9bc5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 #include "lib/util.h"
 #include "lib/cross.h"
 #include "lib/job.h"
+#include "lib/warnings.h"
 #include <dcp/locale_convert.h>
+DCPOMATIC_DISABLE_WARNINGS
 #include <wx/spinctrl.h>
 #include <wx/splash.h>
 #include <wx/progdlg.h>
 #include <wx/filepicker.h>
+DCPOMATIC_ENABLE_WARNINGS
 #include <boost/thread.hpp>
 
 using std::string;
 using std::vector;
 using std::pair;
-using boost::shared_ptr;
+using std::shared_ptr;
 using boost::optional;
 using dcp::locale_convert;
+using namespace dcpomatic;
 
 wxStaticText *
 #ifdef __WXOSX__
@@ -76,7 +80,7 @@ add_label_to_sizer (wxSizer* s, wxWindow* p, wxString t, bool left, int prop, in
                flags |= wxALIGN_RIGHT;
        }
 #endif
-       wxStaticText* m = create_label (p, t, left);
+       auto m = create_label (p, t, left);
        s->Add (m, prop, flags, 6);
        return m;
 }
@@ -106,7 +110,7 @@ add_label_to_sizer (wxGridBagSizer* s, wxWindow* p, wxString t, bool left, wxGBP
                flags |= wxALIGN_RIGHT;
        }
 #endif
-       wxStaticText* m = create_label (p, t, left);
+       auto m = create_label (p, t, left);
        s->Add (m, pos, span, flags);
        return m;
 }
@@ -136,7 +140,7 @@ add_label_to_sizer (wxGridBagSizer* s, wxStaticText* t, bool, wxGBPosition pos,
 void
 error_dialog (wxWindow* parent, wxString m, optional<wxString> e)
 {
-       wxMessageDialog* d = new wxMessageDialog (parent, m, _("DCP-o-matic"), wxOK | wxICON_ERROR);
+       auto d = new wxMessageDialog (parent, m, _("DCP-o-matic"), wxOK | wxICON_ERROR);
        if (e) {
                wxString em = *e;
                em[0] = wxToupper (em[0]);
@@ -153,11 +157,12 @@ error_dialog (wxWindow* parent, wxString m, optional<wxString> e)
 void
 message_dialog (wxWindow* parent, wxString m)
 {
-       wxMessageDialog* d = new wxMessageDialog (parent, m, _("DCP-o-matic"), wxOK | wxICON_INFORMATION);
+       auto d = new wxMessageDialog (parent, m, _("DCP-o-matic"), wxOK | wxICON_INFORMATION);
        d->ShowModal ();
        d->Destroy ();
 }
 
+/** @return true if the user answered "yes" */
 bool
 confirm_dialog (wxWindow* parent, wxString m)
 {
@@ -248,7 +253,7 @@ checked_set (wxChoice* widget, int value)
 void
 checked_set (wxChoice* widget, string value)
 {
-       wxClientData* o = 0;
+       wxClientData* o = nullptr;
        if (widget->GetSelection() != -1) {
                o = widget->GetClientObject (widget->GetSelection ());
        }
@@ -280,8 +285,8 @@ checked_set (wxChoice* widget, vector<pair<string, string> > items)
        }
 
        widget->Clear ();
-       for (vector<pair<string, string> >::const_iterator i = items.begin(); i != items.end(); ++i) {
-               widget->Append (std_to_wx (i->first), new wxStringClientData (std_to_wx (i->second)));
+       for (auto i: items) {
+               widget->Append (std_to_wx(i.first), new wxStringClientData(std_to_wx(i.second)));
        }
 }
 
@@ -346,15 +351,15 @@ dcpomatic_setup_i18n ()
 {
        int language = wxLANGUAGE_DEFAULT;
 
-       boost::optional<string> config_lang = Config::instance()->language ();
+       auto config_lang = Config::instance()->language ();
        if (config_lang && !config_lang->empty ()) {
-               wxLanguageInfo const * li = wxLocale::FindLanguageInfo (std_to_wx (config_lang.get ()));
+               auto const li = wxLocale::FindLanguageInfo (std_to_wx (config_lang.get ()));
                if (li) {
                        language = li->Language;
                }
        }
 
-       wxLocale* locale = 0;
+       wxLocale* locale = nullptr;
        if (wxLocale::IsAvailable (language)) {
                locale = new wxLocale (language, wxLOCALE_LOAD_DEFAULT);
 
@@ -413,7 +418,7 @@ wx_get (wxSpinCtrlDouble* w)
 wxString
 context_translation (wxString s)
 {
-       wxString t = wxGetTranslation (s);
+       auto t = wxGetTranslation (s);
        if (t == s) {
                /* No translation; strip the context */
                int c = t.Find (wxT ("|"));
@@ -428,7 +433,7 @@ context_translation (wxString s)
 wxString
 time_to_timecode (DCPTime t, double fps)
 {
-       double w = t.seconds ();
+       auto w = t.seconds ();
        int const h = (w / 3600);
        w -= h * 3600;
        int const m = (w / 60);
@@ -465,11 +470,10 @@ setup_audio_channels_choice (wxChoice* choice, int minimum)
 wxSplashScreen *
 maybe_show_splash ()
 {
-       wxSplashScreen* splash = 0;
+       wxSplashScreen* splash = nullptr;
        try {
                wxBitmap bitmap;
-               boost::filesystem::path p = shared_path () / "splash.png";
-               if (bitmap.LoadFile (std_to_wx (p.string ()), wxBITMAP_TYPE_PNG)) {
+               if (bitmap.LoadFile(bitmap_path("splash"), wxBITMAP_TYPE_PNG)) {
                        splash = new wxSplashScreen (bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, 0, 0, -1);
                        wxYield ();
                }
@@ -508,17 +512,17 @@ calculate_mark_interval (double mark_interval)
 bool
 display_progress (wxString title, wxString task)
 {
-       JobManager* jm = JobManager::instance ();
+       auto jm = JobManager::instance ();
 
        wxProgressDialog progress (title, task, 100, 0, wxPD_CAN_ABORT);
 
        bool ok = true;
 
        while (jm->work_to_do()) {
-               dcpomatic_sleep (1);
+               dcpomatic_sleep_seconds (1);
                if (!progress.Pulse()) {
                        /* user pressed cancel */
-                       BOOST_FOREACH (shared_ptr<Job> i, jm->get()) {
+                       for (auto i: jm->get()) {
                                i->cancel();
                        }
                        ok = false;
@@ -529,18 +533,73 @@ display_progress (wxString title, wxString task)
        return ok;
 }
 
-bool
-report_errors_from_last_job (wxWindow* parent)
-{
-       JobManager* jm = JobManager::instance ();
 
-       DCPOMATIC_ASSERT (!jm->get().empty());
+int
+get_offsets (vector<Offset>& offsets)
+{
+       offsets.push_back (Offset(_("UTC-11"),  -11,  0));
+       offsets.push_back (Offset(_("UTC-10"),  -10,  0));
+       offsets.push_back (Offset(_("UTC-9"),    -9,  0));
+       offsets.push_back (Offset(_("UTC-8"),    -8,  0));
+       offsets.push_back (Offset(_("UTC-7"),    -7,  0));
+       offsets.push_back (Offset(_("UTC-6"),    -6,  0));
+       offsets.push_back (Offset(_("UTC-5"),    -5,  0));
+       offsets.push_back (Offset(_("UTC-4:30"), -4, 30));
+       offsets.push_back (Offset(_("UTC-4"),    -4,  0));
+       offsets.push_back (Offset(_("UTC-3:30"), -3, 30));
+       offsets.push_back (Offset(_("UTC-3"),    -3,  0));
+       offsets.push_back (Offset(_("UTC-2"),    -2,  0));
+       offsets.push_back (Offset(_("UTC-1"),    -1,  0));
+       int utc = offsets.size();
+       offsets.push_back (Offset(_("UTC")  ,     0,  0));
+       offsets.push_back (Offset(_("UTC+1"),     1,  0));
+       offsets.push_back (Offset(_("UTC+2"),     2,  0));
+       offsets.push_back (Offset(_("UTC+3"),     3,  0));
+       offsets.push_back (Offset(_("UTC+4"),     4,  0));
+       offsets.push_back (Offset(_("UTC+5"),     5,  0));
+       offsets.push_back (Offset(_("UTC+5:30"),  5, 30));
+       offsets.push_back (Offset(_("UTC+6"),     6,  0));
+       offsets.push_back (Offset(_("UTC+7"),     7,  0));
+       offsets.push_back (Offset(_("UTC+8"),     8,  0));
+       offsets.push_back (Offset(_("UTC+9"),     9,  0));
+       offsets.push_back (Offset(_("UTC+9:30"),  9, 30));
+       offsets.push_back (Offset(_("UTC+10"),   10,  0));
+       offsets.push_back (Offset(_("UTC+11"),   11,  0));
+       offsets.push_back (Offset(_("UTC+12"),   12,  0));
+
+       return utc;
+}
+
+
+wxString
+bitmap_path (string name)
+{
+       boost::filesystem::path base;
 
-       shared_ptr<Job> 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;
+#ifdef DCPOMATIC_DEBUG
+       /* Hack to allow Linux and OS X to find icons when running from the source tree */
+       char* path = getenv ("DCPOMATIC_GRAPHICS");
+       if (path) {
+               base = path;
+       } else {
+               base = resources_path();
        }
+#else
+       base = resources_path();
+#endif
 
-       return true;
+       boost::filesystem::path p = base / String::compose("%1.png", name);
+       return std_to_wx (p.string());
 }
+
+
+wxSize
+small_button_size (wxWindow* parent, wxString text)
+{
+       wxClientDC dc (parent);
+       auto size = dc.GetTextExtent (text);
+       size.SetHeight (-1);
+       size.IncBy (24, 0);
+       return size;
+}
+