summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-04-01 20:45:57 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-04-01 20:45:57 -0400
commit2da10afb6492815aa76e9b8bb771f09c10721991 (patch)
tree94585b3c9fff57fb83ca9090013db0170758ca73
parent851a3924955a52a220b9a811229abdb2e8c8315f (diff)
fix #5424: routes created from templates do not get names based on the user-supplied text from the add route dialog
-rw-r--r--gtk2_ardour/add_route_dialog.cc17
-rw-r--r--gtk2_ardour/add_route_dialog.h3
-rw-r--r--gtk2_ardour/ardour_ui.cc6
-rw-r--r--libs/ardour/ardour/session.h2
-rw-r--r--libs/ardour/session.cc33
5 files changed, 49 insertions, 12 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc
index 487d65a19c..f5f4c62dac 100644
--- a/gtk2_ardour/add_route_dialog.cc
+++ b/gtk2_ardour/add_route_dialog.cc
@@ -288,11 +288,26 @@ AddRouteDialog::track_type_chosen ()
string
-AddRouteDialog::name_template ()
+AddRouteDialog::name_template () const
{
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
AddRouteDialog::count ()
{
diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h
index f2e2168f14..6fe7266452 100644
--- a/gtk2_ardour/add_route_dialog.h
+++ b/gtk2_ardour/add_route_dialog.h
@@ -59,7 +59,8 @@ class AddRouteDialog : public ArdourDialog
ARDOUR::ChanCount channels ();
int count ();
- std::string name_template ();
+ std::string name_template () const;
+ bool name_template_is_default () const;
std::string track_template ();
ARDOUR::PluginInfoPtr requested_instrument ();
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index bba740ae25..f21817c29d 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -3297,7 +3297,11 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
string template_path = add_route_dialog->track_template();
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;
}
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index f0a2fd1189..525faa4e13 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -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_midi_source_name (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);
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 0e03efa945..da1f9e9115 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -1598,7 +1598,7 @@ Session::find_route_name (string const & base, uint32_t& id, char* name, size_t
}
++id;
-
+
} while (id < (UINT_MAX-1));
return false;
@@ -2037,12 +2037,13 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r
}
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;
uint32_t control_id;
XMLTree tree;
uint32_t number = 0;
+ const uint32_t being_added = how_many;
if (!tree.read (template_path.c_str())) {
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"));
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];
- if (!find_route_name (route_name.c_str(), ++number, name, sizeof(name), true)) {
- fatal << _("Session: UINT_MAX routes? impossible!") << endmsg;
- /*NOTREACHED*/
+
+ if (!name_base.empty()) {
+
+ /* 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 */