fix #5424: routes created from templates do not get names based on the user-supplied text from the add route dialog

This commit is contained in:
Paul Davis 2013-04-01 20:45:57 -04:00
parent 851a392495
commit 2da10afb64
5 changed files with 49 additions and 12 deletions

View file

@ -288,11 +288,26 @@ AddRouteDialog::track_type_chosen ()
string string
AddRouteDialog::name_template () AddRouteDialog::name_template () const
{ {
return name_template_entry.get_text (); return name_template_entry.get_text ();
} }
bool
AddRouteDialog::name_template_is_default() const
{
string n = name_template();
if (n == _("Audio") ||
n == _("MIDI") ||
n == _("Audio+MIDI") ||
n == _("Bus")) {
return true;
}
return false;
}
int int
AddRouteDialog::count () AddRouteDialog::count ()
{ {

View file

@ -59,7 +59,8 @@ class AddRouteDialog : public ArdourDialog
ARDOUR::ChanCount channels (); ARDOUR::ChanCount channels ();
int count (); int count ();
std::string name_template (); std::string name_template () const;
bool name_template_is_default () const;
std::string track_template (); std::string track_template ();
ARDOUR::PluginInfoPtr requested_instrument (); ARDOUR::PluginInfoPtr requested_instrument ();

View file

@ -3297,7 +3297,11 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
string template_path = add_route_dialog->track_template(); string template_path = add_route_dialog->track_template();
if (!template_path.empty()) { if (!template_path.empty()) {
_session->new_route_from_template (count, template_path); if (add_route_dialog->name_template_is_default()) {
_session->new_route_from_template (count, template_path, string());
} else {
_session->new_route_from_template (count, template_path, add_route_dialog->name_template());
}
return; return;
} }

View file

@ -195,7 +195,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
std::string new_audio_source_name (const std::string&, uint32_t nchans, uint32_t chan, bool destructive); std::string new_audio_source_name (const std::string&, uint32_t nchans, uint32_t chan, bool destructive);
std::string new_midi_source_name (const std::string&); std::string new_midi_source_name (const std::string&);
std::string new_source_path_from_name (DataType type, const std::string&); std::string new_source_path_from_name (DataType type, const std::string&);
RouteList new_route_from_template (uint32_t how_many, const std::string& template_path); RouteList new_route_from_template (uint32_t how_many, const std::string& template_path, const std::string& name);
void process (pframes_t nframes); void process (pframes_t nframes);

View file

@ -1598,7 +1598,7 @@ Session::find_route_name (string const & base, uint32_t& id, char* name, size_t
} }
++id; ++id;
} while (id < (UINT_MAX-1)); } while (id < (UINT_MAX-1));
return false; return false;
@ -2037,12 +2037,13 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r
} }
RouteList RouteList
Session::new_route_from_template (uint32_t how_many, const std::string& template_path) Session::new_route_from_template (uint32_t how_many, const std::string& template_path, const std::string& name_base)
{ {
RouteList ret; RouteList ret;
uint32_t control_id; uint32_t control_id;
XMLTree tree; XMLTree tree;
uint32_t number = 0; uint32_t number = 0;
const uint32_t being_added = how_many;
if (!tree.read (template_path.c_str())) { if (!tree.read (template_path.c_str())) {
return ret; return ret;
@ -2062,13 +2063,29 @@ Session::new_route_from_template (uint32_t how_many, const std::string& template
node_copy.remove_property_recursively (X_("id")); node_copy.remove_property_recursively (X_("id"));
try { try {
string const route_name = node_copy.property(X_("name"))->value ();
/* generate a new name by adding a number to the end of the template name */
char name[32]; char name[32];
if (!find_route_name (route_name.c_str(), ++number, name, sizeof(name), true)) {
fatal << _("Session: UINT_MAX routes? impossible!") << endmsg; if (!name_base.empty()) {
/*NOTREACHED*/
/* if we're adding more than one routes, force
* all the names of the new routes to be
* numbered, via the final parameter.
*/
if (!find_route_name (name_base.c_str(), ++number, name, sizeof(name), (being_added > 1))) {
fatal << _("Session: UINT_MAX routes? impossible!") << endmsg;
/*NOTREACHDE*/
}
} else {
string const route_name = node_copy.property(X_("name"))->value ();
/* generate a new name by adding a number to the end of the template name */
if (!find_route_name (route_name.c_str(), ++number, name, sizeof(name), true)) {
fatal << _("Session: UINT_MAX routes? impossible!") << endmsg;
/*NOTREACHED*/
}
} }
/* set this name in the XML description that we are about to use */ /* set this name in the XML description that we are about to use */