mulwidgets/mulcoverflowwidget/src/mulcovertemplate1.cpp
changeset 0 e83bab7cf002
--- /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