various i18n fixes and updates after a ./waf i18n run
[ardour.git] / libs / ardour / route.cc
index 8546c3ce76b9a18ecff7f8f28fbf45f63c64ad27..8d59a80580ca04a4b65d93e149c6346774c78d51 100644 (file)
@@ -202,12 +202,13 @@ Route::set_remote_control_id (uint32_t id, bool notify_class_listeners)
        if (Config->get_remote_model() != UserOrdered) {
                return;
        }
-       
-       if (id < 1) {
-               error << _("Remote Control ID's start at one, not zero") << endmsg;
-               return;
-       }
 
+       set_remote_control_id_internal (id, notify_class_listeners);
+}
+
+void
+Route::set_remote_control_id_internal (uint32_t id, bool notify_class_listeners)
+{
        /* force IDs for master/monitor busses and prevent 
           any other route from accidentally getting these IDs
           (i.e. legacy sessions)
@@ -221,6 +222,10 @@ Route::set_remote_control_id (uint32_t id, bool notify_class_listeners)
                id = MonitorBusRemoteControlID;
        }
 
+       if (id < 1) {
+               return;
+       }
+
        /* don't allow it to collide */
 
        if (!is_master () && !is_monitor() && 
@@ -661,6 +666,7 @@ void
 Route::set_solo (bool yn, void *src)
 {
        if (_solo_safe) {
+               DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 ignore solo change due to solo-safe\n", name()));
                return;
        }
 
@@ -669,6 +675,9 @@ Route::set_solo (bool yn, void *src)
                return;
        }
 
+       DEBUG_TRACE (DEBUG::Solo, string_compose ("%1: set solo => %2, src: %3 grp ? %4 currently self-soloed ? %5\n", 
+                                                 name(), yn, src, (src == _route_group), self_soloed()));
+
        if (self_soloed() != yn) {
                set_self_solo (yn);
                set_mute_master_solo ();
@@ -680,6 +689,7 @@ Route::set_solo (bool yn, void *src)
 void
 Route::set_self_solo (bool yn)
 {
+       DEBUG_TRACE (DEBUG::Solo, string_compose ("%1: set SELF solo => %2\n", name(), yn));
        _self_solo = yn;
 }
 
@@ -687,9 +697,13 @@ void
 Route::mod_solo_by_others_upstream (int32_t delta)
 {
        if (_solo_safe) {
+               DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 ignore solo-by-upstream due to solo-safe\n", name()));
                return;
        }
 
+       DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 mod solo-by-upstream by %2, current up = %3 down = %4\n", 
+                                                 name(), delta, _soloed_by_others_upstream, _soloed_by_others_downstream));
+
        uint32_t old_sbu = _soloed_by_others_upstream;
 
        if (delta < 0) {
@@ -743,9 +757,13 @@ void
 Route::mod_solo_by_others_downstream (int32_t delta)
 {
        if (_solo_safe) {
+               DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 ignore solo-by-downstream due to solo safe\n", name()));
                return;
        }
 
+       DEBUG_TRACE (DEBUG::Solo, string_compose ("%1 mod solo-by-downstream by %2, current up = %3 down = %4\n", 
+                                                 name(), delta, _soloed_by_others_upstream, _soloed_by_others_downstream));
+
        if (delta < 0) {
                if (_soloed_by_others_downstream >= (uint32_t) abs (delta)) {
                        _soloed_by_others_downstream += delta;
@@ -2166,7 +2184,7 @@ Route::set_state (const XMLNode& node, int version)
                        if ((prop = child->property (X_("id"))) != 0) {
                                int32_t x;
                                sscanf (prop->value().c_str(), "%d", &x);
-                               set_remote_control_id (x);
+                               set_remote_control_id_internal (x);
                        }
 
                } else if (child->name() == X_("MuteMaster")) {
@@ -2204,6 +2222,10 @@ Route::set_state_2X (const XMLNode& node, int version)
                _flags = Flag (0);
        }
 
+       if (is_master() || is_monitor() || is_hidden()) {
+               _mute_master->set_solo_ignore (true);
+       }
+
        if ((prop = node.property (X_("phase-invert"))) != 0) {
                boost::dynamic_bitset<> p (_input->n_ports().n_audio ());
                if (string_is_affirmative (prop->value ())) {
@@ -2427,7 +2449,7 @@ Route::set_state_2X (const XMLNode& node, int version)
                        if ((prop = child->property (X_("id"))) != 0) {
                                int32_t x;
                                sscanf (prop->value().c_str(), "%d", &x);
-                               set_remote_control_id (x);
+                               set_remote_control_id_internal (x);
                        }
 
                }
@@ -3050,8 +3072,6 @@ Route::flush_processors ()
 void
 Route::set_meter_point (MeterPoint p, bool force)
 {
-       /* CAN BE CALLED FROM PROCESS CONTEXT */
-
        if (_meter_point == p && !force) {
                return;
        }
@@ -4094,6 +4114,12 @@ boost::shared_ptr<Processor>
 Route::the_instrument () const
 {
        Glib::Threads::RWLock::WriterLock lm (_processor_lock);
+       return the_instrument_unlocked ();
+}
+
+boost::shared_ptr<Processor>
+Route::the_instrument_unlocked () const
+{
        for (ProcessorList::const_iterator i = _processors.begin(); i != _processors.end(); ++i) {
                if (boost::dynamic_pointer_cast<PluginInsert>(*i)) {
                        if ((*i)->input_streams().n_midi() > 0 &&
@@ -4105,6 +4131,8 @@ Route::the_instrument () const
        return boost::shared_ptr<Processor>();
 }
 
+
+
 void
 Route::non_realtime_locate (framepos_t pos)
 {