diff -r 4526337fb576 -r 3eca7e70b1b8 widgetmodel/alfwidgetmodel/src/alfanchorlayoutattributesetter.cpp --- a/widgetmodel/alfwidgetmodel/src/alfanchorlayoutattributesetter.cpp Tue Feb 02 00:28:09 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,457 +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: Implements attributesetters for anchorlayout. -* -*/ - - - -//includes - -//widget model includes -#include "alf/alfattributecontainer.h" -#include "alf/alfattributevaluetype.h" -#include "alf/alfattribute.h" -#include "alf/alfanchorlayoutattributesetter.h" -#include -#include -#include - - -//osn includes -#include - -//alf includes -#include -#include -#include -#include -#include - -//dui includes -#include "alf/attrproperty.h" - -//other includes -#include -#include - - - -//namespaces - -using namespace osncore; - -using namespace duiuimodel::anchorlayoutinput; - -using namespace duiuimodel::layoutattributes; - -using namespace duiuimodel::anchor; - -using namespace duiuimodel::metric; - -namespace Alf - { - -bool isMultivalueDataAchment ( TAlfAnchorAttachmentOrigin val ) - { - return ( val == EAlfAnchorAttachmentOriginNone|| - val == EAlfAnchorAttachmentOriginTopLeft || - val == EAlfAnchorAttachmentOriginTopCenter || - val == EAlfAnchorAttachmentOriginTopRight || - val == EAlfAnchorAttachmentOriginCenterLeft || - val == EAlfAnchorAttachmentOriginCenter || - val == EAlfAnchorAttachmentOriginCenterRight || - val == EAlfAnchorAttachmentOriginBottomLeft || - val == EAlfAnchorAttachmentOriginBottomCenter || - val == EAlfAnchorAttachmentOriginBottomRight ); - } - -typedef void ( *pFunc ) ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData ); - -void addToAnchortypecont ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData ) - { - - if ( aData ) - { - IAlfVariantType* dataX = aData->item ( UString(aAttrib->getDataField() )); - - if ( dataX && dataX->type() == IAlfVariantType::EInt ) - { - aCont->addItem ( new ( EMM ) AlfVariantType ( dataX->integer() ) ); - } - } - else - { - aCont->addItem ( new ( EMM ) AlfVariantType ( aAttrib->intValue() ) ); - } - - } - -void addToAttachmentcont ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData ) - { - - if ( aData ) - { - IAlfVariantType* dataX = aData->item ( UString(aAttrib->getDataField())); - - if ( dataX && dataX->type() == IAlfVariantType::EInt ) - { - aCont->addItem ( new ( EMM ) AlfVariantType ( dataX->integer() ) ); - } - } - else - { - aCont->addItem ( new ( EMM ) AlfVariantType ( aAttrib->intValue() ) ); - } - } - -void addToMagnitudecont ( AlfContainer* aCont, AlfAttribute* aAttrib, IAlfMap* aData ) - { - - if ( aData ) - { - IAlfVariantType* dataX = aData->item ( UString(aAttrib->getDataField()) ); - - if ( dataX != NULL && dataX->type() == IAlfVariantType::EMap ) - { - IAlfVariantType* valueX = dataX->map()->item ( UString("value")); - IAlfVariantType* unitX = dataX->map()->item ( UString("unit")); - auto_ptr value ( new ( EMM ) AlfContainer() ); - auto_ptr vtype1(new ( EMM ) AlfVariantType ( valueX->real() )); - value->addItem ( vtype1.get() ); - vtype1.release(); - auto_ptr vtype2(new ( EMM ) AlfVariantType ( unitX->integer() )); - value->addItem ( vtype2.get() ); - vtype2.release(); - aCont->addItem ( value.release() ); - - } - else if ( dataX != NULL && dataX->type() == IAlfVariantType::EReal ) - { - auto_ptr value ( new ( EMM ) AlfContainer() ); - auto_ptr vtype1(new ( EMM ) AlfVariantType ( dataX->real() )); - value->addItem ( vtype1.get() ); - vtype1.release(); - auto_ptr vtype2( new ( EMM ) AlfVariantType ( aAttrib->unit() ) ); - - value->addItem (vtype2.get()); - vtype2.release(); - aCont->addItem ( value.release() ); - } - } - else - { - auto_ptr value ( new ( EMM ) AlfContainer() ); - auto_ptr vtype1( new ( EMM ) AlfVariantType ( aAttrib->realValue() ) ); - value->addItem (vtype1.get()); - vtype1.release(); - auto_ptr vtype2( new ( EMM ) AlfVariantType ( aAttrib->unit() ) ); - - value->addItem (vtype2.get()); - vtype2.release(); - aCont->addItem ( value.release() ); - - } - - } - -void addToTextstylecont ( AlfContainer* /*aCont*/, AlfAttribute* /*aAttrib*/, IAlfMap* /*aData*/ ) - { - } - -struct anchormap - { - const char* name; - pFunc addToContainer; - AlfContainer* pData; - }; - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Constructor. -// --------------------------------------------------------------------------- -// -OSN_EXPORT AlfAnchorLayoutAttributeSetter::AlfAnchorLayoutAttributeSetter() - { - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -OSN_EXPORT AlfAnchorLayoutAttributeSetter::~AlfAnchorLayoutAttributeSetter() - { - } - -// --------------------------------------------------------------------------- -// Sets Attribute Value. Delegates based on attribute Category. -// --------------------------------------------------------------------------- -// -OSN_EXPORT void AlfAnchorLayoutAttributeSetter::setAttributeValue ( - CAlfVisual &aVisual, - AlfAttributeContainer* aContainer, - IAlfMap* aData ) - { - - CAlfAnchorLayout* layout = dynamic_cast ( &aVisual ); - - if ( !layout ) - { - ALF_THROW ( AlfVisualException, EInvalidVisual, - "AlfAnchorLayoutAttributeSetter" ) - } - - AlfCommonLayoutAttributeSetter::setAttributeValue(aVisual, - aContainer, aData); - } - - -// --------------------------------------------------------------------------- -// Deprecated -// --------------------------------------------------------------------------- -// -OSN_EXPORT TAlfCommand* AlfAnchorLayoutAttributeSetter::createCommand ( CAlfVisual& /*aVisual*/, - AlfAttributeContainer* /*aContainer*/, IAlfMap* /*aData*/, - int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/ ) - { - //deprecated - TAlfCommand* cmd = NULL; - return cmd; - } - -// --------------------------------------------------------------------------- -// Sends a command to Env -// --------------------------------------------------------------------------- -// -OSN_EXPORT void AlfAnchorLayoutAttributeSetter::createAndSendCommands ( - CAlfVisual& aVisual, - AlfAttributeContainer* aContainer, - CAlfVisual* aRefVisual ) - { - //no animatable attributes in grid layout. - AlfCommonLayoutAttributeSetter::createAndSendCommands ( aVisual, aContainer, aRefVisual ); - } - -// --------------------------------------------------------------------------- -// Sets dynamic attributes to visual -// --------------------------------------------------------------------------- -// -void AlfAnchorLayoutAttributeSetter::handleDynamicAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer ) - { - //no dynamic attributes in anchor layout. - AlfCommonLayoutAttributeSetter::handleDynamicAttribute(aVisual, aAttr, aContainer); - } - -// --------------------------------------------------------------------------- -// Sets static attributes to visual -// --------------------------------------------------------------------------- -// -void AlfAnchorLayoutAttributeSetter::handleStaticAttribute ( - CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer ) - { - if (!doHandleStaticAttribute(aVisual, aAttr, aContainer, NULL)) - { - AlfCommonLayoutAttributeSetter::handleStaticAttribute(aVisual, aAttr, aContainer); - } - } - -// --------------------------------------------------------------------------- -// Sets static attributes to visual -// --------------------------------------------------------------------------- -// -bool AlfAnchorLayoutAttributeSetter::doHandleStaticAttribute( CAlfVisual &aVisual, - AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData ) - { - bool handled = true; - const char* attrName = aAttr.name(); - CAlfAnchorLayout* layout = dynamic_cast ( &aVisual ); - if(!layout) - { - return false; - } - - if ( !strcmp ( attrName, KChildOrdinal )||!strcmp ( attrName, KAttachmentOrdinal ) - || !strcmp ( attrName, KAnchorType )||!strcmp ( attrName, KAttachmentOrigin ) - ||!strcmp ( attrName, KMagnitude )||!strcmp ( attrName, KTextStyleId ) ) - { - AlfAttribute& attachmentordinal = aContainer.getAttributeByName ( KAttachmentOrdinal ); - AlfAttribute& aAttrChildOrdinal = aContainer.getAttributeByName ( KChildOrdinal ); - float ordianal=0; - float attachordinalval=-1; - if(aData) - { - IAlfVariantType* data = aData->item ( UString(aAttrChildOrdinal.getDataField()) ); - - if ( data && data->type() == IAlfVariantType::EReal ) - { - ordianal=data->real(); - } - data = aData->item ( UString(attachmentordinal.getDataField()) ); - if ( data && data->type() == IAlfVariantType::EReal ) - { - attachordinalval=data->real(); - } - } - else - { - ordianal=aAttrChildOrdinal.realValue(); - attachordinalval=attachmentordinal.realValue(); - } - auto_ptr anchortypecont ( new ( EMM ) AlfContainer() ); - auto_ptr attachmentorigincont ( new ( EMM ) AlfContainer() ); - auto_ptr magnitudecont ( new ( EMM ) AlfContainer() ); - auto_ptr textstyleidcont ( new ( EMM ) AlfContainer() ); - - anchormap maptable[] = - { - {KAnchorType, addToAnchortypecont, NULL}, - {KAttachmentOrigin, addToAttachmentcont, NULL}, - {KMagnitude, addToMagnitudecont, NULL}, - {KTextStyleId, addToTextstylecont, NULL} - }; - unsigned int tableCount = sizeof ( maptable ) / sizeof ( anchormap ); - maptable[0].pData = anchortypecont.get(); - maptable[1].pData = attachmentorigincont.get(); - maptable[2].pData = magnitudecont.get(); - maptable[3].pData = textstyleidcont.get(); - - unsigned int attrCount = aContainer.attributeCount(); - - for ( int i = 0;i < attrCount;i++ ) - { - for ( int j = 0;j < tableCount;j++ ) - { - if ( !strcmp ( maptable[j].name, aContainer.getAttribute ( i ).name() ) ) - { - maptable[j].addToContainer ( maptable[j].pData, &aContainer.getAttribute ( i ), aData ); - aContainer.getAttribute ( i ).setDirty(false); - } - } - } - - unsigned int totalApitocall = attachmentorigincont->count(); - - unsigned int magnitudeindex = 0; - - for ( int counter = 0;counter < totalApitocall;counter++ ) - { - IAlfVariantType* Origin = attachmentorigincont->item ( counter ); - TAlfAnchorAttachmentOrigin value = static_cast ( Origin->integer() ); - - if ( isMultivalueDataAchment ( value ) ) - { - IAlfVariantType* aType = anchortypecont->item ( counter ); - TAlfAnchorType type = static_cast ( aType->integer() ); - - if ( type == EAlfAnchorTypeNone ) - { - IAlfContainer* magCont1 = static_cast ( magnitudecont->item ( magnitudeindex ) ); - IAlfContainer* magCont2 = static_cast ( magnitudecont->item ( magnitudeindex + 1 ) ); - IAlfContainer* magCont3 = static_cast ( magnitudecont->item ( magnitudeindex + 2 ) ); - IAlfContainer* magCont4 = static_cast ( magnitudecont->item ( magnitudeindex + 3 ) ); - - TAlfMetric metric1 ( magCont1->item ( 0 )->real(), magCont1->item ( 1 )->integer() ); - TAlfMetric metric2 ( magCont2->item ( 0 )->real(), magCont2->item ( 1 )->integer() ); - TAlfMetric metric3 ( magCont3->item ( 0 )->real(), magCont3->item ( 1 )->integer() ); - TAlfMetric metric4 ( magCont4->item ( 0 )->real(), magCont4->item ( 1 )->integer() ); - TAlfBoxMetric boxmetric ( metric1, metric2, metric3, metric4 ); - int err=layout->Attach ( ordianal, boxmetric, value, attachordinalval ); - if(err!=KErrNone) - { - ALF_THROW ( AlfVisualException, err, "Anchor Attach Failed" ) - } - magnitudeindex += 4; - } - else - { - IAlfContainer* magCont1 = static_cast ( magnitudecont->item ( magnitudeindex ) ); - IAlfContainer* magCont2 = static_cast ( magnitudecont->item ( magnitudeindex + 1 ) ); - - TAlfMetric metric1 ( magCont1->item ( 0 )->real(), magCont1->item ( 1 )->integer() ); - TAlfMetric metric2 ( magCont2->item ( 0 )->real(), magCont2->item ( 1 )->integer() ); - - - - TAlfXYMetric xymetric ( metric1, metric2 ); - - int err=layout->Attach ( ordianal, type, xymetric, value, attachordinalval ); - if(err!=KErrNone) - { - ALF_THROW ( AlfVisualException, err, "Anchor Attach Failed" ) - } - - magnitudeindex += 2; - } - } - else - { - IAlfVariantType* typeVar = anchortypecont->item ( counter ); - TAlfAnchorType type = static_cast ( typeVar->integer() ); - IAlfContainer* magCont1 = static_cast ( magnitudecont->item ( magnitudeindex ) ); - - TAlfMetric metric ( magCont1->item ( 0 )->real(), magCont1->item ( 1 )->integer() ); - - - int err=layout->Attach ( ordianal, type, metric, value, attachordinalval ); - if(err!=KErrNone) - { - ALF_THROW ( AlfVisualException, err, "Anchor Attach Failed" ) - } - - magnitudeindex++; - } - } - - attachmentordinal.setDirty(false); - aAttrChildOrdinal.setDirty(false); - } - else - { - handled = false; - } - - return handled; - } - - -// --------------------------------------------------------------------------- -// Sets dynamic attributes to visual from data -// --------------------------------------------------------------------------- -// -void AlfAnchorLayoutAttributeSetter::handleDynamicDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData ) - { - AlfCommonLayoutAttributeSetter::handleDynamicDataAttribute ( aVisual, aAttr, aContainer, aData ); - } - -// --------------------------------------------------------------------------- -// Sets static attributes to visual from data -// --------------------------------------------------------------------------- -// -void AlfAnchorLayoutAttributeSetter::handleStaticDataAttribute ( CAlfVisual &aVisual, AlfAttribute& aAttr, AlfAttributeContainer& aContainer, IAlfMap* aData ) - { - if (!doHandleStaticAttribute(aVisual, aAttr, aContainer, aData)) - { - AlfCommonLayoutAttributeSetter::handleStaticDataAttribute(aVisual, aAttr, aContainer, aData); - } - } - - } // namespace Alf - -// End of file - - - - -