rationalize (a bit) engine start/stop/restart so that it is possible to start up...
[ardour.git] / libs / ardour / globals.cc
index 2b0bc0553441e2d5fccd3e892dc99ad4d492bad3..fbce3362839c2082d2ba8c894b50916cad8d787f 100644 (file)
@@ -21,6 +21,7 @@
 #endif
 
 #include <cstdio> // Needed so that libraptor (included in lrdf) won't complain
+#include <cstdlib>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/time.h>
 #include "pbd/basename.h"
 
 #include "midi++/port.h"
-#include "midi++/manager.h"
 #include "midi++/mmc.h"
 
 #include "ardour/analyser.h"
 #include "ardour/audio_library.h"
+#include "ardour/audio_backend.h"
 #include "ardour/audioengine.h"
 #include "ardour/audioplaylist.h"
 #include "ardour/audioregion.h"
@@ -78,6 +79,7 @@
 #include "ardour/control_protocol_manager.h"
 #include "ardour/filesystem_paths.h"
 #include "ardour/midi_region.h"
+#include "ardour/midiport_manager.h"
 #include "ardour/mix.h"
 #include "ardour/panner_manager.h"
 #include "ardour/plugin_manager.h"
@@ -215,7 +217,7 @@ lotsa_files_please ()
 }
 
 int
-ARDOUR::init (bool use_windows_vst, bool try_optimization)
+ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir)
 {
        if (!Glib::thread_supported()) {
                Glib::thread_init();
@@ -224,7 +226,9 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization)
        // this really should be in PBD::init..if there was one
        Gio::init ();
 
-       (void) bindtextdomain(PACKAGE, LOCALEDIR);
+#ifdef ENABLE_NLS
+       (void) bindtextdomain(PACKAGE, localedir);
+#endif
 
        PBD::ID::init ();
        SessionEvent::init_event_pool ();
@@ -328,15 +332,14 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization)
        EventTypeMap::instance().new_parameter(EnvelopeAutomation);
        EventTypeMap::instance().new_parameter(MidiCCAutomation);
 
+       ARDOUR::AudioEngine::create ();
+
        return 0;
 }
 
 void
 ARDOUR::init_post_engine ()
 {
-       /* the MIDI Manager is needed by the ControlProtocolManager */
-       MIDI::Manager::create (AudioEngine::instance()->jack());
-
        ControlProtocolManager::instance().discover_control_protocols ();
 
        XMLNode* node;
@@ -463,19 +466,63 @@ ARDOUR::setup_fpu ()
 #endif
 }
 
+/* this can be changed to modify the translation behaviour for
+   cases where the user has never expressed a preference.
+*/
+static const bool translate_by_default = true;
+
 string
-ARDOUR::translation_kill_path ()
+ARDOUR::translation_enable_path ()
+{
+        return Glib::build_filename (user_config_directory(), ".translate");
+}
+
+bool
+ARDOUR::translations_are_enabled ()
 {
-        return Glib::build_filename (user_config_directory(), ".love_is_the_language_of_audio");
+       int fd = ::open (ARDOUR::translation_enable_path().c_str(), O_RDONLY);
+
+       if (fd < 0) {
+               return translate_by_default;
+       }
+
+       char c;
+       bool ret = false;
+
+       if (::read (fd, &c, 1) == 1 && c == '1') {
+               ret = true;
+       }
+
+       ::close (fd);
+
+       return ret;
 }
 
 bool
-ARDOUR::translations_are_disabled ()
+ARDOUR::set_translations_enabled (bool yn)
 {
-        /* if file does not exist, we don't translate (bundled ardour only) */
-        return Glib::file_test (translation_kill_path(), Glib::FILE_TEST_EXISTS) == false;
+       string i18n_enabler = ARDOUR::translation_enable_path();
+       int fd = ::open (i18n_enabler.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0644);
+
+       if (fd < 0) {
+               return false;
+       }
+       
+       char c;
+       
+       if (yn) {
+               c = '1';
+       } else {
+               c = '0';
+       }
+       
+       ::write (fd, &c, 1);
+       ::close (fd);
+
+       return true;
 }
 
+
 vector<SyncSource>
 ARDOUR::get_available_sync_options ()
 {
@@ -484,9 +531,7 @@ ARDOUR::get_available_sync_options ()
        ret.push_back (JACK);
        ret.push_back (MTC);
        ret.push_back (MIDIClock);
-#ifdef HAVE_LTC
        ret.push_back (LTC);
-#endif
 
        return ret;
 }