diff -r 4ea6f81c838a -r 0e9bb658ef58 widgetmodel/alfwidgetmodel/src/alflctanchorlayoutattributesetter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgetmodel/alfwidgetmodel/src/alflctanchorlayoutattributesetter.cpp Wed Sep 01 12:23:18 2010 +0100 @@ -0,0 +1,281 @@ +/* +* 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: attributesetter for lct anchor layout. +* +*/ + + +//includes + +//widget model includes +#include "alf/alfattributecontainer.h" +#include "alf/alfattributevaluetype.h" +#include "alf/alfattribute.h" +#include "alf/alflctanchorlayoutattributesetter.h" +#include +#include + +//osn includes +#include + +//alf includes +#include +#include +#include + +//dui includes +#include "alf/attrproperty.h" +#include +//other includes +#include +#ifdef RD_ALF_IN_PLATFORM +#include +#endif + +#include "AlfLctAttributeSetterUtils.h" + +using osncore::UString; + +using namespace duiuimodel::layoutattributes::grid; + +using namespace duiuimodel::lctvisualattributes; + +using namespace duiuimodel::anchorlayoutinput; + +namespace Alf + { + +//variable inside ifdef to prevent compiler warning. +#ifdef ALF_DEBUG_EXCEPTIONS +static const char* const ClassName = "AlfLCTAnchorLayoutAttributeSetter"; +#endif + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +// +OSN_EXPORT AlfLCTAnchorLayoutAttributeSetter::AlfLCTAnchorLayoutAttributeSetter() + { + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +OSN_EXPORT AlfLCTAnchorLayoutAttributeSetter::~AlfLCTAnchorLayoutAttributeSetter() + { + } + +// --------------------------------------------------------------------------- +// Sets Attribute Value. Delegates based on attribute Category. +// --------------------------------------------------------------------------- +// +OSN_EXPORT void AlfLCTAnchorLayoutAttributeSetter::setAttributeValue( + CAlfVisual &aVisual, + AlfAttributeContainer* aContainer, + IAlfMap* aData ) + { + CAlfLCTAnchorLayout* anchorlayout = + dynamic_cast(&aVisual); + + if ( !anchorlayout ) + { + ALF_THROW(AlfVisualException, EInvalidVisual, ClassName) + } + + AlfAnchorLayoutAttributeSetter::setAttributeValue( + aVisual, aContainer, aData); + } + +// --------------------------------------------------------------------------- +// Deprecated +// --------------------------------------------------------------------------- +// +OSN_EXPORT TAlfCommand* AlfLCTAnchorLayoutAttributeSetter::createCommand( + CAlfVisual& /*aVisual*/, + AlfAttributeContainer* /*aContainer*/, IAlfMap* /*aData*/, + int /*aTransitionTime*/, CAlfVisual* /*aRefVisual*/ ) + { + //deprecated + TAlfCommand* cmd = 0; + return cmd; + } + +// --------------------------------------------------------------------------- +// Sends a command to Env +// --------------------------------------------------------------------------- +// +OSN_EXPORT void AlfLCTAnchorLayoutAttributeSetter::createAndSendCommands( + CAlfVisual& aVisual, + AlfAttributeContainer* aContainer, + CAlfVisual* aRefVisual ) + { + AlfAnchorLayoutAttributeSetter::createAndSendCommands( + aVisual, aContainer, aRefVisual); + } + +// --------------------------------------------------------------------------- +// Sets dynamic attributes to visual +// --------------------------------------------------------------------------- +// +void AlfLCTAnchorLayoutAttributeSetter::handleDynamicAttribute( + CAlfVisual& aVisual, + AlfAttribute& aAttr, + AlfAttributeContainer& aContainer) + { + const char* attrName = aAttr.name(); + +#ifdef RD_ALF_IN_PLATFORM + if ( !strcmp ( attrName, KLCT ) ) + { + TAknLayoutHierarchyComponentHandle componentHandle = + AlfLctAttributeSetterUtils::getCommonLctAttributes(&aContainer); + + int width(0); + int height(0); + if (AlfLctAttributeSetterUtils::itemSize(componentHandle, + width, height)) + { + TInt displayWidth = + aVisual.Env().PrimaryDisplay().VisibleArea().Width(); + if (width > displayWidth) + { + width = displayWidth; + } + + TAlfTimedPoint size(width, height); + aVisual.SetSize(size); + } + } + else +#endif + if (strcmp(attrName,KRows) && + strcmp(attrName,KColumns) && + strcmp(attrName,KChildOrdinal)) + { + AlfAnchorLayoutAttributeSetter::handleDynamicAttribute( + aVisual, aAttr, aContainer); + } + } + +// --------------------------------------------------------------------------- +// Sets static attributes to visual +// --------------------------------------------------------------------------- +// +void AlfLCTAnchorLayoutAttributeSetter::handleStaticAttribute( + CAlfVisual &aVisual, + AlfAttribute& aAttr, + AlfAttributeContainer& aContainer) + { + CAlfLCTAnchorLayout* anchorlayout = + dynamic_cast(&aVisual); + + const char* attrName = aAttr.name(); + +#ifdef RD_ALF_IN_PLATFORM + if ( !strcmp ( attrName, KLCT ) ) + { + TAknLayoutHierarchyComponentHandle componentHandle = + AlfLctAttributeSetterUtils::getCommonLctAttributes(&aContainer); + + int width(0); + int height(0); + if (AlfLctAttributeSetterUtils::itemSize(componentHandle, + width, height)) + { + // Some cases returns wrong width, so check that width is reasonable + TInt displayWidth = + aVisual.Env().PrimaryDisplay().VisibleArea().Width(); + if (width > displayWidth) + { + width = displayWidth; + } + TAlfTimedPoint size(width, height); + aVisual.SetSize(size); + } + } + else if ( !strcmp(attrName, KRows)|| + !strcmp (attrName,KColumns) || !strcmp(attrName,KChildOrdinal) ) + { + TAknLayoutHierarchyComponentHandle componentHandle = + AlfLctAttributeSetterUtils::getCommonLctAttributes(&aContainer); + AlfAttribute& attrRows = aContainer.getAttributeByName(KRows); + AlfAttribute& attrCols = aContainer.getAttributeByName(KColumns); + AlfAttribute& attrOrdinal = + aContainer.getAttributeByName(KChildOrdinal); + componentHandle.SetColumn(attrCols.realValue()); + componentHandle.SetRow(attrRows.realValue()); + TAlfTimedPoint timedpoint(attrCols.getSourceValue()->realValue(), + attrRows.getSourceValue()->realValue()); + + //since static, effect will be immediate + timedpoint.iX.SetTarget(attrCols.getTargetValue()->realValue(), 0); + timedpoint.iY.SetTarget(attrRows.getTargetValue()->realValue(), 0); + + timedpoint.iX.SetStyle(attrCols.getInterpolationStyle()); + timedpoint.iY.SetStyle(attrRows.getInterpolationStyle()); + + //TO ADD: Mapping Function Identifiers + anchorlayout->SetAnchors(attrOrdinal.intValue(), + componentHandle, timedpoint); + attrRows.setDirty(false); + attrCols.setDirty(false); + attrOrdinal.setDirty(false); + } + else +#endif + { + AlfAnchorLayoutAttributeSetter::handleStaticAttribute(aVisual, aAttr, + aContainer); + } + } + +// --------------------------------------------------------------------------- +// Sets dynamic attributes to visual from data +// --------------------------------------------------------------------------- +// +void AlfLCTAnchorLayoutAttributeSetter::handleDynamicDataAttribute( + CAlfVisual &aVisual, + AlfAttribute& aAttr, + AlfAttributeContainer& aContainer, + IAlfMap* aData ) + { + AlfAnchorLayoutAttributeSetter::handleDynamicDataAttribute(aVisual, aAttr, + aContainer, aData); + } + +// --------------------------------------------------------------------------- +// Sets static attributes to visual from data +// --------------------------------------------------------------------------- +// +void AlfLCTAnchorLayoutAttributeSetter::handleStaticDataAttribute( + CAlfVisual &aVisual, + AlfAttribute& aAttr, + AlfAttributeContainer& aContainer, + IAlfMap* aData ) + { + AlfAnchorLayoutAttributeSetter::handleStaticDataAttribute(aVisual, aAttr, + aContainer, aData); + } + + } // namespace Alf + +// End of file + + + + +