fix verbose plugin scan
[ardour.git] / gtk2_ardour / ardour_ui.cc
index f3483769d854175c14fbfd5e2d4c05599336b77a..524d16e017c002e8191ba0ec0959a74028b54f28 100644 (file)
@@ -28,6 +28,8 @@
 #include <cerrno>
 #include <fstream>
 
+#include <stdarg.h>
+
 #ifndef PLATFORM_WINDOWS
 #include <sys/resource.h>
 #endif
@@ -55,6 +57,8 @@
 #include "pbd/file_utils.h"
 #include "pbd/localtime_r.h"
 #include "pbd/pthread_utils.h"
+#include "pbd/replace_all.h"
+#include "pbd/xml++.h"
 
 #include "gtkmm2ext/application.h"
 #include "gtkmm2ext/bindings.h"
@@ -181,6 +185,36 @@ ask_about_configuration_copy (string const & old_dir, string const & new_dir, in
        return (msg.run() == Gtk::RESPONSE_YES);
 }
 
+static void
+libxml_generic_error_func (void* /* parsing_context*/,
+                   const char* msg,
+                   ...)
+{
+       va_list ap;
+       char buf[2048];
+
+       va_start (ap, msg);
+       vsnprintf (buf, sizeof (buf), msg, ap);
+       error << buf << endmsg;
+       va_end (ap);
+}
+
+static void
+libxml_structured_error_func (void* /* parsing_context*/,
+                              xmlErrorPtr err)
+{
+       string msg = err->message;
+
+       replace_all (msg, "\n", "");
+
+       error << X_("XML error: ") << msg << " in " << err->file << " at line " << err->line;
+       if (err->int2) {
+               error << ':' << err->int2;
+       }
+       error << endmsg;
+}
+
+
 ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfiguration* uic)
 
        : Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp)
@@ -205,6 +239,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi
        , auto_loop_controllable (new TransportControllable ("transport auto loop", *this, TransportControllable::AutoLoop))
        , play_selection_controllable (new TransportControllable ("transport play selection", *this, TransportControllable::PlaySelection))
        , rec_controllable (new TransportControllable ("transport rec-enable", *this, TransportControllable::RecordEnable))
+       , auto_return_button (ArdourButton::led_default_elements)
        , follow_edits_button (ArdourButton::led_default_elements)
        , auto_input_button (ArdourButton::led_default_elements)
        , auditioning_alert_button (_("Audition"))
@@ -258,6 +293,11 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi
                theArdourUI = this;
        }
 
+       /* stop libxml from spewing to stdout/stderr */
+
+       xmlSetGenericErrorFunc (this, libxml_generic_error_func);
+       xmlSetStructuredErrorFunc (this, libxml_structured_error_func);
+       
        ui_config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
        boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
        ui_config->map_parameters (pc);
@@ -3169,6 +3209,9 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
                msg.set_position (Gtk::WIN_POS_CENTER);
                pop_back_splash (msg);
                msg.present ();
+
+               dump_errors (cerr);
+               
                (void) msg.run ();
                msg.hide ();
 
@@ -4788,16 +4831,16 @@ ARDOUR_UI::transport_numpad_event (int num)
                _pending_locate_num = _pending_locate_num*10 + num;
        } else {
                switch (num) {          
-               case 0:  toggle_roll(false, false);  break;
-               case 1:  transport_rewind(1);        break;
-               case 2:  transport_forward(1);       break;
-               case 3:  transport_record(true);     break;
-               case 4:  toggle_session_auto_loop(); break;
-               case 5:  transport_record(false); toggle_session_auto_loop();   break;
-               case 6:  toggle_punch();                                        break;
-               case 7:  toggle_click();             break;
-               case 8:  toggle_all_auto_return ();  break;
-               case 9:  toggle_follow_edits();      break;
+                       case 0:  toggle_roll(false, false);             break;
+                       case 1:  transport_rewind(1);                           break;
+                       case 2:  transport_forward(1);                          break;
+                       case 3:  transport_record(true);                        break;
+                       case 4:  toggle_session_auto_loop();            break;
+                       case 5:  transport_record(false); toggle_session_auto_loop();   break;
+                       case 6:  toggle_punch();                                        break;
+                       case 7:  toggle_click();                                break;
+                       case 8:  toggle_auto_return();                  break;
+                       case 9:  toggle_follow_edits();         break;
                }
        }
 }
@@ -4870,29 +4913,3 @@ ARDOUR_UI::hide_application ()
 {
     Application::instance ()-> hide ();
 }
-
-void
-ARDOUR_UI::toggle_auto_return_state (AutoReturnTarget t)
-{
-       AutoReturnTarget art = Config->get_auto_return_target_list ();
-       if (art & t) {
-               Config->set_auto_return_target_list (AutoReturnTarget (art & ~t));
-       } else {
-               Config->set_auto_return_target_list (AutoReturnTarget (art | t));
-       }
-}
-
-void
-ARDOUR_UI::toggle_all_auto_return ()
-{
-       AutoReturnTarget art = Config->get_auto_return_target_list ();
-       if (art) {
-               Config->set_auto_return_target_list (AutoReturnTarget (0));
-       } else {
-               Config->set_auto_return_target_list (AutoReturnTarget (LastLocate|
-                                                                      RangeSelectionStart|
-                                                                      RegionSelectionStart|
-                                                                      Loop));
-       }
-}
-