Add magic lines to put the DVD-o-matic window at the front on OS X so that it gets...
[dcpomatic.git] / src / tools / dvdomatic.cc
index 80a33efefd9400116b91be16d2e189158bb3e160..e6d4471db9e99a80ef61924f80cdc7774a486af0 100644 (file)
 */
 
 #include <iostream>
+#include <fstream>
 #include <boost/filesystem.hpp>
 #ifdef __WXMSW__
 #include <shellapi.h>
 #endif
+#ifdef __WXOSX__
+#include <ApplicationServices/ApplicationServices.h>
+#endif
 #include <wx/aboutdlg.h>
 #include <wx/stdpaths.h>
 #include <wx/cmdline.h>
@@ -52,6 +56,7 @@ using std::stringstream;
 using std::map;
 using std::make_pair;
 using std::exception;
+using std::ofstream;
 using boost::shared_ptr;
 
 static FilmEditor* film_editor = 0;
@@ -60,7 +65,6 @@ static shared_ptr<Film> film;
 static std::string log_level;
 static std::string film_to_load;
 static wxMenu* jobs_menu = 0;
-static wxLocale* locale = 0;
 
 static void set_menu_sensitivity ();
 
@@ -71,7 +75,7 @@ public:
        {
                _dialog = new wxMessageDialog (
                        0,
-                       std_to_wx (String::compose (wx_to_std (_("Save changes to film \"%1\" before closing?")), film->name())),
+                       wxString::Format (_("Save changes to film \"%s\" before closing?"), std_to_wx (film->name ()).data()),
                        _("Film changed"),
                        wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION
                        );
@@ -223,7 +227,7 @@ public:
 
                film_editor = new FilmEditor (film, panel);
                film_viewer = new FilmViewer (film, panel);
-               JobManagerView* job_manager_view = new JobManagerView (panel);
+               JobManagerView* job_manager_view = new JobManagerView (panel, static_cast<JobManagerView::Buttons> (0));
 
                _top_sizer = new wxBoxSizer (wxHORIZONTAL);
                _top_sizer->Add (film_editor, 0, wxALL, 6);
@@ -299,9 +303,17 @@ private:
                
                if (r == wxID_OK) {
 
-                       if (boost::filesystem::exists (d->get_path())) {
-                               error_dialog (this, std_to_wx (String::compose (wx_to_std (_("The directory %1 already exists.")), d->get_path().c_str())));
-                               return;
+                       if (boost::filesystem::exists (d->get_path()) && !boost::filesystem::is_empty(d->get_path())) {
+                               if (!confirm_dialog (
+                                           this,
+                                           std_to_wx (
+                                                   String::compose (wx_to_std (_("The directory %1 already exists and is not empty.  "
+                                                                                 "Are you sure you want to use it?")),
+                                                                    d->get_path().c_str())
+                                                   )
+                                           )) {
+                                       return;
+                               }
                        }
                        
                        maybe_save_then_delete_film ();
@@ -453,40 +465,6 @@ static const wxCmdLineEntryDesc command_line_description[] = {
 };
 #endif
 
-void
-setup_i18n ()
-{
-       int language = wxLANGUAGE_DEFAULT;
-
-       if (Config::instance()->language()) {
-               wxLanguageInfo const * li = wxLocale::FindLanguageInfo (std_to_wx (Config::instance()->language().get()));
-               if (li) {
-                       language = li->Language;
-               }
-       }
-       if (wxLocale::IsAvailable (language)) {
-               locale = new wxLocale (language, wxLOCALE_LOAD_DEFAULT);
-
-#ifdef DVDOMATIC_WINDOWS
-               locale->AddCatalogLookupPathPrefix (std_to_wx (mo_path().string()));
-#endif         
-
-               locale->AddCatalog (wxT ("libdvdomatic-wx"));
-               locale->AddCatalog (wxT ("dvdomatic"));
-               
-               if (!locale->IsOk()) {
-                       delete locale;
-                       locale = new wxLocale (wxLANGUAGE_ENGLISH);
-                       language = wxLANGUAGE_ENGLISH;
-               }
-       }
-
-       if (locale) {
-               dvdomatic_setup_i18n (wx_to_std (locale->GetCanonicalName ()));
-       }
-}
-
 class App : public wxApp
 {
        bool OnInit ()
@@ -497,6 +475,12 @@ class App : public wxApp
                
 #ifdef DVDOMATIC_POSIX         
                unsetenv ("UBUNTU_MENUPROXY");
+#endif
+
+#ifdef __WXOSX__               
+               ProcessSerialNumber serial;
+               GetCurrentProcess (&serial);
+               TransformProcessType (&serial, kProcessTransformToForegroundApplication);
 #endif         
 
                wxInitAllImageHandlers ();
@@ -507,7 +491,7 @@ class App : public wxApp
                   hasn't yet been called and there aren't any scalers, filters etc.
                   set up yet.
                */
-               setup_i18n ();
+               dvdomatic_setup_i18n ();
 
                /* Set things up, including scalers / filters etc.
                   which will now be internationalised correctly.