bool ComponentCollection::SetComponent(const ComponentPtr& component, bool validate, std::string* error ) { HELIUM_ASSERT( component->GetSlot() != NULL ); M_Component::const_iterator found = m_Components.find( component->GetSlot() ); if (found != m_Components.end() && found->second == component) { return true; // nothing to do, this is already in the collection } std::string errorMessage; if ( validate && !ValidateComponent( component, errorMessage ) ) { if ( error ) { std::string componentName; Helium::ConvertString( component->GetMetaClass()->m_Name, componentName ); std::string collectionName; Helium::ConvertString( GetMetaClass()->m_Name, collectionName ); *error = std::string( TXT( "Component '" ) ) + componentName + TXT( "' is not valid for collection '" ) + collectionName + TXT( "': " ) + errorMessage; } return false; } // Event args ComponentCollectionChanged args ( this, component ); // Set the component and connect the collection m_Components[ component->GetSlot() ] = component; component->SetCollection( this ); // Start caring about change to the component component->e_Changed.Add( ObjectChangeSignature::Delegate::Create<ComponentCollection, void (ComponentCollection::*)( const Reflect::ObjectChangeArgs& )> ( this, &ComponentCollection::ComponentChanged ) ); // Raise event m_Modified = true; m_ComponentAdded.Raise( args ); return true; }
bool ComponentCollection::SetComponent(const ComponentPtr& component, bool validate, tstring* error ) { HELIUM_ASSERT( component->GetSlot() != Reflect::ReservedTypes::Invalid ); M_Component::const_iterator found = m_Components.find( component->GetSlot() ); if (found != m_Components.end() && found->second == component) { return true; // nothing to do, this is already in the collection } tstring errorMessage; if ( validate && !ValidateComponent( component, errorMessage ) ) { if ( error ) { *error = tstring( TXT( "Component '" ) ) + component->GetClass()->m_ShortName + TXT( "' is not valid for collection '" ) + GetClass()->m_ShortName + TXT( "': " ) + errorMessage; } return false; } // Event args ComponentCollectionChanged args ( this, component ); // Set the component and connect the collection m_Components[ component->GetSlot() ] = component; component->SetCollection( this ); // Start caring about change to the component component->AddChangedListener( ElementChangeSignature::Delegate::Create<ComponentCollection, void (ComponentCollection::*)( const Reflect::ElementChangeArgs& )> ( this, &ComponentCollection::ComponentChanged ) ); // Raise event m_Modified = true; m_ComponentAdded.Raise( args ); return true; }