Merge master.
[dcpomatic.git] / src / wx / wx_util.cc
index 64418dac04aa9f3fdd65de8cabcfde4a0fd8c6dd..048f87908e8c72770e973f0450a36767c1b747f3 100644 (file)
@@ -24,9 +24,9 @@
 #include <boost/thread.hpp>
 #include <wx/filepicker.h>
 #include <wx/spinctrl.h>
+#include "lib/config.h"
+#include "lib/util.h"
 #include "wx_util.h"
-#include "config.h"
-#include "util.h"
 
 using namespace std;
 using namespace boost;
@@ -105,7 +105,7 @@ confirm_dialog (wxWindow* parent, wxString m)
 string
 wx_to_std (wxString s)
 {
-       return string (s.mb_str ());
+       return string (s.ToUTF8 ());
 }
 
 /** @param s STL string.
@@ -123,10 +123,10 @@ int const ThreadedStaticText::_update_event_id = 10000;
  *  @param initial Initial text for the wxStaticText while the computation is being run.
  *  @param fn Function which works out what the wxStaticText content should be and returns it.
  */
-ThreadedStaticText::ThreadedStaticText (wxWindow* parent, wxString initial, function<string ()> fn)
+ThreadedStaticText::ThreadedStaticText (wxWindow* parent, wxString initial, boost::function<string ()> fn)
        : wxStaticText (parent, wxID_ANY, initial)
 {
-       Connect (_update_event_id, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ThreadedStaticText::thread_finished), 0, this);
+       Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&ThreadedStaticText::thread_finished, this, _1), _update_event_id);
        _thread = new thread (bind (&ThreadedStaticText::run, this, fn));
 }
 
@@ -139,18 +139,26 @@ ThreadedStaticText::~ThreadedStaticText ()
 
 /** Run our thread and post the result to the GUI thread via AddPendingEvent */
 void
-ThreadedStaticText::run (function<string ()> fn)
+ThreadedStaticText::run (boost::function<string ()> fn)
+try
 {
        wxCommandEvent ev (wxEVT_COMMAND_TEXT_UPDATED, _update_event_id);
        ev.SetString (std_to_wx (fn ()));
        GetEventHandler()->AddPendingEvent (ev);
 }
+catch (...)
+{
+       /* Ignore exceptions; marginally better than the program quitting, but
+          only marginally.
+       */
+}
 
 /** Called in the GUI thread when our worker thread has finished */
 void
 ThreadedStaticText::thread_finished (wxCommandEvent& ev)
 {
        SetLabel (ev.GetString ());
+       Finished ();
 }
 
 string
@@ -259,6 +267,10 @@ dcpomatic_setup_i18n ()
                locale->AddCatalogLookupPathPrefix (std_to_wx (mo_path().string()));
 #endif         
 
+#ifdef DCPOMATIC_POSIX
+               locale->AddCatalogLookupPathPrefix (POSIX_LOCALE_PREFIX);
+#endif
+
                locale->AddCatalog (wxT ("libdcpomatic-wx"));
                locale->AddCatalog (wxT ("dcpomatic"));
                
@@ -272,3 +284,23 @@ dcpomatic_setup_i18n ()
                dcpomatic_setup_gettext_i18n (wx_to_std (locale->GetCanonicalName ()));
        }
 }
+
+int
+wx_get (wxSpinCtrl* w)
+{
+       return w->GetValue ();
+}
+
+int
+wx_get (wxChoice* w)
+{
+       return w->GetSelection ();
+}
+
+void
+run_gui_loop ()
+{
+       while (wxTheApp->Pending ()) {
+               wxTheApp->Dispatch ();
+       }
+}