summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-07-26 02:07:59 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-07-26 02:07:59 +0000
commitdf78f284ee2707154cd56b2b25340f2fe8a8b6d2 (patch)
treeba23556f15cfecc1b358f4f1df611989c609bc62
parentfd384bf48e71b65ccd3858d10cc390c4128c469c (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.cc7
-rw-r--r--gtk2_ardour/route_ui.cc45
-rw-r--r--gtk2_ardour/route_ui.h1
-rw-r--r--libs/ardour/io.cc7
-rw-r--r--libs/ardour/region.cc10
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;
}