diff options
author | Robin Gareus <robin@gareus.org> | 2014-06-30 18:25:11 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-06-30 18:33:05 +0200 |
commit | bae86a2d908122d0bb54afcce82d2cf232268a8a (patch) | |
tree | dd02552b2e063fb877684d15d1ab4092ed45140b | |
parent | 26ba90815b7e0e5ce4823e6fe86edc795bb3e7b1 (diff) |
Disallow empty names for Groups, automatically enumerate them
-rw-r--r-- | gtk2_ardour/route_group_dialog.cc | 18 | ||||
-rw-r--r-- | gtk2_ardour/route_group_dialog.h | 2 | ||||
-rw-r--r-- | libs/ardour/utils.cc | 9 |
3 files changed, 20 insertions, 9 deletions
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<RouteGroup*> route_groups = _group->session().route_groups (); list<RouteGroup*>::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; |