diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/ServerCore/Src/alflayouthandlers.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/ServerCore/Src/alflayouthandlers.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,1350 @@ +/* +* Copyright (c) 2006 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: definitions of alf built-in visual support +* +*/ + + + +#include "alf/alfvisualhandlers.h" +#include "alf/alflayouthandlers.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "alf/alfconstants.h" +#include "alf/alfserverutils.h" +#include "alfmappingfunctionhandlers.h" + +#include + +//---------------------------- +// Layout base +//---------------------------- +EXPORT_C MAlfExtension* CAlfLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfVisualHandler* me = new (ELeave) CAlfLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + +EXPORT_C CAlfLayoutHandler::CAlfLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfVisualHandler(aResolver) + { + } + +EXPORT_C void CAlfLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiLayout* layout = CHuiLayout::AddNewL(aOwner, aParentLayout); + CAlfVisualHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfVisualHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + +EXPORT_C CAlfLayoutHandler::~CAlfLayoutHandler() + { + } + +EXPORT_C void CAlfLayoutHandler::Release() + { + delete this; + } + + +EXPORT_C TAny* CAlfLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + switch (aInterface) + { + case EHuiObjectTypeLayout: + return static_cast(iVisual); + default: + return CAlfVisualHandler::GetInterface(aInterface); + + } + } + + +EXPORT_C void CAlfLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + CHuiLayout* layout = static_cast(iVisual); + + switch (aCommandId) + { + case EAlfLayoutAppendVisual: + { + // 1 - visual ID 2 - transition time + TInt2* params = (TInt2*) aInputBuffer.Ptr(); + CHuiVisual* visual = (CHuiVisual*)iResolver.GetInterfaceL(EHuiObjectTypeVisual, params->iInt1); + if (layout->FindVisual(visual) == KErrNotFound) + { + layout->AppendL(visual, params->iInt2); + } + else + { + User::Leave(KErrAlreadyExists); + } + break; + } + + case EAlfLayoutRemoveVisual: + { + // 1 - visual ID 2 - transition time + TInt2* params = (TInt2*) aInputBuffer.Ptr(); + CHuiVisual* visual = NULL; + TRAPD( err, visual = (CHuiVisual*)iResolver.GetInterfaceL(EHuiObjectTypeVisual, params->iInt1) ); + if ( err != KErrNone ) + { + // Visual has been deleted already + return; + } + layout->Remove(visual, params->iInt2); + + // todo: we should do the following, but it panic if this is called in RemoveAndDestroyAlld() loop + /* + // if visual is showing, we should add it under the host container + CHuiControlGroup* childGroup = visual->Owner().ControlGroup(); + if ( childGroup && visual->Display() ) + { + // must be a control + CHuiControl* control = static_cast(&visual->Owner()); + if ( control->Host() ) // showing if host if host is defined. + { + CHuiLayout* containerLayout = control->Host()->ContainerLayout( control ); + __ASSERT_DEBUG( containerLayout, USER_INVARIANT() ); + if ( containerLayout ) + { + // Should we InsertL instead, so we would have the original + // root visual order? + containerLayout->AppendL( visual ); + } + } + }*/ + break; + } + + case EAlfLayoutReorderVisual: + { + // 1 - visual ID 2 - position 3 - transition time + TInt3* params = (TInt3*) aInputBuffer.Ptr(); + CHuiVisual* visual = (CHuiVisual*)iResolver.GetInterfaceL(EHuiObjectTypeVisual, params->iInt1); + layout->Reorder(*visual, params->iInt2, params->iInt3); + break; + } + + case EAlfLayoutVisualFromIndex: + { + TInt* index = (TInt*) aInputBuffer.Ptr(); + CHuiVisual& visual = layout->Visual(*index); + // todo: can handle be negative ? + TInt handle = iResolver.GetHandleFromInterface(EHuiObjectTypeVisual, &visual); + //User::LeaveIfError(handle); + + TPckg pckg(handle); + aResponse = pckg; + + break; + } + + case EAlfLayoutEnableScrolling: + { + TBool* enable = (TBool*) aInputBuffer.Ptr(); + layout->EnableScrollingL(*enable); + break; + } + + case EAlfLayoutScrollOffset: + { + TAlfTimedPoint point; + AlfTimedPointUtility::CopyTimedPoint(layout->ScrollOffset(), point); + + TPckg buf(point); + aResponse = buf; + break; + } + + case EAlfLayoutSetScrollOffset: + { + TAlfTimedPoint* offset = (TAlfTimedPoint*) aInputBuffer.Ptr(); + AlfTimedPointUtility::CopyTimedPoint(*offset, layout->ScrollOffset(), iResolver); + break; + } + + case EAlfLayoutChildOrdinal: + { // client should know this as well + const TInt* index = (TInt*) aInputBuffer.Ptr(); + TInt ordinal(0); + TPckg ordinalPckg(ordinal); + ordinal = layout->ChildOrdinal(*index); + aResponse = ordinalPckg; + break; + } + + case EAlfLayoutChildPos: + { + TAlfPosInt* pos = (TAlfPosInt*) aInputBuffer.Ptr(); + TAlfPosInt result = + { + pos->iPoint, + EFalse + }; + TPckg resp(result); + result.iInt = layout->ChildPos(pos->iInt, result.iPoint); + aResponse = resp; + break; + } + + case EAlfLayoutChildSize: + { + TAlfSizeInt* size = (TAlfSizeInt*) aInputBuffer.Ptr(); + TAlfSizeInt result = + { + size->iSize, + EFalse + }; + TPckg resp(result); + result.iInt = layout->ChildSize(size->iInt, result.iSize); + aResponse = resp; + break; + } + case EAlfLayoutSetTransitionTime: + { + TInt* ttime = (TInt*) aInputBuffer.Ptr(); + layout->SetTransitionTime(*ttime); + break; + } + + case EAlfLayoutSetInnerPaddingPoint: + { + TPoint* padding = (TPoint*) aInputBuffer.Ptr(); + layout->SetInnerPadding(*padding); + break; + } + + case EAlfLayoutSetInnerPaddingMetric: + { + TAlfXYMetric* metric = (TAlfXYMetric*) aInputBuffer.Ptr(); + THuiMetric newMetricX(metric->iX.iMagnitude, metric->iX.iUnit, metric->iX.iReferenceTextStyleId); + THuiMetric newMetricY(metric->iY.iMagnitude, metric->iY.iUnit, metric->iY.iReferenceTextStyleId); + THuiXYMetric newMetric(newMetricX, newMetricY); + layout->SetInnerPadding(newMetric); + break; + } + + case EAlfLayoutInnerPaddingInBaseUnits: + { + THuiRealPoint point = layout->InnerPaddingInBaseUnits(); + TAlfRealPoint result(point.iX, point.iY); + TPckg resp(result); + aResponse = resp; + break; + } + + case EAlfLayoutVirtualSize: + { + TSize virtualSize = layout->VirtualSize(); + TPckg pckg(virtualSize); + aResponse = pckg; + break; + } + + case EAlfLayoutSetBaseUnit: + { + TAlfMetric* metric = (TAlfMetric*) aInputBuffer.Ptr(); + THuiMetric newMetric(metric->iMagnitude, metric->iUnit, metric->iReferenceTextStyleId); + layout->SetBaseUnit(newMetric); + break; + } + + case EAlfLayoutSetBaseUnitXY: + { + TAlfXYMetric* metric = (TAlfXYMetric*) aInputBuffer.Ptr(); + THuiMetric newMetricX(metric->iX.iMagnitude, metric->iX.iUnit, metric->iX.iReferenceTextStyleId); + THuiMetric newMetricY(metric->iY.iMagnitude, metric->iY.iUnit, metric->iY.iReferenceTextStyleId); + THuiXYMetric newMetric(newMetricX, newMetricY); + layout->SetBaseUnit(newMetric); + break; + } + + case EAlfLayoutBaseUnit: + { + THuiXYMetric metric = layout->BaseUnit(); + TAlfMetric newMetricX(metric.iX.iMagnitude, metric.iX.iUnit, metric.iX.iReferenceTextStyleId); + TAlfMetric newMetricY(metric.iY.iMagnitude, metric.iY.iUnit, metric.iY.iReferenceTextStyleId); + TAlfXYMetric newMetric(newMetricX, newMetricY); + TPckg resp(newMetric); + aResponse = resp; + break; + } + + case EAlfVisualCopyValuesFromOtherVisual: + case EAlfVisualPauseProperties: + case EAlfVisualResumeProperties: + { + if (aCommandId == EAlfVisualCopyValuesFromOtherVisual) + { + TInt3* inptr = (TInt3*) aInputBuffer.Ptr(); + CHuiLayout* sourceLayout = (CHuiLayout*) iResolver.GetInterfaceL( EHuiObjectTypeLayout, inptr->iInt1 ); + if (inptr->iInt2&AlfVisualProperties::ELayoutScrollOffset) + { + layout->ScrollOffset().Set(sourceLayout->ScrollOffset().Target(), inptr->iInt3 ); + } + } + else if (aCommandId == EAlfVisualPauseProperties) + { + TInt* inptr = (TInt*) aInputBuffer.Ptr(); + if (*inptr&AlfVisualProperties::ELayoutScrollOffset) + { + layout->ScrollOffset().iX.Suspend(); + layout->ScrollOffset().iY.Suspend(); + } + } + else // EAlfVisualResumeProperties) + { + TInt* inptr = (TInt*) aInputBuffer.Ptr(); + if (*inptr&AlfVisualProperties::ELayoutScrollOffset) + { + layout->ScrollOffset().iX.Suspend(EFalse); + layout->ScrollOffset().iY.Suspend(EFalse); + } + } + + } // FALL THROUGH !! + + default: + CAlfVisualHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + + } + +EXPORT_C void CAlfLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfVisualHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + +//---------------------------- +// anchor layout +//---------------------------- +EXPORT_C MAlfExtension* CAlfAnchorLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfAnchorLayoutHandler* me = new (ELeave) CAlfAnchorLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + + +EXPORT_C CAlfAnchorLayoutHandler::CAlfAnchorLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfLayoutHandler(aResolver) + { + } + + +EXPORT_C void CAlfAnchorLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiAnchorLayout* layout = CHuiAnchorLayout::AddNewL(aOwner, aParentLayout); + CAlfLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + + +EXPORT_C CAlfAnchorLayoutHandler::~CAlfAnchorLayoutHandler() + { + } + +EXPORT_C void CAlfAnchorLayoutHandler::Release() + { + delete this; + } + + +EXPORT_C TAny* CAlfAnchorLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + return CAlfLayoutHandler::GetInterface(aInterface); + } + + +EXPORT_C void CAlfAnchorLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + CHuiAnchorLayout* anchorLayout = static_cast(iVisual); + switch (aCommandId) + { + case EAlfAnchorLayoutReset: + { + anchorLayout->Reset(); + break; + } + + case EAlfAnchorLayoutSetAnchor: + { + TAlfLayoutSetAnchorParams* params = (TAlfLayoutSetAnchorParams*) aInputBuffer.Ptr(); + + THuiTimedPoint tpoint; + AlfTimedPointUtility::CopyTimedPoint(params->iOffset, tpoint, iResolver); + + // Set anchor + TInt error = anchorLayout->SetAnchor( + THuiAnchor(params->iAnchor), + params->iOrdinal, + THuiAnchorOrigin(params->iHorizOrigin), + THuiAnchorOrigin(params->iVertOrigin), + THuiAnchorMetric(params->iHorizMetric), + THuiAnchorMetric(params->iVertMetric), + tpoint + ); + + User::LeaveIfError( error ); + + break; + } + + case EAlfAnchorLayoutSetRelativeAnchorRect: + { + TAlfLayoutSetRelativeAnchorRectParams* params = (TAlfLayoutSetRelativeAnchorRectParams*) aInputBuffer.Ptr(); + + TInt error = anchorLayout->SetRelativeAnchorRect + ( + params->iOrdinal, + THuiAnchorOrigin(params->iTlHorizOrigin), + THuiAnchorOrigin(params->iTlVertOrigin), + THuiRealPoint(params->iTopLeftOffset.iX, params->iTopLeftOffset.iY), + THuiAnchorOrigin(params->iBrHorizOrigin), + THuiAnchorOrigin(params->iBrVertOrigin), + THuiRealPoint(params->iBottomRightOffset.iX, params->iBottomRightOffset.iY) + ); + + User::LeaveIfError( error ); + break; + } + + case EAlfAnchorLayoutRemoveAnchor: + { + TInt2* params = (TInt2*) aInputBuffer.Ptr(); + anchorLayout->RemoveAnchor( (THuiAnchor)params->iInt1, params->iInt2 ); + break; + } + + case EAlfAnchorLayoutAttachEdge: + { + TAlfLayoutAttachEdgeParams* params = (TAlfLayoutAttachEdgeParams*) aInputBuffer.Ptr(); + THuiMetric metric(params->iOffset.iMagnitude, params->iOffset.iUnit, params->iOffset.iReferenceTextStyleId); + + TInt error = anchorLayout->Attach( + params->iOrdinal, + THuiAnchorType(params->iType), + metric, + THuiAnchorAttachmentOrigin(params->iAttachmentOrigin), + params->iAttachmentOrdinal); + + User::LeaveIfError( error ); + + break; + } + + case EAlfAnchorLayoutAttachCorner: + { + TAlfLayoutAttachCornerParams* params = (TAlfLayoutAttachCornerParams*) aInputBuffer.Ptr(); + + THuiMetric metricX(params->iOffset.iX.iMagnitude, params->iOffset.iX.iUnit, params->iOffset.iX.iReferenceTextStyleId); + THuiMetric metricY(params->iOffset.iY.iMagnitude, params->iOffset.iY.iUnit, params->iOffset.iY.iReferenceTextStyleId); + + THuiXYMetric metric(metricX, metricY); + + TInt error = anchorLayout->Attach( + params->iOrdinal, + THuiAnchorType(params->iType), + metric, + THuiAnchorAttachmentOrigin(params->iAttachmentOrigin), + params->iAttachmentOrdinal); + + User::LeaveIfError( error ); + + break; + } + + case EAlfAnchorLayoutAttachBox: + { + TAlfLayoutAttachBoxParams* params = (TAlfLayoutAttachBoxParams*) aInputBuffer.Ptr(); + + THuiMetric metricLeft(params->iOffset.iLeft.iMagnitude, params->iOffset.iLeft.iUnit, params->iOffset.iLeft.iReferenceTextStyleId); + THuiMetric metricRight(params->iOffset.iRight.iMagnitude, params->iOffset.iRight.iUnit, params->iOffset.iRight.iReferenceTextStyleId); + THuiMetric metricTop(params->iOffset.iTop.iMagnitude, params->iOffset.iTop.iUnit, params->iOffset.iTop.iReferenceTextStyleId); + THuiMetric metricBottom(params->iOffset.iBottom.iMagnitude, params->iOffset.iBottom.iUnit, params->iOffset.iBottom.iReferenceTextStyleId); + + THuiBoxMetric metric(metricLeft, metricRight, metricTop, metricBottom); + + TInt error = anchorLayout->Attach( + params->iOrdinal, + metric, + THuiAnchorAttachmentOrigin(params->iAttachmentOrigin), + params->iAttachmentOrdinal); + + User::LeaveIfError( error ); + + break; + } + + case EAlfAnchorLayoutDetachAll: + { + TInt* params = (TInt*) aInputBuffer.Ptr(); + anchorLayout->Detach(*params); + break; + } + + case EAlfAnchorLayoutDetach: + { + TInt2* params = (TInt2*) aInputBuffer.Ptr(); + anchorLayout->Detach( params->iInt1, (THuiAnchorType)params->iInt2 ); + break; + } + + default: + CAlfLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + } + +EXPORT_C void CAlfAnchorLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + + + +//---------------------------- +// LCT Pane layout +//---------------------------- +EXPORT_C MAlfExtension* CAlfLCTAnchorLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfLCTAnchorLayoutHandler* me = new (ELeave) CAlfLCTAnchorLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + + +EXPORT_C CAlfLCTAnchorLayoutHandler::CAlfLCTAnchorLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfAnchorLayoutHandler(aResolver) + { + } + + +EXPORT_C void CAlfLCTAnchorLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiAnchorLayout* layout = CHuiAnchorLayout::AddNewL(aOwner, aParentLayout); + CAlfLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + + +EXPORT_C CAlfLCTAnchorLayoutHandler::~CAlfLCTAnchorLayoutHandler() + { + } + +EXPORT_C void CAlfLCTAnchorLayoutHandler::Release() + { + delete this; + } + + +EXPORT_C TAny* CAlfLCTAnchorLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + return CAlfLayoutHandler::GetInterface(aInterface); + } + + +EXPORT_C void CAlfLCTAnchorLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + switch (aCommandId) + { + case EAlfLCTAnchorLayoutSetAnchors: + { +#ifdef RD_ALF_IN_PLATFORM + CHuiAnchorLayout* anchorLayout = static_cast(iVisual); + TAlfLCTAnchorSetAnchorsParams* params = (TAlfLCTAnchorSetAnchorsParams*)aInputBuffer.Ptr(); + + TAknLayoutHierarchyComponentHandle handle; + handle.SetApiId(params->iApiId); + handle.SetComponentId(params->iComponentId); + handle.SetVarietyIndex(params->iVarietyIndex); + handle.SetColumn(params->iColumn); + handle.SetRow(params->iRow); + + THuiTimedPoint tpoint; + AlfTimedPointUtility::CopyTimedPoint(params->iOffset, tpoint, iResolver); + + // we can access the layout data as a window line, whatever type component is specified. + TAknWindowLineLayout componentLayout = AknLayout2Hierarchy::GetWindowComponentLayout(handle).LayoutLineNoEmptys(); + SetAnchors(anchorLayout, params->iOrdinal, componentLayout, tpoint); +#endif + + break; + } + + default: + CAlfAnchorLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + } + +EXPORT_C void CAlfLCTAnchorLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfAnchorLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + +#ifdef RD_ALF_IN_PLATFORM + TBool CAlfLCTAnchorLayoutHandler::IsParentRelative(TInt aVal) const + { + return aVal > ELayoutP-ELayoutPRange && aVal <= ELayoutP; + } +#else //RD_ALF_IN_PLATFORM + TBool CAlfLCTAnchorLayoutHandler::IsParentRelative(TInt /*aVal*/) const + { + return EFalse; + } +#endif // RD_ALF_IN_PLATFORM + +#ifdef RD_ALF_IN_PLATFORM +void CAlfLCTAnchorLayoutHandler::SetAnchors(CHuiAnchorLayout* aAnchor, TInt aOrdinal, const TAknWindowLineLayout& aLine, const THuiTimedPoint& aTimedPoint) + { + DoSetAnchors(aAnchor, aOrdinal, aLine.il, aLine.it, aLine.ir, aLine.ib, aTimedPoint); + } +#else //RD_ALF_IN_PLATFORM +void CAlfLCTAnchorLayoutHandler::SetAnchors(CHuiAnchorLayout* /*aAnchor*/, TInt /*aOrdinal*/, const TAknWindowLineLayout& /*aLine*/, const THuiTimedPoint& /*aTimedPoint*/) + { + } +#endif // RD_ALF_IN_PLATFORM + +#ifdef RD_ALF_IN_PLATFORM +void CAlfLCTAnchorLayoutHandler::DoSetAnchors(CHuiAnchorLayout* aLayout, TInt aOrdinal, TInt aLeft, TInt aTop, TInt aRight, TInt aBottom, const THuiTimedPoint& aTimedPoint) + { + TInt left = aLeft; + TInt top = aTop; + TInt right = aRight; + TInt bottom = aBottom; + THuiAnchorOrigin originLeft = EHuiAnchorOriginLeft; + THuiAnchorOrigin originTop = EHuiAnchorOriginTop; + THuiAnchorOrigin originRight = EHuiAnchorOriginRight; + THuiAnchorOrigin originBottom = EHuiAnchorOriginBottom; + + // when measuring from the opposite anchor, have to change sign + if(IsParentRelative(left)) + { + left = -(ELayoutP - left); + originLeft = EHuiAnchorOriginRight; + } + if(IsParentRelative(top)) + { + top = -(ELayoutP - top); + originTop = EHuiAnchorOriginBottom; + } + if(IsParentRelative(right)) + { + right = -(ELayoutP - right); + originRight = EHuiAnchorOriginLeft; + } + if(IsParentRelative(bottom)) + { + bottom = -(ELayoutP - bottom); + originBottom = EHuiAnchorOriginTop; + } + THuiTimedPoint point(aTimedPoint); + + point.iX = left; + point.iY = top; + aLayout->SetAnchor( + EHuiAnchorTopLeft, aOrdinal, + originLeft, originTop, + EHuiAnchorMetricAbsolute, EHuiAnchorMetricAbsolute, + point); + + // right and bottom anchors are still measured in positive x and y + point.iX = -right; + point.iY = -bottom; + aLayout->SetAnchor( + EHuiAnchorBottomRight, aOrdinal, + originRight, originBottom, + EHuiAnchorMetricAbsolute, EHuiAnchorMetricAbsolute, + point); + } +#else // RD_ALF_IN_PLATFORM +void CAlfLCTAnchorLayoutHandler::DoSetAnchors(CHuiAnchorLayout* /*aLayout*/, TInt /*aOrdinal*/, TInt /*aLeft*/, TInt /*aTop*/, TInt /*aRight*/, TInt /*aBottom*/, const THuiTimedPoint& /*aTimedPoint*/) + { + } +#endif // RD_ALF_IN_PLATFORM + + + +//---------------------------- +// grid layout +//---------------------------- +EXPORT_C MAlfExtension* CAlfGridLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfGridLayoutHandler* me = new (ELeave) CAlfGridLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + + +EXPORT_C CAlfGridLayoutHandler::CAlfGridLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfLayoutHandler(aResolver) + { + } + + +EXPORT_C void CAlfGridLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiGridLayout* layout = CHuiGridLayout::AddNewL(aOwner, 0,0, aParentLayout); + CAlfLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + + +EXPORT_C CAlfGridLayoutHandler::~CAlfGridLayoutHandler() + { + } + + +EXPORT_C void CAlfGridLayoutHandler::Release() + { + delete this; + } + + +EXPORT_C TAny* CAlfGridLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + return CAlfLayoutHandler::GetInterface(aInterface); + } + + +EXPORT_C void CAlfGridLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + CHuiGridLayout* gridLayout = static_cast(iVisual); + switch (aCommandId) + { + case EAlfGridLayoutSetColumns: + { + TInt* count = (TInt*) aInputBuffer.Ptr(); + gridLayout->SetColumnsL(*count); + break; + } + + case EAlfGridLayoutSetRows: + { + TInt* count = (TInt*) aInputBuffer.Ptr(); + gridLayout->SetRowsL(*count); + break; + } + + case EAlfGridLayoutSetColumnWeights: + { + RArray array; + CleanupClosePushL( array ); + InternalizeL(aInputBuffer, array); + gridLayout->SetColumnsL(array); + CleanupStack::PopAndDestroy( &array ); + break; + } + + case EAlfGridLayoutSetRowsWeights: + { + RArray array; + CleanupClosePushL( array ); + InternalizeL(aInputBuffer, array); + gridLayout->SetRowsL(array); + CleanupStack::PopAndDestroy( &array ); + break; + } + + case EAlfGridLayoutSetExpanding: + { + TInt* flags = (TInt*) aInputBuffer.Ptr(); + gridLayout->SetExpanding(*flags); + break; + } + + case EAlfGridLayoutOrdinalToBlock: + { + TInt* ordinal = (TInt*) aInputBuffer.Ptr(); + TPoint pos(0,0); + TPckg posPckg(pos); + pos = gridLayout->OrdinalToBlock(*ordinal); + aResponse = posPckg; + break; + } + + case EAlfGridLayoutColumnCount: + { + TInt count(0); + TPckg countPckg(count); + count = gridLayout->DimensionCount(EHuiGridColumn); + aResponse = countPckg; + break; + } + + case EAlfGridLayoutRowCount: + { + TInt count(0); + TPckg countPckg(count); + count = gridLayout->DimensionCount(EHuiGridRow); + aResponse = countPckg; + break; + } + + case EAlfGridLayoutFillWeights: + { + TAlfGridLayoutFillWeightsParams* params = (TAlfGridLayoutFillWeightsParams*)aInputBuffer.Ptr(); + THuiGridDimension dim = (THuiGridDimension)params->iDim; + THuiMetric metric(params->iWeight.iMagnitude, params->iWeight.iUnit, params->iWeight.iReferenceTextStyleId); + gridLayout->FillWeightsL(dim, params->iCount, metric); + break; + } + + case EAlfGridLayoutAppendWeight: + { + TAlfGridLayoutAppendWeightParams* params = (TAlfGridLayoutAppendWeightParams*)aInputBuffer.Ptr(); + THuiGridDimension dim = (THuiGridDimension)params->iDim; + THuiMetric metric(params->iWeight.iMagnitude, params->iWeight.iUnit, params->iWeight.iReferenceTextStyleId); + gridLayout->AppendWeightL(dim, metric); + break; + } + + case EAlfGridLayoutInsertWeight: + { + TAlfGridLayoutInsertWeightParams* params = (TAlfGridLayoutInsertWeightParams*)aInputBuffer.Ptr(); + THuiGridDimension dim = (THuiGridDimension)params->iDim; + THuiMetric metric(params->iWeight.iMagnitude, params->iWeight.iUnit, params->iWeight.iReferenceTextStyleId); + gridLayout->InsertWeightL(dim, metric, params->iPos); + break; + } + + case EAlfGridLayoutReplaceWeight: + { + TAlfGridLayoutReplaceWeightParams* params = (TAlfGridLayoutReplaceWeightParams*)aInputBuffer.Ptr(); + THuiGridDimension dim = (THuiGridDimension)params->iDim; + THuiMetric metric(params->iWeight.iMagnitude, params->iWeight.iUnit, params->iWeight.iReferenceTextStyleId); + gridLayout->ReplaceWeightL(dim, metric, params->iPos); + break; + } + + case EAlfGridLayoutRemoveWeight: + { + TAlfGridLayoutRemoveWeightParams* params = (TAlfGridLayoutRemoveWeightParams*)aInputBuffer.Ptr(); + THuiGridDimension dim = (THuiGridDimension)params->iDim; + gridLayout->RemoveWeightL(dim, params->iPos); + break; + } + + case EAlfGridLayoutWeight: + { + TAlfGridLayoutWeightParams* params = (TAlfGridLayoutWeightParams*)aInputBuffer.Ptr(); + THuiGridDimension dim = (THuiGridDimension)params->iDim; + THuiMetric huiWeight = gridLayout->Weight(dim, params->iPos); + + TAlfMetric alfWeight(huiWeight.iMagnitude, huiWeight.iUnit, huiWeight.iReferenceTextStyleId);; + TPckg weightPckg(alfWeight); + aResponse = weightPckg; + break; + } + + case EAlfGridLayoutCount: + { + THuiGridDimension* dim = (THuiGridDimension*) aInputBuffer.Ptr(); + TInt count(0); + TPckg countPckg(count); + count = gridLayout->DimensionCount(*dim); + aResponse = countPckg; + break; + } + + case EAlfGridLayoutSetLayoutModeFlags: + { + TInt2* params = (TInt2*) aInputBuffer.Ptr(); + gridLayout->SetLayoutModeFlags((THuiGridDimension)params->iInt1, (TUint)params->iInt2); + break; + } + + case EAlfGridLayoutLayoutModeFlags: + { + THuiGridDimension* dim = (THuiGridDimension*) aInputBuffer.Ptr(); + TInt flags(0); + TPckg flagsPckg(flags); + flags = gridLayout->LayoutModeFlags(*dim); + aResponse = flagsPckg; + break; + } + + case EAlfGridLayoutClearLayoutModeFlags: + { + TInt2* params = (TInt2*) aInputBuffer.Ptr(); + gridLayout->ClearLayoutModeFlags((THuiGridDimension)params->iInt1, (TUint)params->iInt2); + break; + } + + default: + CAlfLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + + } + +EXPORT_C void CAlfGridLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + +//---------------------------- +// LCT grid layout +//---------------------------- +EXPORT_C MAlfExtension* CAlfLCTGridLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfLCTGridLayoutHandler* me = new (ELeave) CAlfLCTGridLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + + +EXPORT_C CAlfLCTGridLayoutHandler::CAlfLCTGridLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfGridLayoutHandler(aResolver) + { + } + + +EXPORT_C void CAlfLCTGridLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiGridLayout* layout = CHuiGridLayout::AddNewL(aOwner, 1, 1, aParentLayout); + CAlfGridLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfGridLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + + +EXPORT_C CAlfLCTGridLayoutHandler::~CAlfLCTGridLayoutHandler() + { + } + + +EXPORT_C void CAlfLCTGridLayoutHandler::Release() + { + delete this; + } + + +EXPORT_C TAny* CAlfLCTGridLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + return CAlfGridLayoutHandler::GetInterface(aInterface); + } + + +EXPORT_C void CAlfLCTGridLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + switch (aCommandId) + { + case EAlfLCTGridLayoutSetColsAndRows: + { +#ifdef RD_ALF_IN_PLATFORM + CHuiGridLayout* gridLayout = static_cast(iVisual); + TAlfLCTGridSetColsAndRowsParams* params = (TAlfLCTGridSetColsAndRowsParams*)aInputBuffer.Ptr(); + + TAknLayoutHierarchyComponentHandle handle; + handle.SetApiId(params->iApiId); + handle.SetComponentId(params->iComponentId); + handle.SetVarietyIndex(params->iVarietyIndex); + + THuiTimedPoint tpoint; + AlfTimedPointUtility::CopyTimedPoint(params->iOffset, tpoint, iResolver); + + // get the cols and rows directly from the param limits + // @todo maybe need to use anchors, or set rows and cols by item height? + TAknLayoutScalableParameterLimits limits = AknLayout2Hierarchy::GetParamLimits(handle); + gridLayout->SetColumnsL(limits.LastColumn()+1); + gridLayout->SetRowsL(limits.LastRow()+1); +#endif + break; + } + default: + CAlfGridLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + + } + +EXPORT_C void CAlfLCTGridLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfGridLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + +//---------------------------- +// deck layout +//---------------------------- +EXPORT_C MAlfExtension* CAlfDeckLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfDeckLayoutHandler* me = new (ELeave) CAlfDeckLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + + +EXPORT_C CAlfDeckLayoutHandler::CAlfDeckLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfLayoutHandler(aResolver) + { + } + + +EXPORT_C void CAlfDeckLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiDeckLayout* layout = CHuiDeckLayout::AddNewL(aOwner, aParentLayout); + CAlfLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + + +EXPORT_C CAlfDeckLayoutHandler::~CAlfDeckLayoutHandler() + { + } + +EXPORT_C TAny* CAlfDeckLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + return CAlfLayoutHandler::GetInterface(aInterface); + } + + +EXPORT_C void CAlfDeckLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + CAlfLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + +EXPORT_C void CAlfDeckLayoutHandler::Release() + { + delete this; + } + +EXPORT_C void CAlfDeckLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + + +//---------------------------- +// flow layout +//---------------------------- +EXPORT_C MAlfExtension* CAlfFlowLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfFlowLayoutHandler* me = new (ELeave) CAlfFlowLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + + +EXPORT_C CAlfFlowLayoutHandler::CAlfFlowLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfLayoutHandler(aResolver) + { + } + + +EXPORT_C void CAlfFlowLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiFlowLayout* layout = CHuiFlowLayout::AddNewL(aOwner, CHuiFlowLayout::EFlowVertical, aParentLayout); + CAlfLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + + +EXPORT_C CAlfFlowLayoutHandler::~CAlfFlowLayoutHandler() + { + } + + +EXPORT_C void CAlfFlowLayoutHandler::Release() + { + delete this; + } + + +EXPORT_C TAny* CAlfFlowLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + return CAlfLayoutHandler::GetInterface(aInterface); + } + + +EXPORT_C void CAlfFlowLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + CHuiFlowLayout* flowLayout = static_cast(iVisual); + switch (aCommandId) + { + case EAlfFlowLayoutSetFlowDirection: + { + CHuiFlowLayout::TFlowDirection* params = (CHuiFlowLayout::TFlowDirection*) aInputBuffer.Ptr(); + flowLayout->SetFlowDirection( *params ); + break; + } + case EAlfFlowLayoutSetCentering: + { + TBool* params = (TBool*) aInputBuffer.Ptr(); + flowLayout->SetCentering( *params ); + break; + } + case EAlfFlowLayoutSetMode: + { + TInt* params = (TInt*) aInputBuffer.Ptr(); + flowLayout->SetMode( *params ); + break; + } + + default: + CAlfLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + } + + +EXPORT_C void CAlfFlowLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + + + // CURVE PATH LAYOUT + + +struct CAlfCurvePathLayoutHandler::TCurvePathLayoutPrivateData + { + }; + +EXPORT_C MAlfExtension* CAlfCurvePathLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfCurvePathLayoutHandler* me = new (ELeave) CAlfCurvePathLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + +EXPORT_C CAlfCurvePathLayoutHandler::CAlfCurvePathLayoutHandler(MAlfInterfaceProvider& aResolver) +:CAlfLayoutHandler(aResolver) + { + } + +EXPORT_C void CAlfCurvePathLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiCurvePathLayout* layout = CHuiCurvePathLayout::AddNewL(aOwner, aParentLayout); + CAlfLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + + // Not needed currently + //iCurvePathLayoutPrivateData = new (ELeave) TCurvePathLayoutPrivateData; + } + +EXPORT_C CAlfCurvePathLayoutHandler::~CAlfCurvePathLayoutHandler() + { + if ( iCurvePathLayoutPrivateData ) + { + // Delete private data (not used currently) + } + delete iCurvePathLayoutPrivateData; + iCurvePathLayoutPrivateData = NULL; + } + +EXPORT_C void CAlfCurvePathLayoutHandler::Release() + { + delete this; + } + +EXPORT_C TAny* CAlfCurvePathLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + CHuiCurvePathLayout* curvePathLayout = static_cast(iVisual); + + switch ( aInterface ) + { + case EHuiInterfaceMappingFunction: + return static_cast(curvePathLayout); + case EHuiObjectTypeCurvePathProvider: + return &curvePathLayout->CurvePath(); + default: + return CAlfLayoutHandler::GetInterface(aInterface); + } + } + +EXPORT_C void CAlfCurvePathLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + CHuiCurvePathLayout* curvePathLayout = static_cast(iVisual); + + switch( aCommandId ) + { + case EAlfCurvePathLayoutMapValue: + { + TIntTReal* mapValues = (TIntTReal*) aInputBuffer.Ptr(); + const TReal32 returnValue = curvePathLayout->MapValue( mapValues->iReal, mapValues->iInt ); + TPckg returnValuePckg(returnValue); + aResponse = returnValuePckg; + break; + } + default: + CAlfLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + break; + } + } + +EXPORT_C void CAlfCurvePathLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + +//---------------------------- +// viewport layout +//---------------------------- +EXPORT_C MAlfExtension* CAlfViewportLayoutHandler::NewL(MAlfInterfaceProvider& aResolver, CHuiControl* aOwner, CHuiLayout* aParentLayout) + { + CAlfViewportLayoutHandler* me = new (ELeave) CAlfViewportLayoutHandler(aResolver); + CleanupStack::PushL(me); + me->ConstructL(NULL, *aOwner, aParentLayout); + CleanupStack::Pop(); + return me; + } + + +EXPORT_C CAlfViewportLayoutHandler::CAlfViewportLayoutHandler(MAlfInterfaceProvider& aResolver):CAlfLayoutHandler(aResolver) + { + } + + +EXPORT_C void CAlfViewportLayoutHandler::ConstructL(CHuiVisual* aVisual, CHuiControl& aOwner, CHuiLayout* aParentLayout) + { + if (!aVisual) + { + CHuiViewportLayout* layout = CHuiViewportLayout::AddNewL(aOwner, aParentLayout); + CAlfLayoutHandler::ConstructL(layout, aOwner, aParentLayout); + } + else + { + CAlfLayoutHandler::ConstructL(aVisual, aOwner, aParentLayout); + } + } + + +EXPORT_C CAlfViewportLayoutHandler::~CAlfViewportLayoutHandler() + { + } + +EXPORT_C void CAlfViewportLayoutHandler::Release() + { + delete this; + } + + +EXPORT_C TAny* CAlfViewportLayoutHandler::GetInterface(const THuiInterfaceSupport& aInterface) + { + return CAlfLayoutHandler::GetInterface(aInterface); + } + + +EXPORT_C void CAlfViewportLayoutHandler::HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse) + { + CHuiViewportLayout* viewportLayout = static_cast(iVisual); + switch (aCommandId) + { + case EAlfViewportLayoutSetVirtualSize: + { + TAlfTimedPoint* newSize = (TAlfTimedPoint*) aInputBuffer.Ptr(); + + THuiTimedPoint tpoint; + AlfTimedPointUtility::CopyTimedPoint(*newSize, tpoint, iResolver); + + viewportLayout->SetVirtualSize(tpoint.RealTarget().AsSize(), HUI_ROUND_FLOAT_TO_INT(newSize->TimeToTargetinMilliSeconds().iX)); + break; + } + + case EAlfViewportLayoutSetViewportSize: + { + TAlfTimedPoint* newSize = (TAlfTimedPoint*) aInputBuffer.Ptr(); + + THuiTimedPoint tpoint; + AlfTimedPointUtility::CopyTimedPoint(*newSize, tpoint, iResolver); + viewportLayout->SetViewportSize(tpoint.RealTarget().AsSize(), HUI_ROUND_FLOAT_TO_INT(newSize->TimeToTargetinMilliSeconds().iX)); + break; + } + + case EAlfViewportLayoutSetViewportPos: + { + TAlfTimedPoint* newPos = (TAlfTimedPoint*) aInputBuffer.Ptr(); + + THuiTimedPoint tpoint; + AlfTimedPointUtility::CopyTimedPoint(*newPos, tpoint, iResolver); + viewportLayout->SetViewportPos(tpoint.RealTarget(), HUI_ROUND_FLOAT_TO_INT(newPos->TimeToTargetinMilliSeconds().iX)); + break; + } + + default: + CAlfLayoutHandler::HandleCmdL(aCommandId, aInputBuffer, aResponse); + } + } + +EXPORT_C void CAlfViewportLayoutHandler::VisualHandlerExtension(const TUid& aExtensionUid, TAny** aExtensionParameters) + { + CAlfLayoutHandler::VisualHandlerExtension(aExtensionUid, aExtensionParameters); + } + + +// end of file