--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcovertemplate1.cpp Thu Dec 17 08:56:02 2009 +0200
@@ -0,0 +1,533 @@
+/*
+* Copyright (c) 2007-2008 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: Description of various grid templates
+ *
+*/
+
+
+// Class Header
+#include "mulcoverflowtemplate.h"
+
+// system includes
+#include <AknUtils.h>
+#include <alf/alfviewportlayout.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfutil.h>
+
+// Local includes
+#include "mulassert.h"
+#include "mulcoverflowcontrol.h"
+
+namespace Alf
+ {
+
+// ---------------------------------------------------------------------------
+// MulCoverLogicalTemplate1
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate1::MulCoverFlowTemplate1(MulCoverFlowControl &aControl,
+ MulBaseElement &aBaseElement):MulCoverFlowTemplate(aControl, aBaseElement)
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// ~MulCoverLogicalTemplate1
+// ---------------------------------------------------------------------------
+//
+MulCoverFlowTemplate1::~MulCoverFlowTemplate1()
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// GetIconSize
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::GetIconSize(mulvisualitem::TVisualAttribute aAttribute,bool aIslandscape, int& aHeight, int& aWidth)
+ {
+ int appMainPaneVerityId;
+ int coverFlowPaneVarietyId;
+ int imagePaneVerityId ;
+ if (aIslandscape)
+ {
+ appMainPaneVerityId = 3;
+ coverFlowPaneVarietyId = 2;
+ imagePaneVerityId = 4;
+ }
+ else
+ {
+ appMainPaneVerityId = 5;
+ coverFlowPaneVarietyId = 0;
+ imagePaneVerityId = 0;
+ }
+
+ // Get the size of the appwindow
+ TAknWindowLineLayout appMainLayout =
+ AknLayoutScalable_UiAccel::main_pane(appMainPaneVerityId).LayoutLine();
+ TAknLayoutRect appMainRect;
+ appMainRect.LayoutRect( AlfUtil::ScreenSize(), appMainLayout );
+ TSize appMainSize(appMainRect.Rect().Size());
+
+ // Get the size of the coverflow main window
+ TAknWindowLineLayout mainLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(coverFlowPaneVarietyId).LayoutLine();
+ TAknLayoutRect mainRect;
+ mainRect.LayoutRect( appMainSize, mainLayout );
+ TSize mainSize(mainRect.Rect().Size());
+
+ switch(aAttribute)
+ {
+ case mulvisualitem::KMulIcon1:
+ {
+ TAknWindowLineLayout centerLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneVerityId).LayoutLine();
+ TAknLayoutRect centerRect;
+ centerRect.LayoutRect( TSize(mainSize), centerLayout );
+ aHeight = centerRect.Rect().Size().iHeight;
+ aWidth = centerRect.Rect().Size().iWidth;
+ break;
+ }
+ default:
+ {
+ // invalid attribute
+ // raise exception.
+ __MUL_ASSERT(false,KInvalidAttribute);
+
+ break;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CreateVisualisation
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::CreateVisualisation(bool aIsLandscape,bool aIsOrientationChange)
+ {
+ mData->mOrientationChange = aIsOrientationChange;
+
+ // set the default attribue of the template
+ // irrespective of the orientation
+ mData->mUiOnOffFlag = false;
+ mData->mMaxVisibleCount = 3;
+ mData->mEnhancedSupportFlag = false;
+
+ // store the default attribute in base element
+ mData->mBaseElement->SetFitMode(false);
+
+ if (aIsLandscape)
+ {
+ // create visualisation for landscape
+ CreateLscStructure();
+ }
+ else
+ {
+ // create visualisation for potrait
+ CreatePrtStructure();
+ }
+ mData->mOrientationChange = false;
+ }
+
+// ---------------------------------------------------------------------------
+// CreatePrtStructure
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::CreatePrtStructure()
+ {
+ // list of all component lct verity id.
+ int mainPaneVerityId = 0;
+ int imagePaneCenterVerityId = 0;
+ int counterPaneVerityId = 0;
+
+ CAlfVisual* main = mData->mBaseElement->findVisual(KMainLayoutIndex);
+ CAlfLayout* parentLayout = main->Layout();
+ TSize mainSize = parentLayout->Size().Target().AsSize();
+
+ // get for main layout
+ TAknWindowLineLayout componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(mainPaneVerityId).LayoutLine();
+ TRect mainRect = IconWindowRect(componentLayout, mainSize);
+ main->SetPos(TAlfRealPoint(0,0));
+ main->SetSize(mainRect.Size());
+
+
+ // for deck layout
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&>(
+ static_cast<CAlfLayout*>(main)->Visual(KMainLayoutIndex) );
+ deckLayout.SetSize(mainRect.Size(),0);
+
+ // if set background with some skin id is called before calling set model
+ // then the visual and texture would be created with 0,0 sizes
+ // hence we need to resize them
+ CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
+ if(backgroundVisual)
+ {
+ backgroundVisual->SetSize(mainRect.Size(),0);
+ }
+
+ // for center item
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneCenterVerityId).LayoutLine();
+ TRect centerRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem highlightItem(centerRect.iTl.iX,
+ centerRect.iTl.iY,centerRect.Size().iWidth,centerRect.Size().iHeight);
+
+ // apply attribute
+ mData->mBaseElement->StoreVisualDimensions(highlightItem,highlightItem,1);
+
+ ApplyCounterAttribute(counterPaneVerityId,mainRect);
+ ApplyTextAttribute(mainRect);
+
+ // set the status of the slider
+ mData->mSliderEnabled = true;
+ ApplySliderAttribute(mainRect);
+ }
+
+// ---------------------------------------------------------------------------
+// CreateLscStructure
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::CreateLscStructure()
+ {
+ // list of all component lct verity id.
+ int mainPaneVerityId = 2;
+ int imagePaneCenterVerityId = 4;
+ int imagePaneRightVerityId = 3;
+ int counterPaneVerityId = 4;
+
+ CAlfVisual* main = mData->mBaseElement->findVisual(KMainLayoutIndex);
+ CAlfLayout* parentLayout = main->Layout();
+ TSize mainSize = parentLayout->Size().Target().AsSize();
+
+ // get for main layout
+ TAknWindowLineLayout componentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane(mainPaneVerityId).LayoutLine();
+ TRect mainRect = IconWindowRect(componentLayout, mainSize);
+ main->SetPos(TAlfRealPoint(0,0));
+ main->SetSize(mainRect.Size());
+
+
+ // for deck layout
+ CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&>(
+ static_cast<CAlfLayout*>(main)->Visual(KMainLayoutIndex) );
+ deckLayout.SetSize(mainRect.Size(),0);
+
+ // if set background with some skin id is called before calling set model
+ // then the visual and texture would be created with 0,0 sizes
+ // hence we need to resize them
+ CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
+ if(backgroundVisual)
+ {
+ backgroundVisual->SetSize(mainRect.Size(),0);
+ }
+
+ // for center item
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane(imagePaneCenterVerityId).LayoutLine();
+ TRect centerRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem highlightItem(centerRect.iTl.iX,
+ centerRect.iTl.iY,centerRect.Size().iWidth,centerRect.Size().iHeight);
+
+ // for right item
+ if (AknLayoutUtils::LayoutMirrored())
+ {
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane_cp001(imagePaneRightVerityId).LayoutLine();
+ }
+ else
+ {
+ componentLayout =
+ AknLayoutScalable_UiAccel::aacf_image_pane_cp002(imagePaneRightVerityId).LayoutLine();
+ }
+ TRect rightItemRect = IconWindowRect(componentLayout,mainRect);
+
+ TMulCoverFlowItem nonHighlightItem(rightItemRect.iTl.iX,
+ rightItemRect.iTl.iY,rightItemRect.Size().iHeight,rightItemRect.Size().iHeight);
+
+ // apply attribute
+ mData->mBaseElement->StoreVisualDimensions(highlightItem,nonHighlightItem,3);
+
+ ApplyCounterAttribute(counterPaneVerityId,mainRect);
+ ApplyTextAttribute(mainRect);
+
+ // set the status of the slider
+ mData->mSliderEnabled = false;
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyCounterAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyCounterAttribute(int acounterPaneVerityId,const TRect& aMainRect)
+ {
+ TAknTextLineLayout counterComponentLayout =
+ AknLayoutScalable_UiAccel::main_aa_coverflow_pane_t1(acounterPaneVerityId).LayoutLine();
+
+ TRect counterRect = TextWindowRect(counterComponentLayout,aMainRect);
+ TSize counterSize(counterRect.Size());
+ mData->mCounterDimensions.posx = counterRect.iTl.iX;
+ mData->mCounterDimensions.posy = counterRect.iTl.iY;
+ mData->mCounterDimensions.width = counterSize.iWidth;
+ mData->mCounterDimensions.height = counterSize.iHeight;
+
+ // Set Properties to Counter Visual if we are creating.
+ // no need to apply attribute for orientation change
+ // as all are same.
+ if(!mData->mOrientationChange)
+ {
+ // Create a Counter visual if it is not Created.
+ CAlfTextVisual& counterVisual = mData->mBaseElement->CounterVisual();
+
+ //get font Id for counter
+ int fontId = counterComponentLayout.FontId();
+ int counterFontId = 0x000000FF & fontId;
+ // apply default attribute
+ counterVisual.SetAlign(EAlfAlignHCenter,EAlfAlignVCenter);
+ SetTextStyle(counterFontId, counterVisual);
+
+ // check if user has set some different attribute.
+ TMulVisualColorProperty counterColor = mData->mBaseElement->TextColor(ECounterVisual);
+ if (counterColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ counterVisual.SetColor(counterColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ counterVisual.SetColor(KRgbWhite);
+ }
+ mData->mCounterFontMaxCharLength = UpdateMaxFontWidth(&counterVisual);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyTextAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyTextAttribute(const TRect& aMainRect)
+ {
+ // list of all component lct verity id.
+ int textPaneVerityId ;
+ int textPaneBgVerityId ;
+ int textPaneTitleVerityId ;
+ int textPaneDetailVerityId ;
+ float bgTextOpacity;
+
+ if (mData->mControl->IsLandscape())
+ {
+ textPaneVerityId = 3;
+ textPaneBgVerityId = 0;
+ textPaneTitleVerityId = 0;
+ textPaneDetailVerityId = 0;
+ bgTextOpacity = 0.5;
+ }
+ else
+ {
+ textPaneVerityId = 0;
+ textPaneBgVerityId = 0;
+ textPaneTitleVerityId = 0;
+ textPaneDetailVerityId = 0;
+ bgTextOpacity = 0;
+ }
+
+ // set text visibility
+ mData->mBaseElement->StoreTextVisibility( true );
+
+ // Create and apply attribute for text visual.
+
+ CAlfLayout& textLayout = mData->mBaseElement->TextLayout();
+
+ // for parent text layout
+ TAknWindowLineLayout windowLineLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane(textPaneVerityId).LayoutLine();
+ TRect textRect = IconWindowRect(windowLineLayout, aMainRect);
+ TRect textLayoutRect = TRect(0,0,textRect.Width(),textRect.Height());
+
+ // set the position of parent text layout.
+ textLayout.SetPos(textRect.iTl);
+ textLayout.SetSize(textRect.Size());
+
+ // for the background visual
+ CAlfTextVisual* bkgTextVisual = static_cast<CAlfTextVisual*>(
+ textLayout.FindTag(KLitMulBackGround));
+ if(!bkgTextVisual)
+ {
+ bkgTextVisual = CAlfTextVisual::AddNewL(*mData->mControl, &textLayout);
+ bkgTextVisual->SetTagL(KLitMulBackGround);
+ bkgTextVisual->SetFlag(EAlfVisualFlagIgnorePointer);
+ }
+ windowLineLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane_g1(textPaneBgVerityId).LayoutLine();
+ TRect bkgRect = IconWindowRect(windowLineLayout , textLayoutRect);
+ bkgTextVisual->SetSize(bkgRect.Size());
+ bkgTextVisual->SetPos(bkgRect.iTl);
+
+ ApplyBrush(*bkgTextVisual,KRgbBlack,bgTextOpacity);
+
+ ApplyTitleTextAttribute(textPaneTitleVerityId,textLayoutRect);
+ ApplyDetailTextAttribute(textPaneDetailVerityId,textLayoutRect);
+
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyTitleTextAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyTitleTextAttribute(int atextPaneTitleVerityId,const TRect& aTextLayoutRect)
+ {
+
+ // get the main text layout
+ CAlfLayout& textLayout = mData->mBaseElement->TextLayout();
+
+ // for title visual
+ CAlfViewportLayout *viewPortLayout =static_cast<CAlfViewportLayout*>(
+ textLayout.FindTag(KTitleViewPortLayout));
+ if(viewPortLayout == NULL)
+ {
+ viewPortLayout = CAlfViewportLayout::AddNewL(*mData->mControl,
+ &textLayout);
+ viewPortLayout->SetTagL(KTitleViewPortLayout);
+ viewPortLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ viewPortLayout->SetFlag(EAlfVisualFlagIgnorePointer);
+ }
+ else
+ {
+ viewPortLayout = static_cast <CAlfViewportLayout*>(
+ textLayout.FindTag(KTitleViewPortLayout));
+ }
+ TAknTextLineLayout textWindowLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane_t1(atextPaneTitleVerityId).LayoutLine();
+ TRect titleRect = TextWindowRect(textWindowLayout, aTextLayoutRect);
+ mData->mTitleParentSize = titleRect.Size();
+ viewPortLayout->SetSize(titleRect.Size());
+ viewPortLayout->SetPos(titleRect.iTl);
+ viewPortLayout->SetViewportSize(TAlfRealSize(titleRect.Size()),0);
+ viewPortLayout->SetClipping(true);
+ CAlfTextVisual* textVisual = static_cast<CAlfTextVisual*>(
+ &mData->mBaseElement->CreateTextVisual(KCoverflowTitle,*viewPortLayout));
+
+ if(!mData->mOrientationChange)
+ {
+ //Get font ID
+ int fontId = textWindowLayout.FontId();
+ int textFontId = 0x000000FF & fontId;
+ SetTextStyle(textFontId, *textVisual);
+ mData->mTitleFontMaxCharLength = UpdateMaxFontWidth(textVisual);
+ // Apply default attribute.
+ textVisual->SetAlign(EAlfAlignHLocale,EAlfAlignVCenter);
+ textVisual->SetOpacity(1);
+
+ // check if user has set some different attribute.
+ TMulVisualColorProperty textColor = mData->mBaseElement->TextColor(ETilteDetailTextVisual);
+ if (textColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ textVisual->SetColor(textColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ textVisual->SetColor(KRgbWhite);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ApplyDetailTextAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplyDetailTextAttribute(int aTextPaneDetailVerityId,const TRect& aTextLayoutRect)
+ {
+ // get the main text layout
+ CAlfLayout& textLayout = mData->mBaseElement->TextLayout();
+
+ CAlfViewportLayout *viewPortLayout = NULL;
+ CAlfTextVisual* textVisual = NULL;
+ viewPortLayout =static_cast<CAlfViewportLayout*>(
+ textLayout.FindTag(KDetailViewPortLayout));
+ if(viewPortLayout == NULL)
+ {
+ viewPortLayout = CAlfViewportLayout::AddNewL(*mData->mControl,
+ &textLayout);
+ viewPortLayout->SetTagL(KDetailViewPortLayout);
+ viewPortLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+ viewPortLayout->SetFlag(EAlfVisualFlagIgnorePointer);
+ }
+ else
+ {
+ viewPortLayout = static_cast <CAlfViewportLayout*>(
+ textLayout.FindTag(KDetailViewPortLayout));
+ }
+ TAknTextLineLayout textWindowLayout =
+ AknLayoutScalable_UiAccel::aacf_image_title_pane_t2(aTextPaneDetailVerityId).LayoutLine();
+ TRect detailRect = TextWindowRect(textWindowLayout, aTextLayoutRect);
+ mData->mDetailParentSize = detailRect.Size();
+ viewPortLayout->SetSize(detailRect.Size());
+ viewPortLayout->SetPos(detailRect.iTl);
+ viewPortLayout->SetViewportSize(TAlfRealSize(detailRect.Size()),0);
+
+ viewPortLayout->SetClipping(true);
+ textVisual = static_cast<CAlfTextVisual*>(
+ &mData->mBaseElement->CreateTextVisual(KCoverflowDetail , *viewPortLayout ));
+ if(!mData->mOrientationChange)
+ {
+ //Get font ID
+ int fontId = textWindowLayout.FontId();
+ int textFontId = 0x000000FF & fontId;
+ SetTextStyle(textFontId, *textVisual);
+ mData->mDetailFontMaxCharLength = UpdateMaxFontWidth(textVisual);
+ // Apply default attribute.
+ textVisual->SetAlign(EAlfAlignHLocale,EAlfAlignVCenter);
+ textVisual->SetOpacity(0.7);
+
+ // check if user has set some different attribute.
+ TMulVisualColorProperty textColor = mData->mBaseElement->TextColor(ETilteDetailTextVisual);
+ if (textColor.mIsColorSet)
+ {
+ // apply the color set by the application
+ textVisual->SetColor(textColor.mColor);
+ }
+ else
+ {
+ // apply the default color
+ textVisual->SetColor(KRgbWhite);
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------------------------
+// ApplySliderAttribute
+// ---------------------------------------------------------------------------
+//
+void MulCoverFlowTemplate1::ApplySliderAttribute(const TRect& aMainRect)
+ {
+ int sliderPaneVerityId = 1;
+
+ TAknWindowLineLayout componentLayout =
+ AknLayoutScalable_UiAccel::aacf_slider_pane(sliderPaneVerityId).LayoutLine();
+ TRect sliderRect = IconWindowRect(componentLayout, aMainRect);
+ TSize sliderSize(sliderRect.Size());
+ mData->mSliderDimensions.height = sliderSize.iHeight;
+ mData->mSliderDimensions.width = sliderSize.iWidth;
+ mData->mSliderDimensions.posx = sliderRect.iTl.iX;
+ mData->mSliderDimensions.posy = sliderRect.iTl.iY;
+ }
+
+ }//namespace ends