mulwidgets/mulcoverflowwidget/src/mulcovertemplate4.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:18 +0100
branchRCL_3
changeset 26 0e9bb658ef58
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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
 *
*/

 
#include "mulcoverflowtemplate.h"

#include <AknUtils.h>

#include <alf/alftextvisual.h>
#include <alf/alfutil.h>
#include "mulassert.h"

namespace Alf
    {

// ---------------------------------------------------------------------------
// MulCoverLogicalTemplate4
// ---------------------------------------------------------------------------
//  
MulCoverFlowTemplate4::MulCoverFlowTemplate4(MulCoverFlowControl &aControl, 
        MulBaseElement &aBaseElement):MulCoverFlowTemplate(aControl, aBaseElement)
    {
    
    }

// ---------------------------------------------------------------------------
// ~MulCoverLogicalTemplate4
// ---------------------------------------------------------------------------
//  
MulCoverFlowTemplate4::~MulCoverFlowTemplate4()
    {
    
    }
    

// ---------------------------------------------------------------------------
// GetIconSize
// ---------------------------------------------------------------------------
//  
void MulCoverFlowTemplate4::GetIconSize(mulvisualitem::TVisualAttribute aAttribute,bool aIslandscape, int& aHeight, int& aWidth)
	{
	int appMainPaneVerityId;
	int coverFlowPaneVarietyId;
	int imagePaneVerityId ;
	int videoIndVerityId ;
	if (aIslandscape)
		{
		appMainPaneVerityId = 7;
		coverFlowPaneVarietyId = 1;
		imagePaneVerityId = 6;
		videoIndVerityId = 0;
		}
	else
		{
		appMainPaneVerityId = 7;
		coverFlowPaneVarietyId = 1;
		imagePaneVerityId = 6;
		videoIndVerityId = 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(  AlfUtil::ScreenSize(), 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;
			}
		case mulvisualitem::KMulIndicator2:
			{
            TAknWindowLineLayout centerLayout = 
                AknLayoutScalable_UiAccel::main_aa_video_pane_g1(videoIndVerityId).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 MulCoverFlowTemplate4::CreateVisualisation(bool aIsLandscape,bool aIsOrientationChange)
	{
	// set the default attribue of the template
	// irrespective of the orientation
    mData->mSliderEnabled = false;
    mData->mUiOnOffFlag = true;
	mData->mMaxVisibleCount = 1;
	mData->mEnhancedSupportFlag = true;
	
    // store the default attribute in base element
    mData->mBaseElement->SetFitMode(true);
	mData->mBaseElement->StoreTextVisibility( false );
	
    // get the main text layout
    CAlfLayout& textLayout = mData->mBaseElement->TextLayout();	
    textLayout.SetOpacity(0);
	
	mData->mOrientationChange = aIsOrientationChange;
	if (aIsLandscape)
		{
		// create visualisation for landscape
		CreateLscStructure();
		}
	else
		{
		// create visualisation for potrait
		CreatePrtStructure();
		}
	mData->mOrientationChange = false;
	}


// ---------------------------------------------------------------------------
// CreatePrtStructure
// ---------------------------------------------------------------------------
//  
void MulCoverFlowTemplate4::CreatePrtStructure()
	{
	// list of all component lct verity id.
	int mainPaneVerityId = 1;
	int imagePaneVerityId = 6;
	int videoPaneVerityId = 0;
	int counterPaneVerityId = 3;
	
	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(imagePaneVerityId).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,mData->mMaxVisibleCount );
	 
   
	 
	 // for indicator icon
	componentLayout =
	    AknLayoutScalable_UiAccel::main_aa_video_pane_g1(videoPaneVerityId).LayoutLine();
	TRect indRect = IconWindowRect(componentLayout,mainRect);
    TSize indSize(indRect.Size());
    mData->mIndicatorDimensions.height = indSize.iHeight;
    mData->mIndicatorDimensions.width  = indSize.iWidth;
    mData->mIndicatorDimensions.posx   = indRect.iTl.iX;
    mData->mIndicatorDimensions.posy   = indRect.iTl.iY; 
    
    // crete counter
    ApplyCounterAttribute(counterPaneVerityId,mainRect);
	}

// ---------------------------------------------------------------------------
// CreateLscStructure
// ---------------------------------------------------------------------------
//  
void MulCoverFlowTemplate4::CreateLscStructure()
	{
	// list of all component lct verity id.
	int mainPaneVerityId = 1;
	int imagePaneVerityId = 6;
	int videoPaneVerityId = 0;
	int counterPaneVerityId = 8;
	
	CAlfVisual* main = mData->mBaseElement->findVisual(KMainLayoutIndex);        
	CAlfLayout* prntLay = main->Layout();
	TSize main_size = prntLay->Size().Target().AsSize();
	TAknWindowLineLayout componentLayout;

	// get for main layout
	componentLayout = 
		AknLayoutScalable_UiAccel::main_aa_coverflow_pane(mainPaneVerityId).LayoutLine();
	TRect mainRect = IconWindowRect(componentLayout, main_size);
	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(imagePaneVerityId).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,mData->mMaxVisibleCount );
	   
 
	 // for indicator icon
	componentLayout =
	    AknLayoutScalable_UiAccel::main_aa_video_pane_g1(videoPaneVerityId).LayoutLine();
	TRect indRect = IconWindowRect(componentLayout,mainRect);
    TSize indSize(indRect.Size());
    mData->mIndicatorDimensions.height = indSize.iHeight;
    mData->mIndicatorDimensions.width  = indSize.iWidth;
    mData->mIndicatorDimensions.posx   = indRect.iTl.iX;
    mData->mIndicatorDimensions.posy   = indRect.iTl.iY; 
    
    // crete counter
    ApplyCounterAttribute(counterPaneVerityId,mainRect);
	}
	
// ---------------------------------------------------------------------------
// ApplyCounterAttribute
// ---------------------------------------------------------------------------
//  
void MulCoverFlowTemplate4::ApplyCounterAttribute(int acounterPaneVerityId,const TRect& aMainRect)
	{
    mData->mUiOnOffFlag = true;
	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;
	
	// Create a Counter visual if it is not Created.
	CAlfTextVisual& counterVisual = mData->mBaseElement->CounterVisual();
	
    // Set Properties to Counter Visual if we are creating.
    // no need to apply attribute for orientation change
    // as all are same.
    if(!mData->mOrientationChange)
	    {
	    //get font Id for counter
	    int fontId = counterComponentLayout.FontId();
	    int counterFontId = 0x000000FF &  fontId;
		// apply default brush color to the counter background
		ApplyBrush(counterVisual,KRgbBlack,0.5); 
		// 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);						
	    }
	
	}
      
    }//namespace ends