diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-07-26 02:07:59 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-07-26 02:07:59 +0000 |
commit | df78f284ee2707154cd56b2b25340f2fe8a8b6d2 (patch) | |
tree | ba23556f15cfecc1b358f4f1df611989c609bc62 | |
parent | fd384bf48e71b65ccd3858d10cc390c4128c469c (diff) |
fix up colons in track names before they are used for JACK port names; catch most (not all) attempted renames and ask the user about colons
git-svn-id: svn://localhost/ardour2/branches/3.0@9928 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 45 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.h | 1 | ||||
-rw-r--r-- | libs/ardour/io.cc | 7 | ||||
-rw-r--r-- | libs/ardour/region.cc | 10 |
5 files changed, 61 insertions, 9 deletions
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 85601362c8..3836f4cf6c 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -195,7 +195,7 @@ RouteTimeAxisView::set_route (boost::shared_ptr<Route> rt) rec_enable_button->set_sensitive (_session->writable()); } - + controls_hbox.pack_start(gm.get_level_meter(), false, false); _route->meter_change.connect (*this, invalidator (*this), bind (&RouteTimeAxisView::meter_changed, this), gui_context()); _route->input()->changed.connect (*this, invalidator (*this), ui_bind (&RouteTimeAxisView::io_changed, this, _1, _2), gui_context()); @@ -1322,7 +1322,10 @@ RouteTimeAxisView::name_entry_changed () PROGRAM_NAME)); name_entry.set_text (_route->name()); } else { - _route->set_name (x); + + if (RouteUI::verify_new_route_name (x)) { + _route->set_name (x); + } } } diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 8d4ed07398..d78102322b 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -1349,11 +1349,32 @@ RouteUI::idle_remove_this_route (RouteUI *rui) return false; } +bool +RouteUI::verify_new_route_name (const std::string& name) +{ + if (name.find (':')) { + MessageDialog colon_msg (_("The use of colons (':') is discouraged in track and bus names.\nDo you insist on using this?")); + colon_msg.add_button (Stock::CANCEL, RESPONSE_CANCEL); + switch (colon_msg.run()) { + case Gtk::RESPONSE_ACCEPT: + return true; + break; + default: + return false; + break; + } + } + + return true; +} + void RouteUI::route_rename () { ArdourPrompter name_prompter (true); string result; + bool done = false; + if (is_track()) { name_prompter.set_title (_("Rename Track")); } else { @@ -1365,13 +1386,25 @@ RouteUI::route_rename () name_prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false); name_prompter.show_all (); - switch (name_prompter.run ()) { - case Gtk::RESPONSE_ACCEPT: - name_prompter.get_result (result); - if (result.length()) { - _route->set_name (result); + while (!done) { + switch (name_prompter.run ()) { + case Gtk::RESPONSE_ACCEPT: + name_prompter.get_result (result); + name_prompter.hide (); + if (result.length()) { + if (verify_new_route_name (result)) { + _route->set_name (result); + done = true; + } else { + /* back to name prompter */ + } + + } else { + /* nothing entered, just get out of here */ + done = true; + } + break; } - break; } return; diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 9990fd14d0..9649d74634 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -220,6 +220,7 @@ class RouteUI : public virtual AxisView virtual void stop_step_editing() {} void set_invert_sensitive (bool); + bool verify_new_route_name (const std::string& name); private: void check_rec_enable_sensitivity (); diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index ae0cdcce29..6aaca08c90 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -1301,7 +1301,12 @@ IO::build_legal_port_name (DataType type) char buf1[name_size+1]; char buf2[name_size+1]; - snprintf (buf1, name_size+1, ("%.*s/%s"), limit, _name.val().c_str(), suffix.c_str()); + /* colons are illegal in port names, so fix that */ + + string nom = _name.val(); + replace_all (nom, ":", ";"); + + snprintf (buf1, name_size+1, ("%.*s/%s"), limit, nom.c_str(), suffix.c_str()); int port_number = find_port_hole (buf1); snprintf (buf2, name_size+1, "%s %d", buf1, port_number); diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 76b7ec0ec6..2ce823777b 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -32,6 +32,7 @@ #include "ardour/file_source.h" #include "ardour/filter.h" #include "ardour/playlist.h" +#include "ardour/playlist_source.h" #include "ardour/profile.h" #include "ardour/region.h" #include "ardour/region_factory.h" @@ -1481,7 +1482,16 @@ Region::uses_source (boost::shared_ptr<const Source> source) const if (*i == source) { return true; } + + boost::shared_ptr<PlaylistSource> ps = boost::dynamic_pointer_cast<PlaylistSource> (*i); + + if (ps) { + if (ps->playlist()->uses_source (source)) { + return true; + } + } } + return false; } |