mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 19:56:31 +01:00
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:
parent
851a392495
commit
2da10afb64
5 changed files with 49 additions and 12 deletions
|
|
@ -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 ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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 ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue