Fix crash when setting loop or punch range after creating a new session (and probably...
[ardour.git] / gtk2_ardour / rc_option_editor.cc
index e35ec0026d7cd19fbbaeaf5e5c8f8b9d4d2af3f1..f9432bf88b8d45d2001221aa88ab9cfa090dc8ae 100644 (file)
@@ -12,6 +12,7 @@
 #include "control_protocol/control_protocol.h"
 
 #include "gui_thread.h"
+#include "midi_tracer.h"
 #include "rc_option_editor.h"
 #include "utils.h"
 #include "midi_port_dialog.h"
@@ -65,6 +66,10 @@ public:
 
 private:
 
+        typedef std::map<MIDI::Port*,MidiTracer*> PortTraceMap;
+        PortTraceMap port_input_trace_map;
+        PortTraceMap port_output_trace_map;
+
        void model_changed (TreeModel::Path const &, TreeModel::iterator const & i)
        {
                TreeModel::Row r = *i;
@@ -81,14 +86,32 @@ private:
                        }
 
                        if (r[_model.trace_input] != port->input()->tracing()) {
-                               port->input()->trace (r[_model.trace_input], &cerr, string (port->name()) + _(" input: "));
+                               PortTraceMap::iterator x = port_input_trace_map.find (port);
+                               MidiTracer* mt;
+
+                               if (x == port_input_trace_map.end()) {
+                                        mt = new MidiTracer (port->name() + string (" [input]"), *port->input());
+                                        port_input_trace_map.insert (pair<MIDI::Port*,MidiTracer*> (port, mt));
+                               } else {
+                                       mt = x->second;
+                               }
+                               mt->present ();
                        }
                }
 
                if (port->output()) {
 
                        if (r[_model.trace_output] != port->output()->tracing()) {
-                               port->output()->trace (r[_model.trace_output], &cerr, string (port->name()) + _(" output: "));
+                               PortTraceMap::iterator x = port_output_trace_map.find (port);
+                               MidiTracer* mt;
+
+                               if (x == port_output_trace_map.end()) {
+                                       mt = new MidiTracer (port->name() + string (" [output]"), *port->output());
+                                       port_output_trace_map.insert (pair<MIDI::Port*,MidiTracer*> (port, mt));
+                               } else {
+                                       mt = x->second;
+                               }
+                               mt->present ();
                        }
 
                }
@@ -778,7 +801,8 @@ public:
 
                _box->pack_start (_view, false, false);
 
-               Label* label = manage (new Label (_("Double-click on a name to edit settings for an enabled protocol")));
+               Label* label = manage (new Label);
+               label->set_markup (string_compose (X_("<i>%1</i>"), _("Double-click on a name to edit settings for an enabled protocol")));
 
                _box->pack_start (*label, false, false);
                label->show ();
@@ -1343,6 +1367,14 @@ RCOptionEditor::RCOptionEditor ()
                add_option (_("MIDI control"), *i);
        }
 
+       add_option (_("MIDI control"),
+                   new BoolOption (
+                           "send-mtc",
+                           _("Send MIDI Time Code"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mtc),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mtc)
+                           ));
+
        add_option (_("MIDI control"),
                    new BoolOption (
                            "mmc-control",