13
0

better more reliable checks on renamed, newly created and imported track/bus names

This commit is contained in:
Paul Davis 2015-09-28 14:49:49 -04:00
parent 9f8fe4b0bc
commit 0613ddd1f9
4 changed files with 31 additions and 20 deletions

View File

@ -52,6 +52,7 @@ namespace ARDOUR {
extern LIBARDOUR_API PBD::Signal1<void,int> PluginScanTimeout;
extern LIBARDOUR_API PBD::Signal0<void> GUIIdle;
extern LIBARDOUR_API PBD::Signal3<bool,std::string,std::string,int> CopyConfigurationFiles;
extern LIBARDOUR_API std::vector<std::string> reserved_io_names;
/**
* @param with_vst true to enable VST Support

View File

@ -142,6 +142,8 @@ PBD::Signal1<void,int> ARDOUR::PluginScanTimeout;
PBD::Signal0<void> ARDOUR::GUIIdle;
PBD::Signal3<bool,std::string,std::string,int> ARDOUR::CopyConfigurationFiles;
std::vector<std::string> ARDOUR::reserved_io_names;
static bool have_old_configuration_files = false;
namespace ARDOUR {
@ -506,6 +508,25 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
ARDOUR::AudioEngine::create ();
/* it is unfortunate that we need to include reserved names here that
refer to control surfaces. But there's no way to ensure a complete
lack of collisions without doing this, since the control surface
support may not even be active. Without adding an API to control
surface support that would list their port names, we do have to
list them here.
*/
char const * reserved[] = {
_("Monitor"),
_("Master"),
_("Control"),
_("Click"),
_("Mackie"),
0
};
reserved_io_names = I18N (reserved);
libardour_initialized = true;
return true;

View File

@ -365,7 +365,7 @@ Route::ensure_track_or_route_name(string name, Session &session)
string newname = name;
while (!session.io_name_is_legal (newname)) {
newname = bump_name_once (newname, '.');
newname = bump_name_once (newname, ' ');
}
return newname;

View File

@ -2196,30 +2196,13 @@ Session::resort_routes_using (boost::shared_ptr<RouteList> r)
bool
Session::find_route_name (string const & base, uint32_t& id, string& name, bool definitely_add_number)
{
/* it is unfortunate that we need to include reserved names here that
refer to control surfaces. But there's no way to ensure a complete
lack of collisions without doing this, since the control surface
support may not even be active. Without adding an API to control
surface support that would list their port names, we do have to
list them here.
*/
char const * const reserved[] = {
_("Monitor"),
_("Master"),
_("Control"),
_("Click"),
_("Mackie"),
0
};
/* the base may conflict with ports that do not belong to existing
routes, but hidden objects like the click track. So check port names
before anything else.
*/
for (int n = 0; reserved[n]; ++n) {
if (base == reserved[n]) {
for (vector<string>::const_iterator reserved = reserved_io_names.begin(); reserved != reserved_io_names.end(); ++reserved) {
if (base == *reserved) {
definitely_add_number = true;
if (id < 1) {
id = 1;
@ -3875,6 +3858,12 @@ Session::io_name_is_legal (const std::string& name)
{
boost::shared_ptr<RouteList> r = routes.reader ();
for (vector<string>::const_iterator reserved = reserved_io_names.begin(); reserved != reserved_io_names.end(); ++reserved) {
if (name == *reserved) {
return false;
}
}
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
if ((*i)->name() == name) {
return false;