diff -r 000000000000 -r e83bab7cf002 mulwidgets/mulcoverflowwidget/src/mulcovertemplate1.cpp --- /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 +#include +#include +#include + +// 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( + static_cast(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( + static_cast(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( + 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( + 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 ( + 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( + &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( + 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 ( + 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( + &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