widgetmodel/alfwidgetmodel/src/alfelementattributeownerimpl.cpp
changeset 17 3eca7e70b1b8
parent 3 4526337fb576
--- a/widgetmodel/alfwidgetmodel/src/alfelementattributeownerimpl.cpp	Tue Feb 02 00:28:09 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,739 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of the IAlfAttributeOwner interface 
-*                for AlfElement.
-*
-*/
-
-
-#include <alf/alfexceptions.h>
-#include "alf/alfattribute.h"
-#include "alf/alfattributecontainer.h"
-#include "alf/ialfvisualtemplate.h"
-#include <alf/alfwidgetcontrol.h>
-#include "alf/ialfattributesetter.h"
-#include "alf/alfcommonvisualattributesetter.h"
-#include "alf/alfelement.h"
-#include <osn/ustring.h>
-#include "alf/attrproperty.h"
-#include <alf/alfwidgetcommand.h>
-
-
-#include "alfelementattributeownerimpl.h"
-
-using namespace duiuimodel;
-
-namespace Alf
-    {
-
-// ---------------------------------------------------------------------------
-// Constructor.
-// ---------------------------------------------------------------------------
-//
-AlfElementAttributeOwnerImpl::AlfElementAttributeOwnerImpl(
-    AlfElement& aElement, CAlfWidgetControl& aControl) :
-    mElement(aElement), mControl(aControl)
-    {
-    mAttributeList.setAutoDelete(true);    
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-AlfElementAttributeOwnerImpl::~AlfElementAttributeOwnerImpl()
-    {
-    mAttributeList.clear();
-    }
-    
-// ---------------------------------------------------------------------------
-// From class IAlfInterfaceBase.
-// Getter for interfaces provided by the element.
-// ---------------------------------------------------------------------------
-//
-IAlfInterfaceBase* AlfElementAttributeOwnerImpl::makeInterface(
-    const IfId& aType)
-    {
-    UString param(aType.mImplementationId);
-    if (param == IAlfAttributeOwner::type().mImplementationId)
-        {
-    	return static_cast<IAlfAttributeOwner*>(this);
-        }
-    return 0;
-    }    
-        
-// ---------------------------------------------------------------------------
-// Get the number of available attributes.
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-int AlfElementAttributeOwnerImpl::attributeCount() const
-    {
-    return mAttributeList.count();
-    }
-
-// ---------------------------------------------------------------------------
-// Gets the attribute with the given name.
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-const AlfAttribute* AlfElementAttributeOwnerImpl::getAttribute(
-    const UString& aAttribName) const
-    {
-    AlfAttribute* attribute = 0;
- 	for (int i = 0; i < mAttributeList.count(); i++)
- 	    {
- 		if (!strcmp(aAttribName.getUtf8(), mAttributeList[i]->name()))
- 		    {
- 			attribute = mAttributeList[i];
- 			break;
- 		    }
- 	    }
-    return attribute;
-    }
-
-// ---------------------------------------------------------------------------
-// Set a value of an attribute.
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-bool AlfElementAttributeOwnerImpl::setAttribute(const AlfAttribute& aAttribute)
-    {
-    // The attribute must have at least one value set.
-    if (!aAttribute.getTargetValueCount())
-        {
-        ALF_THROW(
-            AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
-        }
-    
-    if (!canHandleAttribute(aAttribute.name()))
-        {
-        return false;
-        }
-    
-    // Check whether the attribute exists already.
-    int i = 0;
-    for (i = 0; i < mAttributeList.count() ; i++)
- 	    {
- 		if (!strcmp(aAttribute.name(), mAttributeList[i]->name()))
- 		    {
- 		    // Attribute exists already, modify the contents.
- 			*mAttributeList[i] = aAttribute;
- 			handleAttribute(*mAttributeList[i]);
- 			return true;
- 		    }
-        }
-
-    // Attribute with the given name does not exist,
-    // clone the given attribute and insert it in the list.
-    mAttributeList.resize(mAttributeList.count() + 1);
-    // Insert cannot fail because already resized.
-    mAttributeList.insert(mAttributeList.count(),
-        const_cast<AlfAttribute&>(aAttribute).clone());
-    
-    handleAttribute(*mAttributeList[i]);
-    return true;
-    }
-
-// ---------------------------------------------------------------------------
-// Set a value of an attribute.
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-bool AlfElementAttributeOwnerImpl::setAttribute(
-    const UString& aAttribName, AlfAttributeValueType* aValue)
-    {
-    if (!aValue)
-        {
-        ALF_THROW(
-            AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
-        }
-    
-    // Create a new attribute.
-    auto_ptr<AlfAttribute> attribute(
-        new (EMM) AlfAttribute(aAttribName.getUtf8(), AlfAttribute::EStatic));
-    attribute->addTargetValue(aValue);
- 
-    return setAttribute(*attribute.get());
-    }      
-// ---------------------------------------------------------------------------
-// Set a value of an attribute.
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-bool AlfElementAttributeOwnerImpl::setAttribute( const UString& aTargetId , 
-												 AlfAttribute& aAttribute ) 
-	{
-  	bool ret(false);
-  
-	// The attribute must have at least one value set.
-	if (!aAttribute.getTargetValueCount())
-		{
-		ALF_THROW(
-		    AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
-		}
-
-	//check targetId
-	if (!aTargetId.isEmpty() 
-	 && !aTargetId.compare(mElement.name()) )
-		{
-		ret = setAttribute(aAttribute);
-		}
-
-  	return ret;
-  	}
-
-
-// ---------------------------------------------------------------------------
-// Set a value of an attribute.
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-bool AlfElementAttributeOwnerImpl::setAttribute( const UString& aTargetId, 
-												 const UString& aAttribName,
- 												 AlfAttributeValueType* aValue )
-	{
-	bool ret(false);
-	
-	if (!aValue)
-		{
-		ALF_THROW(
-		    AlfAttributeException, EInvalidAttribute, "AlfElementAttributeOwnerImpl")
-		}
-	
-	if (!aTargetId.isEmpty())
-		{
-		 // Create a new static attribute.
-	    auto_ptr<AlfAttribute> attribute(
-	        new (EMM) AlfAttribute(aAttribName.getUtf8(), AlfAttribute::EStatic));
-	    attribute->addTargetValue(aValue);
-	 
-	    ret = setAttribute(*attribute.get());
-	
-		}
-			
-	return ret;
-		
-	} 
-
-// ---------------------------------------------------------------------------
-// Gets the attribute with the given name.
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-const AlfAttribute* AlfElementAttributeOwnerImpl::getAttribute( const UString& aTargetId ,
-															    const UString& aAttribName ) const
-	{
-	const AlfAttribute* attr(0);
-
-	//check targetId
-	if (!aTargetId.isEmpty() 
-	     && !aTargetId.compare(mElement.name()))
-		{
-		attr = getAttribute(aAttribName); 
-		}
-		
-	return attr;
-	}
-	
-// ---------------------------------------------------------------------------
-// Sets the attributes from container
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-bool AlfElementAttributeOwnerImpl::setAttributeContainer( AlfAttributeContainer& aAttributeContainer )
-	{
-
-    const int attributeCount = aAttributeContainer.attributeCount();
-	int numAttributesHandled = 0;
-	
-    for (int i = 0; i < attributeCount ; i++)
-        {
-        AlfAttribute& attribute = aAttributeContainer.getAttribute(i);
-        if (!strcmp(attribute.name(), duiuimodel::tactileattributes::KEventInput))
-            {
-            
-            // Look for feedback type attribute.
-            try
-              {
-              AlfAttribute& feedBackType = 
-              aAttributeContainer.getAttributeByName(duiuimodel::tactileattributes::KFeedbackType);
-              handleTactileAttribute(attribute,feedBackType);
-              numAttributesHandled += 2;
-              }
-            catch(AlfDataException& exception)
-              {
-              // attribute not found,so return false
-              return false;
-              }
-            }
-         
-        else if(setAttribute(attribute))
-            {
-            numAttributesHandled++;
-            }
-	    }
-
-
-	return (numAttributesHandled == attributeCount);
-	}
-
-// ---------------------------------------------------------------------------
-// Handles the Tactile Attribute.
-// ---------------------------------------------------------------------------
-//
-void AlfElementAttributeOwnerImpl::handleTactileAttribute(
-    AlfAttribute& aAttributeEvent,AlfAttribute& aAttributeFeedback)
-    {
-	    IAlfVisualTemplate* visualTemplate = mElement.getVisualTemplate();
-		
-	    // Find the root layout 
-	    CAlfVisual* main = mElement.findVisual(0);//needs to be changed because in some cases id may be
-	    										  // set by the user	
-	    
-	    if(visualTemplate )
-	        {
-			AlfAttribute* attrEvent = NULL;
-			AlfAttribute* attrFeedback = NULL;
-
-	        int setterCount = visualTemplate->numAttributeSetters();
-	        bool found(false);
-	        for (int j = 0; j < setterCount ; j++)
-	            {
-	            AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
-	            try
-	                {
-	                //find the attribute in each container until it is found
-	                attrEvent = &(container.getAttributeByName(duiuimodel::tactileattributes::KEventInput));
-	                attrFeedback = &(container.getAttributeByName(duiuimodel::tactileattributes::KFeedbackType));
-	                }
-	            catch(AlfDataException& exception)
-	                {
-	                // attribute not found,so continue
-	                continue;
-	                }
-	            //attribute found in one of the existing containers of the visual template, update it
-	            *attrEvent = aAttributeEvent;
-	            *attrFeedback = aAttributeFeedback;
-	            found = true;
-	            IAlfAttributeSetter& setter  = visualTemplate->attributeSetter(j);
-	            if(main)
-	            	setter.setAttributeValue(*main,&container,0);
-	            break;                                            
-	            }
-	        // attribute not found in any of the containers, so create one attribute container and one 
-	        // attribute setter and add both to the visual template        
-	        if (!found)
-	            {
-	            auto_ptr<AlfAttributeContainer> container( 
-	                new (EMM) AlfAttributeContainer());
-	            
-	            auto_ptr<AlfCommonVisualAttributeSetter> setter(
-	                new (EMM) AlfCommonVisualAttributeSetter());
-	                
-	            AlfAttribute* attribe =aAttributeEvent.clone();
-	            AlfAttribute* attribf =aAttributeFeedback.clone();
-
-	            container.get()->addAttribute(attribe);
-	            container.get()->addAttribute(attribf);
-	            if(main)
-	            setter.get()->setAttributeValue(*main, container.get(), 0);
-	            
-	            visualTemplate->addAttributeSetter(setter.release(), 
-	                container.release());
-	            }
-	        }
-    }
-
-// ---------------------------------------------------------------------------
-// Sets the attributes from container using targetId
-// From class IAlfAttributeOwner.
-// ---------------------------------------------------------------------------
-//
-bool AlfElementAttributeOwnerImpl::setAttributeContainer( const UString& aTargetId , 
-                               AlfAttributeContainer& aAttributeContainer )
-	{
-
-
-    const int attributeCount = aAttributeContainer.attributeCount();
-	int numAttributesHandled = 0;
-	
-    for (int i = 0; i < attributeCount ; i++)
-        {
-        AlfAttribute& attribute = aAttributeContainer.getAttribute(i);
-        if (!strcmp(attribute.name(), duiuimodel::tactileattributes::KEventInput))
-        {
-                // Look for feedback type attribute.
-        
-        // Look for feedback type attribute.
-        try
-          {
-          AlfAttribute& feedBackType = 
-          aAttributeContainer.getAttributeByName(duiuimodel::tactileattributes::KFeedbackType);
-          handleTactileAttribute(attribute,feedBackType);
-          numAttributesHandled += 2;
-          }
-        catch(AlfDataException& exception)
-          {
-          // attribute not found,so return false
-          return false;
-          }
-        }
-       else if(setAttribute(aTargetId,attribute))
-        {
-        	numAttributesHandled++;
-        }
-	    }
-
-	return (numAttributesHandled == attributeCount);
-		
-	}
-    
-// ---------------------------------------------------------------------------
-// Handles the attribute, sets proper values.
-// ---------------------------------------------------------------------------
-//
-void AlfElementAttributeOwnerImpl::handleAttribute(AlfAttribute& aAttribute)
-    {
-    const char* attrName = aAttribute.name();
-    
-    if (!strcmp(attrName, commonvisualattributes::KOpacity)) 
-        {
-        handleOpacityAttribute(aAttribute);
-        }
-    else if(!strcmp(attrName, layoutattributes::KPositionX) || 
-            !strcmp(attrName, layoutattributes::KPositionY))
-        {
-        handlePositionAttribute(aAttribute);
-        }
-    else if(!strcmp(attrName, layoutattributes::KWidth) || 
-            !strcmp(attrName, layoutattributes::KHeight))
-        {
-        handleSizeAttribute(aAttribute);
-        }
-    else if(!strcmp(attrName, layoutattributes::KMaxWidth) || 
-            !strcmp(attrName, layoutattributes::KMaxHeight))
-        {
-        handleMaxSizeAttribute(aAttribute);
-        }
-    else if(!strcmp(attrName, layoutattributes::KMinWidth) || 
-            !strcmp(attrName, layoutattributes::KMinHeight))
-        {
-        handleMinSizeAttribute(aAttribute);
-        }        
-    }
-    
-// ---------------------------------------------------------------------------
-// Can attribute be handled with this widget.
-// ---------------------------------------------------------------------------
-//
-bool AlfElementAttributeOwnerImpl::canHandleAttribute(
-    const char* aAttributeName)
-    {
-    bool canHandle(false);
-    if (!strcmp(aAttributeName, commonvisualattributes::KOpacity) ||
-        !strcmp(aAttributeName, layoutattributes::KPositionX) ||
-        !strcmp(aAttributeName, layoutattributes::KPositionY) ||
-        !strcmp(aAttributeName, layoutattributes::KWidth) ||
-        !strcmp(aAttributeName, layoutattributes::KHeight) ||  
-        !strcmp(aAttributeName, layoutattributes::KMaxWidth) ||
-        !strcmp(aAttributeName, layoutattributes::KMaxHeight) ||  
-        !strcmp(aAttributeName, layoutattributes::KMinWidth) ||
-        !strcmp(aAttributeName, layoutattributes::KMinHeight))  
-        {
-        canHandle = true;
-        }
-    return canHandle;        
-    }
-
-// ---------------------------------------------------------------------------
-// Handles the Opacity Attribute.
-// ---------------------------------------------------------------------------
-//
-void AlfElementAttributeOwnerImpl::handleOpacityAttribute(
-    AlfAttribute& aAttribute)
-    {
-    const char* attrName = aAttribute.name();
-    
-    IAlfVisualTemplate* visualTemplate = mElement.getVisualTemplate();
-    
-    // Find the root layout 
-    CAlfVisual* main = mElement.findVisual(0);
-    
-    if(visualTemplate && main)
-        {
-        int setterCount = visualTemplate->numAttributeSetters();
-        bool found(false);
-        for (int j = 0; j < setterCount && main; j++)
-            {
-            AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
-            AlfAttribute* attr = NULL;
-            try
-                {
-                //find the attribute in each container until it is found
-                attr = &(container.getAttributeByName(attrName));
-                }
-            catch(AlfDataException& exception)
-                {
-                // attribute not found,so continue
-                continue;
-                }
-            //attribute found in one of the existing containers of the visual template, update it
-            *attr = aAttribute;
-            found = true;
-            IAlfAttributeSetter& setter  = visualTemplate->attributeSetter(j);
-            setter.setAttributeValue(*main,&container,0);
-            break;                                            
-            }
-        // attribute not found in any of the containers, so create one attribute container and one 
-        // attribute setter and add both to the visual template        
-        if (!found)
-            {
-            auto_ptr<AlfAttributeContainer> container( 
-                new (EMM) AlfAttributeContainer());
-            auto_ptr<AlfCommonVisualAttributeSetter> setter(
-                new (EMM) AlfCommonVisualAttributeSetter());
-            AlfAttribute* attribute =aAttribute.clone();
-            container.get()->addAttribute(attribute);
-           
-            setter.get()->setAttributeValue(*main, container.get(), 0);
-            visualTemplate->addAttributeSetter(setter.release(), 
-                container.release());
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Handles the Position Attribute
-// ---------------------------------------------------------------------------
-//    
-void AlfElementAttributeOwnerImpl::handlePositionAttribute(AlfAttribute& aAttribute)
-    {
-    const char* attrName = aAttribute.name();
-    const char* attrPair = layoutattributes::KPositionX;
-    bool isPositionXAttr = false;
-    if(!strcmp(attrName, layoutattributes::KPositionX))
-        {
-        attrPair = layoutattributes::KPositionY;
-        isPositionXAttr = true;
-        }
-    if (handleAttributePairs(aAttribute, attrPair))
-        {
-        CAlfVisual* main = mElement.findVisual(0);
-        if (main)
-            {
-            bool needsRelayouting = false;
-            TAlfRealPoint pos(main->Pos().Target());
-            
-            //for optimizing relayouting, which is expensive. Check, whether we need to do it.
-            if (isPositionXAttr)
-                {
-                //check against visual x position
-                needsRelayouting = (pos.iX != aAttribute.realValue());
-                }
-            else
-                {
-                needsRelayouting = (pos.iY != aAttribute.realValue());
-                }
-                
-            if (needsRelayouting)
-                {
-                main->UpdateChildrenLayout();
-                mControl.updateParentLayout();
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Handles the Size Attribute.
-// ---------------------------------------------------------------------------
-//
-void AlfElementAttributeOwnerImpl::handleSizeAttribute(AlfAttribute& aAttribute)
-    {
-    const char* attrName = aAttribute.name();
-    const char* attrPair = layoutattributes::KWidth;
-    bool isWidthAttr = false;
-    
-    if(!strcmp(attrName, layoutattributes::KWidth))
-        {
-        attrPair = layoutattributes::KHeight;
-        isWidthAttr = true;
-        }
-    if (handleAttributePairs(aAttribute, attrPair))
-        {
-        CAlfVisual* main = mElement.findVisual(0);
-        if (main)
-            {
-            bool needsRelayouting = false;
-            TAlfRealPoint size(main->Size().Target());
-            
-            //for optimizing relayouting, which is expensive. Check, whether we need to do it.
-            if (isWidthAttr)
-                {
-                needsRelayouting = (size.iX != aAttribute.realValue());
-                }
-            else
-                {
-                needsRelayouting = (size.iY != aAttribute.realValue());
-                }
-                
-            if (needsRelayouting)
-                {
-                main->UpdateChildrenLayout();
-                mControl.updateParentLayout();
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// Handles the Max Size Attribute.
-// ---------------------------------------------------------------------------
-//
-void AlfElementAttributeOwnerImpl::handleMaxSizeAttribute(AlfAttribute& aAttribute)
-    {
-    const char* attrName = aAttribute.name();
-    const char* attrPair = layoutattributes::KMaxWidth;
-    if(!strcmp(attrName, layoutattributes::KMaxWidth))
-        {
-        attrPair = layoutattributes::KMaxHeight;
-        }
-    handleAttributePairs(aAttribute, attrPair);
-    } 
-
-// ---------------------------------------------------------------------------
-// Handles the Min Size Attribute.
-// ---------------------------------------------------------------------------
-//    
-void AlfElementAttributeOwnerImpl::handleMinSizeAttribute(AlfAttribute& aAttribute)
-    {
-    const char* attrName = aAttribute.name();
-    const char* attrPair = layoutattributes::KMinWidth;
-    if(!strcmp(attrName, layoutattributes::KMinWidth))
-        {
-        attrPair = layoutattributes::KMinHeight;
-        }
-    handleAttributePairs(aAttribute, attrPair);
-    }
-    
-// ---------------------------------------------------------------------------
-// Handles setting of paired attributes: widget & height, xpos & ypos etc.
-// ---------------------------------------------------------------------------
-//    
-bool AlfElementAttributeOwnerImpl::handleAttributePairs(AlfAttribute& aAttribute, 
-    const char* aAttributeNamePair)
-    {
-    const char* attrName = aAttribute.name();
-    bool changed(false);
-    IAlfVisualTemplate* visualTemplate = mElement.getVisualTemplate();
-       
-    // Find the root layout
-    CAlfVisual* main = mElement.findVisual(0);
-    if(visualTemplate && main)
-        {
-        int setterCount = visualTemplate->numAttributeSetters();
-        bool found(false);
-        
-        //find the attribute in all the existing containers
-        for (int j = 0; j < setterCount; j++)
-            {
-            AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
-            AlfAttribute* attri = NULL;
-            try
-                {
-                attri = &(container.getAttributeByName(attrName));
-                }
-            catch(AlfDataException& exception)
-                {
-                // attribute not found in the container
-                // continue to find in other containers
-                continue;
-                }
-            // attribute found, update it
-            *attri = aAttribute;
-            found = true;
-            
-            //check, that attribute pair exists.
-            try
-                {
-                AlfAttribute& attr = 
-                    container.getAttributeByName(aAttributeNamePair);
-                }
-            catch(AlfDataException& exception)
-                {
-                //attribute pair not found in the same container, so break
-                break;
-                }
-                
-            // attribute pair found, so call setAttributeValue()
-            IAlfAttributeSetter& setter = visualTemplate->attributeSetter(j);                                
-            setter.setAttributeValue(*main, &container, 0);
-            changed = true;
-            break;
-            }
-            
-        // the attribute not found in any of the existing containers    
-        if(!found)
-            {
-            bool foundAttrPair(false);
-            
-            // again try to find the attribute pair
-            // this is for the situation where the attribute already exists
-            for (int j = 0; j < setterCount; j++)
-                {
-                AlfAttributeContainer& container = visualTemplate->attributeContainer(j);
-                  
-                try
-                    {
-                    AlfAttribute& attr = 
-                        container.getAttributeByName(aAttributeNamePair);
-                    }
-                catch(AlfDataException& exception)
-                    {
-                    // attribute not found,so continue
-                    continue;
-                    }
-                // attribute pair found, so add the attribute to the same container
-                // and call setAttributeValue()   
-                AlfAttribute* attribute = aAttribute.clone();
-                container.addAttribute(attribute);
-                IAlfAttributeSetter& setter = visualTemplate->attributeSetter(j);                                
-                setter.setAttributeValue(*main, &container, 0);
-                changed = true;
-                foundAttrPair = true;
-                break;
-                }
-                
-            // counter-part also does not exist, so create a new container and a attribute setter, add 
-            // the attribute to the container, and the container and attribute setter to the visual template
-            if(!foundAttrPair)
-                {
-                auto_ptr<AlfAttributeContainer> container(
-                    new (EMM) AlfAttributeContainer());
-                auto_ptr<AlfCommonVisualAttributeSetter> setter(
-                    new (EMM) AlfCommonVisualAttributeSetter());
-                AlfAttribute* attribute = aAttribute.clone();
-                container.get()->addAttribute(attribute);
-                visualTemplate->addAttributeSetter(setter.get(), 
-                    container.get());
-                container.release();
-                setter.release();                
-                }
-            }
-        }
-        return changed;
-    }     
-    
-    } // namespace Alf