diff options
author | Len Ovens <len@ovenwerks.net> | 2018-02-20 15:48:54 -0800 |
---|---|---|
committer | Len Ovens <len@ovenwerks.net> | 2018-02-20 15:49:37 -0800 |
commit | d4ae858bf6ca9340444b802b53596ef2b8a2298c (patch) | |
tree | f4a81ab2d72bae497ea40d751600987328424b45 /libs | |
parent | 47970b0cd13e4a77058eb53116a6486ba4fd920e (diff) |
OSC: Add session name change
Diffstat (limited to 'libs')
-rw-r--r-- | libs/surfaces/osc/osc.cc | 29 | ||||
-rw-r--r-- | libs/surfaces/osc/osc.h | 2 |
2 files changed, 31 insertions, 0 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 14cdf04bd8..3aff9c3c9f 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -504,6 +504,7 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, X_("/quick_snapshot_switch"), "f", quick_snapshot_switch); REGISTER_CALLBACK (serv, X_("/quick_snapshot_stay"), "", quick_snapshot_stay); REGISTER_CALLBACK (serv, X_("/quick_snapshot_stay"), "f", quick_snapshot_stay); + REGISTER_CALLBACK (serv, X_("/session_name"), "s", name_session); REGISTER_CALLBACK (serv, X_("/fit_1_track"), "", fit_1_track); REGISTER_CALLBACK (serv, X_("/fit_1_track"), "f", fit_1_track); REGISTER_CALLBACK (serv, X_("/fit_2_tracks"), "", fit_2_tracks); @@ -2523,6 +2524,34 @@ OSC::use_group (float value, lo_message msg) return 0; } +int +OSC::name_session (char *n, lo_message msg) +{ + if (!session) { + return -1; + } + string new_name = n; + char illegal = Session::session_name_is_legal (new_name); + + if (illegal) { + PBD::warning << (string_compose (_("To ensure compatibility with various systems\n" + "session names may not contain a '%1' character"), illegal)) << endmsg; + return -1; + } + switch (session->rename (new_name)) { + case -1: + PBD::warning << (_("That name is already in use by another directory/folder. Please try again.")) << endmsg; + break; + case 0: + return 0; + break; + default: + PBD::warning << (_("Renaming this session failed.\nThings could be seriously messed up at this point")) << endmsg; + break; + } + return -1; +} + uint32_t OSC::get_sid (boost::shared_ptr<ARDOUR::Stripable> strip, lo_address addr) { diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 57f0bc9e5a..75c88f8e1c 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -493,6 +493,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest> PATH_CALLBACK1_MSG(jog_mode,f); PATH_CALLBACK1_MSG(bank_delta,f); PATH_CALLBACK1_MSG(use_group,f); + PATH_CALLBACK1_MSG_s(name_session,s); PATH_CALLBACK1_MSG_s(sel_group,s); PATH_CALLBACK1_MSG_s(sel_rename,s); PATH_CALLBACK1_MSG_s(sel_comment,s); @@ -688,6 +689,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest> int refresh_surface (lo_message msg); int custom_clear (lo_message msg); int custom_mode (float state, lo_message msg); + int name_session (char *n, lo_message msg); // select int sel_send_pagesize (uint32_t size, lo_message msg); int sel_send_page (int page, lo_message msg); |