From: Robin Gareus Date: Mon, 30 Jun 2014 16:25:11 +0000 (+0200) Subject: Disallow empty names for Groups, automatically enumerate them X-Git-Tag: 4.0-rc1~1601^2~678 X-Git-Url: https://main.carlh.net/gitweb/?p=ardour.git;a=commitdiff_plain;h=bae86a2d908122d0bb54afcce82d2cf232268a8a Disallow empty names for Groups, automatically enumerate them --- diff --git a/gtk2_ardour/route_group_dialog.cc b/gtk2_ardour/route_group_dialog.cc index f659a683d4..b4da3c19f3 100644 --- a/gtk2_ardour/route_group_dialog.cc +++ b/gtk2_ardour/route_group_dialog.cc @@ -88,6 +88,15 @@ RouteGroupDialog::RouteGroupDialog (RouteGroup* g, bool creating_new) main_vbox->pack_start (*top_vbox, false, false); + if (_group->name ().empty()) { + _initial_name = "1"; + while (!unique_name (_initial_name)) { + _initial_name = bump_name_number (_initial_name); + } + _name.set_text (_initial_name); + update(); + } + _name.set_text (_group->name ()); _active.set_active (_group->is_active ()); @@ -181,14 +190,14 @@ RouteGroupDialog::do_run () return Gtk::RESPONSE_CANCEL; } - if (unique_name ()) { + if (unique_name (_name.get_text())) { /* not cancelled and the name is ok, so all is well */ return false; } _group->set_name (_initial_name); MessageDialog msg ( - _("A route group of this name already exists. Please use a different name."), + _("The group name is not unique. Please use a different name."), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, @@ -232,11 +241,12 @@ RouteGroupDialog::gain_toggled () /** @return true if the current group's name is unique accross the session */ bool -RouteGroupDialog::unique_name () const +RouteGroupDialog::unique_name (std::string const name) const { + if (name.empty()) return false; // do not allow empty name, empty means unset. list route_groups = _group->session().route_groups (); list::iterator i = route_groups.begin (); - while (i != route_groups.end() && ((*i)->name() != _name.get_text() || *i == _group)) { + while (i != route_groups.end() && ((*i)->name() != name || *i == _group)) { ++i; } diff --git a/gtk2_ardour/route_group_dialog.h b/gtk2_ardour/route_group_dialog.h index 6440a7c6a2..1200175e99 100644 --- a/gtk2_ardour/route_group_dialog.h +++ b/gtk2_ardour/route_group_dialog.h @@ -55,7 +55,7 @@ private: void gain_toggled (); void update (); - bool unique_name () const; + bool unique_name (std::string const name) const; }; diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc index 6fdab19497..54943562cb 100644 --- a/libs/ardour/utils.cc +++ b/libs/ardour/utils.cc @@ -200,18 +200,19 @@ string ARDOUR::bump_name_number (const std::string& name) { size_t pos = name.length(); + size_t num = 0; bool have_number = false; while (pos > 0 && isdigit(name.at(--pos))) { have_number = true; + num = pos; } string newname; if (have_number) { - ++pos; - int32_t num = strtol (name.c_str() + pos, (char **)NULL, 10); + int32_t seq = strtol (name.c_str() + num, (char **)NULL, 10); char buf[32]; - snprintf (buf, sizeof(buf), "%d", num + 1); - newname = name.substr (0, pos); + snprintf (buf, sizeof(buf), "%d", seq + 1); + newname = name.substr (0, num); newname += buf; } else { newname = name;