* fix: don't rename target/names without numeric suffix on paste to non clashing namespace
This commit is contained in:
parent
e62483970f
commit
1f7d0250b0
|
|
@ -29,15 +29,16 @@
|
||||||
#if 1
|
#if 1
|
||||||
class Postfix
|
class Postfix
|
||||||
{
|
{
|
||||||
unsigned int m_value;
|
int m_value; // -1 is special value to handle empty postfix
|
||||||
public:
|
public:
|
||||||
Postfix( const char* postfix ) : m_value( atoi( postfix ) ){
|
Postfix( const char* postfix ) : m_value( string_empty( postfix )? -1 : atoi( postfix ) ){
|
||||||
}
|
}
|
||||||
unsigned int number() const {
|
int number() const {
|
||||||
return m_value;
|
return m_value;
|
||||||
}
|
}
|
||||||
void write( char* buffer ) const {
|
void write( char* buffer ) const {
|
||||||
sprintf( buffer, "%u", m_value );
|
if( m_value != -1 )
|
||||||
|
sprintf( buffer, "%i", m_value );
|
||||||
}
|
}
|
||||||
Postfix& operator++(){
|
Postfix& operator++(){
|
||||||
++m_value;
|
++m_value;
|
||||||
|
|
|
||||||
|
|
@ -71,15 +71,15 @@ class NameKeys : public Entity::Observer, public Namespaced
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void insertAll(){
|
void insertAll(){
|
||||||
for ( KeyValues::iterator i = m_keyValues.begin(); i != m_keyValues.end(); ++i )
|
for ( auto& [key, value] : m_keyValues )
|
||||||
{
|
{
|
||||||
insertName( ( *i ).first.c_str(), *( *i ).second );
|
insertName( key.c_str(), *value );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void eraseAll(){
|
void eraseAll(){
|
||||||
for ( KeyValues::iterator i = m_keyValues.begin(); i != m_keyValues.end(); ++i )
|
for ( auto& [key, value] : m_keyValues )
|
||||||
{
|
{
|
||||||
eraseName( ( *i ).first.c_str(), *( *i ).second );
|
eraseName( key.c_str(), *value );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -158,26 +158,24 @@ public:
|
||||||
|
|
||||||
UniqueNames uniqueNames( other.m_uniqueNames );
|
UniqueNames uniqueNames( other.m_uniqueNames );
|
||||||
|
|
||||||
for ( Names::const_iterator i = m_names.begin(); i != m_names.end(); ++i )
|
for ( const auto& [callback, observer] : m_names )
|
||||||
{
|
{
|
||||||
groups[( *i ).second.c_str()].push_back( ( *i ).first );
|
groups[observer.c_str()].push_back( callback );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( NameGroups::iterator i = groups.begin(); i != groups.end(); ++i )
|
for ( const auto& [name, setNameCallbacks] : groups )
|
||||||
{
|
{
|
||||||
name_t uniqueName( uniqueNames.make_unique( name_read( ( *i ).first.c_str() ) ) );
|
name_t uniqueName( uniqueNames.make_unique( name_read( name.c_str() ) ) );
|
||||||
uniqueNames.insert( uniqueName );
|
uniqueNames.insert( uniqueName );
|
||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
name_write( buffer, uniqueName );
|
name_write( buffer, uniqueName );
|
||||||
|
|
||||||
//globalOutputStream() << "renaming " << makeQuoted((*i).first.c_str()) << " to " << makeQuoted(buffer) << "\n";
|
//globalOutputStream() << "renaming " << makeQuoted(name.c_str()) << " to " << makeQuoted(buffer) << "\n";
|
||||||
|
|
||||||
SetNameCallbacks& setNameCallbacks = ( *i ).second;
|
for ( const NameCallback& nameCallback : setNameCallbacks )
|
||||||
|
|
||||||
for ( SetNameCallbacks::const_iterator j = setNameCallbacks.begin(); j != setNameCallbacks.end(); ++j )
|
|
||||||
{
|
{
|
||||||
( *j )( buffer );
|
nameCallback( buffer );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -206,7 +204,7 @@ typedef Static<NamespaceModule> StaticNamespaceModule;
|
||||||
StaticRegisterModule staticRegisterDefaultNamespace( StaticNamespaceModule::instance() );
|
StaticRegisterModule staticRegisterDefaultNamespace( StaticNamespaceModule::instance() );
|
||||||
|
|
||||||
|
|
||||||
std::list<Namespaced*> g_cloned;
|
std::vector<Namespaced*> g_cloned;
|
||||||
|
|
||||||
inline Namespaced* Node_getNamespaced( scene::Node& node ){
|
inline Namespaced* Node_getNamespaced( scene::Node& node ){
|
||||||
return NodeTypeCast<Namespaced>::cast( node );
|
return NodeTypeCast<Namespaced>::cast( node );
|
||||||
|
|
@ -234,15 +232,15 @@ void Map_gatherNamespaced( scene::Node& root ){
|
||||||
|
|
||||||
void Map_mergeClonedNames( bool makeUnique /*= true*/ ){
|
void Map_mergeClonedNames( bool makeUnique /*= true*/ ){
|
||||||
if( makeUnique ){
|
if( makeUnique ){
|
||||||
for ( std::list<Namespaced*>::const_iterator i = g_cloned.begin(); i != g_cloned.end(); ++i )
|
for ( Namespaced *namespaced : g_cloned )
|
||||||
{
|
{
|
||||||
( *i )->setNamespace( g_cloneNamespace );
|
namespaced->setNamespace( g_cloneNamespace );
|
||||||
}
|
}
|
||||||
g_cloneNamespace.mergeNames( g_defaultNamespace );
|
g_cloneNamespace.mergeNames( g_defaultNamespace );
|
||||||
}
|
}
|
||||||
for ( std::list<Namespaced*>::const_iterator i = g_cloned.begin(); i != g_cloned.end(); ++i )
|
for ( Namespaced *namespaced : g_cloned )
|
||||||
{
|
{
|
||||||
( *i )->setNamespace( g_defaultNamespace );
|
namespaced->setNamespace( g_defaultNamespace );
|
||||||
}
|
}
|
||||||
|
|
||||||
g_cloned.clear();
|
g_cloned.clear();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user