enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h
[ardour.git] / libs / ardour / session_midi.cc
index 390f1de32f6dea56900a265c111d5d43c2a45040..fa23880b87bef6504618295f4529d8b72a738ceb 100644 (file)
@@ -48,7 +48,7 @@
 #include "ardour/slave.h"
 #include "ardour/ticker.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -335,6 +335,36 @@ Session::mmc_shuttle (MIDI::MachineControl &/*mmc*/, float speed, bool forw)
        }
 }
 
+boost::shared_ptr<Route>
+Session::get_midi_nth_route_by_id (PresentationInfo::order_t n) const
+{
+       PresentationInfo::Flag f;
+
+       /* These numbers are defined by the MMC specification.
+        */
+
+       if (n == 318) {
+               f = PresentationInfo::MasterOut;
+       } else if (n == 319) {
+               f = PresentationInfo::MonitorOut;
+       } else {
+               f = PresentationInfo::Route;
+       }
+
+       boost::shared_ptr<RouteList> r = routes.reader ();
+       PresentationInfo::order_t match_cnt = 0;
+
+       for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+               if ((*i)->presentation_info().flag_match (f)) {
+                       if (match_cnt++ == n) {
+                               return *i;
+                       }
+               }
+       }
+
+       return boost::shared_ptr<Route>();
+}
+
 void
 Session::mmc_record_enable (MIDI::MachineControl &mmc, size_t trk, bool enabled)
 {
@@ -342,17 +372,13 @@ Session::mmc_record_enable (MIDI::MachineControl &mmc, size_t trk, bool enabled)
                return;
        }
 
-       RouteList::iterator i;
-       boost::shared_ptr<RouteList> r = routes.reader();
+       boost::shared_ptr<Route> r = get_midi_nth_route_by_id (trk);
 
-       for (i = r->begin(); i != r->end(); ++i) {
-               AudioTrack *at;
+       if (r) {
+               boost::shared_ptr<AudioTrack> at;
 
-               if ((at = dynamic_cast<AudioTrack*>((*i).get())) != 0) {
-                       if (trk == at->remote_control_id()) {
-                               at->rec_enable_control()->set_value (enabled, Controllable::UseGroup);
-                               break;
-                       }
+               if ((at = boost::dynamic_pointer_cast<AudioTrack> (r))) {
+                       at->rec_enable_control()->set_value (enabled, Controllable::UseGroup);
                }
        }
 }
@@ -696,4 +722,3 @@ Session::mtc_input_port () const
 {
        return _midi_ports->mtc_input_port ();
 }
-