Batch converter stub.
authorCarl Hetherington <cth@carlh.net>
Sat, 4 May 2013 17:47:33 +0000 (18:47 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 4 May 2013 17:47:33 +0000 (18:47 +0100)
run/dvdomatic_batch [new file with mode: 0755]
src/lib/util.cc
src/lib/util.h
src/tools/dvdomatic.cc
src/tools/dvdomatic_batch.cc [new file with mode: 0644]
src/tools/wscript
src/wx/batch_view.cc [new file with mode: 0644]
src/wx/batch_view.h [new file with mode: 0644]
src/wx/wscript
src/wx/wx_util.cc
src/wx/wx_util.h

diff --git a/run/dvdomatic_batch b/run/dvdomatic_batch
new file mode 100755 (executable)
index 0000000..7b6ef93
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+export LD_LIBRARY_PATH=build/src/lib:build/src/wx:build/src/asdcplib/src:$LD_LIBRARY_PATH
+if [ "$1" == "--debug" ]; then
+    shift
+    gdb --args build/src/tools/dvdomatic_batch "$*"
+elif [ "$1" == "--valgrind" ]; then
+    shift
+    valgrind --tool="memcheck" build/src/tools/dvdomatic_batch $*
+elif [ "$1" == "--i18n" ]; then
+    shift
+    LANGUAGE=fr_FR.UTF8 LANG=fr_FR.UTF8 build/src/tools/dvdomatic_batch "$*"
+else
+    build/src/tools/dvdomatic_batch
+fi
index 859aa6de7ddda8efa646ee695247023d40169a7a..be078a95f298e6cd286efaf76dd4ee2dc1bf05c0 100644 (file)
@@ -274,7 +274,7 @@ mo_path ()
 #endif
 
 void
-dvdomatic_setup_i18n (string lang)
+dvdomatic_setup_gettext_i18n (string lang)
 {
 #ifdef DVDOMATIC_POSIX
        lang += ".UTF8";
index 99670110edec6d4d47eaf6c4709c60d3be3e5f8c..d0c350a563598657a0e95462455a2e30ad1674b8 100644 (file)
@@ -55,7 +55,7 @@ extern void stacktrace (std::ostream &, int);
 extern std::string dependency_version_summary ();
 extern double seconds (struct timeval);
 extern void dvdomatic_setup ();
-extern void dvdomatic_setup_i18n (std::string);
+extern void dvdomatic_setup_gettext_i18n (std::string);
 extern std::vector<std::string> split_at_spaces_considering_quotes (std::string);
 extern std::string md5_digest (std::string);
 extern std::string md5_digest (void const *, int);
index b161ac7e33735fe07f6eb6d568c553cf0fd2b08a..2740a09655c6254c684878f42b86bc939d9af192 100644 (file)
@@ -62,7 +62,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 ();
 
@@ -463,49 +462,6 @@ static const wxCmdLineEntryDesc command_line_description[] = {
 };
 #endif
 
-void
-setup_i18n ()
-{
-       int language = wxLANGUAGE_DEFAULT;
-
-       ofstream f ("c:/users/carl hetherington/foo", std::ios::app);
-       f << "Hello.\n";
-
-       boost::optional<string> config_lang = Config::instance()->language ();
-       if (config_lang && !config_lang->empty ()) {
-               f << "Configured language " << config_lang.get() << "\n";
-               wxLanguageInfo const * li = wxLocale::FindLanguageInfo (std_to_wx (config_lang.get ()));
-               f << "LanguageInfo " << li << "\n";
-               if (li) {
-                       language = li->Language;
-                       f << "language=" << language << " cf " << wxLANGUAGE_DEFAULT << " " << wxLANGUAGE_ENGLISH << "\n";
-               }
-       }
-       if (wxLocale::IsAvailable (language)) {
-               f << "Language is available.\n";
-               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()) {
-                       f << "Locale is not ok.\n";
-                       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 ()
@@ -526,7 +482,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.
diff --git a/src/tools/dvdomatic_batch.cc b/src/tools/dvdomatic_batch.cc
new file mode 100644 (file)
index 0000000..102f294
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <wx/aboutdlg.h>
+#include <wx/wx.h>
+#include "lib/version.h"
+#include "lib/compose.hpp"
+#include "lib/config.h"
+#include "lib/util.h"
+#include "wx/wx_util.h"
+#include "wx/wx_ui_signaller.h"
+#include "wx/batch_view.h"
+
+enum {
+       ID_file_quit = 1,
+       ID_help_about
+};
+
+void
+setup_menu (wxMenuBar* m)
+{
+       wxMenu* file = new wxMenu;
+       file->Append (ID_file_quit, _("&Quit"));
+
+       wxMenu* help = new wxMenu;
+       help->Append (ID_help_about, _("About"));
+
+       m->Append (file, _("&File"));
+       m->Append (help, _("&Help"));
+}
+
+class Frame : public wxFrame
+{
+public:
+       Frame (wxString const & title)
+               : wxFrame (NULL, -1, title)
+       {
+               wxMenuBar* bar = new wxMenuBar;
+               setup_menu (bar);
+               SetMenuBar (bar);
+
+               Connect (ID_file_quit, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_quit));
+               Connect (ID_help_about, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::help_about));
+
+               wxPanel* panel = new wxPanel (this);
+               wxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+               s->Add (panel, 1, wxEXPAND);
+               SetSizer (s);
+
+               wxSizer* sizer = new wxBoxSizer (wxVERTICAL);
+
+               BatchView* batch_view = new BatchView (panel);
+               sizer->Add (batch_view, 1, wxALL | wxEXPAND, 6);
+
+               wxSizer* buttons = new wxBoxSizer (wxHORIZONTAL);
+               wxButton* add = new wxButton (panel, wxID_ANY, _("Add Film..."));
+               buttons->Add (add, 1, wxALL, 6);
+               wxButton* start = new wxButton (panel, wxID_ANY, _("Start..."));
+               buttons->Add (start, 1, wxALL, 6);
+
+               sizer->Add (buttons, 0, wxALL, 6);
+
+               panel->SetSizer (sizer);
+       }
+
+private:
+       void file_quit (wxCommandEvent &)
+       {
+               Close (true);
+       }
+
+       void help_about (wxCommandEvent &)
+       {
+               wxAboutDialogInfo info;
+               info.SetName (_("DVD-o-matic Batch Converter"));
+               if (strcmp (dvdomatic_git_commit, "release") == 0) {
+                       info.SetVersion (std_to_wx (String::compose ("version %1", dvdomatic_version)));
+               } else {
+                       info.SetVersion (std_to_wx (String::compose ("version %1 git %2", dvdomatic_version, dvdomatic_git_commit)));
+               }
+               info.SetDescription (_("Free, open-source DCP generation from almost anything."));
+               info.SetCopyright (_("(C) 2012-2013 Carl Hetherington, Terrence Meiczinger, Paul Davis, Ole Laursen"));
+
+               wxArrayString authors;
+               authors.Add (wxT ("Carl Hetherington"));
+               authors.Add (wxT ("Terrence Meiczinger"));
+               authors.Add (wxT ("Paul Davis"));
+               authors.Add (wxT ("Ole Laursen"));
+               info.SetDevelopers (authors);
+
+               wxArrayString translators;
+               translators.Add (wxT ("Olivier Perriere"));
+               translators.Add (wxT ("Lilian Lefranc"));
+               translators.Add (wxT ("Thierry Journet"));
+               translators.Add (wxT ("Massimiliano Broggi"));
+               translators.Add (wxT ("Manuel AC"));
+               translators.Add (wxT ("Adam Klotblixt"));
+               info.SetTranslators (translators);
+               
+               info.SetWebSite (wxT ("http://carlh.net/software/dvdomatic"));
+               wxAboutBox (info);
+       }
+};
+
+class App : public wxApp
+{
+       bool OnInit ()
+       {
+               if (!wxApp::OnInit()) {
+                       return false;
+               }
+               
+#ifdef DVDOMATIC_POSIX         
+               unsetenv ("UBUNTU_MENUPROXY");
+#endif         
+
+               /* Enable i18n; this will create a Config object
+                  to look for a force-configured language.  This Config
+                  object will be wrong, however, because dvdomatic_setup
+                  hasn't yet been called and there aren't any scalers, filters etc.
+                  set up yet.
+               */
+               dvdomatic_setup_i18n ();
+
+               /* Set things up, including scalers / filters etc.
+                  which will now be internationalised correctly.
+               */
+               dvdomatic_setup ();
+
+               /* Force the configuration to be re-loaded correctly next
+                  time it is needed.
+               */
+               Config::drop ();
+
+               Frame* f = new Frame (_("DVD-o-matic Batch Converter"));
+               SetTopWindow (f);
+               f->Maximize ();
+               f->Show ();
+
+               ui_signaller = new wxUISignaller (this);
+               this->Connect (-1, wxEVT_IDLE, wxIdleEventHandler (App::idle));
+
+               return true;
+       }
+
+       void idle (wxIdleEvent &)
+       {
+               ui_signaller->ui_idle ();
+       }
+};
+
+IMPLEMENT_APP (App)
index 9f0f5215246dd98f5374a3ed0145835067f2a5d2..f36f0abefcb393f41df43b98fcc44fe769b8fd74 100644 (file)
@@ -13,7 +13,7 @@ def build(bld):
         obj.target = t
 
     if not bld.env.DISABLE_GUI:
-        for t in ['dvdomatic', 'servomatic_gui']:
+        for t in ['dvdomatic', 'dvdomatic_batch', 'servomatic_gui']:
             obj = bld(features = 'cxx cxxprogram')
             obj.uselib = 'DCP OPENJPEG AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE POSTPROC'
             obj.includes = ['..']
diff --git a/src/wx/batch_view.cc b/src/wx/batch_view.cc
new file mode 100644 (file)
index 0000000..bfe30d8
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "batch_view.h"
+
+BatchView::BatchView (wxWindow* parent)
+       : wxScrolledWindow (parent)
+{
+       _panel = new wxPanel (this);
+       wxSizer* sizer = new wxBoxSizer (wxVERTICAL);
+       sizer->Add (_panel, 1, wxEXPAND);
+       SetSizer (sizer);
+       
+       _table = new wxFlexGridSizer (5, 6, 6);
+       _table->AddGrowableCol (1, 1);
+       _panel->SetSizer (_table);
+}
diff --git a/src/wx/batch_view.h b/src/wx/batch_view.h
new file mode 100644 (file)
index 0000000..6316ac7
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <wx/wx.h>
+
+class BatchView : public wxScrolledWindow
+{
+public:
+       BatchView (wxWindow *);
+
+private:       
+       wxPanel* _panel;
+       wxFlexGridSizer* _table;
+};
index 42bb8ca8865ee679440fb0bb1395609ea0a90bf3..f1c3d1a6a47ce09eda0955a36c0c881a7007659f 100644 (file)
@@ -6,6 +6,7 @@ import i18n
 sources = """
           audio_dialog.cc
           audio_plot.cc
+          batch_view.cc
           config_dialog.cc
           dci_metadata_dialog.cc
           dir_picker_ctrl.cc
index 77f5da29356ce89f4791d9d16fb28c9da9169b91..1a7b73faffe42e54cd064ed58d3776fcc7f734a3 100644 (file)
@@ -25,6 +25,8 @@
 #include <wx/filepicker.h>
 #include <wx/spinctrl.h>
 #include "wx_util.h"
+#include "config.h"
+#include "util.h"
 
 using namespace std;
 using namespace boost;
@@ -211,3 +213,39 @@ checked_set (wxRadioButton* widget, bool value)
                widget->SetValue (value);
        }
 }
+
+void
+dvdomatic_setup_i18n ()
+{
+       int language = wxLANGUAGE_DEFAULT;
+
+       boost::optional<string> config_lang = Config::instance()->language ();
+       if (config_lang && !config_lang->empty ()) {
+               wxLanguageInfo const * li = wxLocale::FindLanguageInfo (std_to_wx (config_lang.get ()));
+               if (li) {
+                       language = li->Language;
+               }
+       }
+
+       wxLocale* locale = 0;
+       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_gettext_i18n (wx_to_std (locale->GetCanonicalName ()));
+       }
+}
index b3ab706df0687eb1810776a8d7d9144ced69e97b..00a625e1c90c5e0dd733cd32b9bbd3683dff9eea 100644 (file)
@@ -36,6 +36,7 @@ extern wxStaticText* add_label_to_sizer (wxSizer *, wxWindow *, wxString, int pr
 extern wxStaticText* add_label_to_grid_bag_sizer (wxGridBagSizer *, wxWindow *, wxString, wxGBPosition, wxGBSpan span = wxDefaultSpan);
 extern std::string wx_to_std (wxString);
 extern wxString std_to_wx (std::string);
+extern void dvdomatic_setup_i18n ();
 
 /** @class ThreadedStaticText
  *