mulwidgets/mulcoverflowwidget/src/mulcovertemplate4.cpp
branchRCL_3
changeset 26 0e9bb658ef58
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/src/mulcovertemplate4.cpp	Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,340 @@
+/*
+* 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