widgetmodel/alfwidgetmodel/src/alflctanchorlayoutattributesetter.cpp
branchRCL_3
changeset 26 0e9bb658ef58
parent 0 e83bab7cf002
--- /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 <alf/alfvisualexception.h>
+#include <alf/alfdataexception.h>
+
+//osn includes
+#include <osn/ustring.h>
+
+//alf includes
+#include <alf/alfenv.h>
+#include <alf/alfdisplay.h>
+#include <alf/alflctanchorlayout.h>
+
+//dui includes
+#include "alf/attrproperty.h"
+#include <alf/alftimedvalue.h>
+//other includes
+#include <libc/string.h>
+#ifdef RD_ALF_IN_PLATFORM
+#include <aknlayout2hierarchy.h>
+#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<CAlfLCTAnchorLayout*>(&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<CAlfLCTAnchorLayout*>(&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
+
+
+
+
+