OSC: allow setting of marker name
[ardour.git] / libs / surfaces / osc / osc.cc
index 784946f9d6b5abb120d9a94598ecbcb57dd28ee8..14cdf04bd8416392a64129e0c1f714a699bb01d0 100644 (file)
@@ -569,6 +569,7 @@ OSC::register_callbacks()
                REGISTER_CALLBACK (serv, X_("/select/recenable"), "i", sel_recenable);
                REGISTER_CALLBACK (serv, X_("/select/record_safe"), "i", sel_recsafe);
                REGISTER_CALLBACK (serv, X_("/select/name"), "s", sel_rename);
+               REGISTER_CALLBACK (serv, X_("/select/comment"), "s", sel_comment);
                REGISTER_CALLBACK (serv, X_("/select/group"), "s", sel_group);
                REGISTER_CALLBACK (serv, X_("/select/mute"), "i", sel_mute);
                REGISTER_CALLBACK (serv, X_("/select/solo"), "i", sel_solo);
@@ -2931,13 +2932,24 @@ OSC::set_marker (const char* types, lo_arg **argv, int argc, lo_message msg)
 
        switch (types[0]) {
                case 's':
-                       for (Locations::LocationList::const_iterator l = ll.begin(); l != ll.end(); ++l) {
-                               if ((*l)->is_mark ()) {
-                                       if (strcmp (&argv[0]->s, (*l)->name().c_str()) == 0) {
-                                               session->request_locate ((*l)->start (), false);
-                                               return 0;
+                       {
+                               Location *cur_mark = 0;
+                               for (Locations::LocationList::const_iterator l = ll.begin(); l != ll.end(); ++l) {
+                                       if ((*l)->is_mark ()) {
+                                               if (strcmp (&argv[0]->s, (*l)->name().c_str()) == 0) {
+                                                       session->request_locate ((*l)->start (), false);
+                                                       return 0;
+                                               } else if ((*l)->start () == session->transport_sample()) {
+                                                       cur_mark = (*l);
+                                               }
                                        }
                                }
+                               if (cur_mark) {
+                                       cur_mark->set_name (&argv[0]->s);
+                                       return 0;
+                               }
+                               PBD::warning << string_compose ("Marker: \"%1\" - does not exist", &argv[0]->s) << endmsg;
+                               return -1;
                        }
                        break;
                case 'i':
@@ -2978,7 +2990,6 @@ OSC::group_list (lo_message msg)
 int
 OSC::send_group_list (lo_address addr)
 {
-               //std::list<RouteGroup*> const & route_groups () const {
        lo_message reply;
        reply = lo_message_new ();
 
@@ -3725,6 +3736,31 @@ OSC::sel_rename (char *newname, lo_message msg) {
        return 0;
 }
 
+int
+OSC::sel_comment (char *newcomment, lo_message msg) {
+       if (!session) {
+               return -1;
+       }
+
+       OSCSurface *sur = get_surface(get_address (msg));
+       boost::shared_ptr<Stripable> s;
+       if (sur->expand_enable) {
+               s = get_strip (sur->expand, get_address (msg));
+       } else {
+               s = _select;
+       }
+       if (s) {
+               boost::shared_ptr<Route> rt = boost::dynamic_pointer_cast<Route> (s);
+               if (!rt) {
+                       PBD::warning << "OSC: can not set comment on VCAs." << endmsg;
+                       return -1;
+               }
+               rt->set_comment (newcomment, this);
+       }
+
+       return 0;
+}
+
 int
 OSC::strip_group (int ssid, char *group, lo_message msg) {
        if (!session) {
@@ -3760,6 +3796,7 @@ OSC::strip_select_group (boost::shared_ptr<Stripable> s, char *group)
        if (s) {
                boost::shared_ptr<Route> rt = boost::dynamic_pointer_cast<Route> (s);
                if (!rt) {
+                       PBD::warning << "OSC: VCAs can not be part of a group." << endmsg;
                        return -1;
                }
                RouteGroup *rg = rt->route_group();
@@ -3785,7 +3822,6 @@ OSC::strip_select_group (boost::shared_ptr<Stripable> s, char *group)
                                        rg->set_name (grp);
                                }
                        } else {
-                               // nothing to change
                                return 0;
                        }
                } else {