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
This commit is contained in:
Paul Davis 2011-07-26 02:07:59 +00:00
parent fd384bf48e
commit df78f284ee
5 changed files with 61 additions and 9 deletions

View File

@ -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);
}
}
}

View File

@ -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;

View File

@ -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 ();

View File

@ -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);

View File

@ -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;
}