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:
parent
fd384bf48e
commit
df78f284ee
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user