multimediacommsengine/tsrc/testdriver/testclient/ui/src/CTcContainer.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/testdriver/testclient/ui/src/CTcContainer.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,343 @@
+/*
+* Copyright (c) 2004 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:  Implementation.
+*
+*/
+
+#include <bldvariant.hrh>
+#include <eikenv.h>
+#include <eiklabel.h>
+
+#include "CTcTestRunner.h"
+#include "CTcContainer.h"
+#include "TestClientConstants.h"
+
+#ifdef __SERIES90_
+#include <cknenv.h>	// skin support
+#endif
+
+#ifdef __SERIES60_
+#include <akndef.h>
+#endif
+
+
+CTcContainer* CTcContainer::NewL( const TRect& aRect )
+	{
+	CTcContainer* self = new( ELeave ) CTcContainer;
+
+	CleanupStack::PushL( self );
+	self->ConstructL( aRect );
+	CleanupStack::Pop( self );
+
+	return self;
+	}
+
+CTcContainer::~CTcContainer()
+	{
+	// Delete all labels
+	iLabels.ResetAndDestroy();
+	}
+
+CTcContainer::CTcContainer()
+	: iLabels( 1 )	// Minimum granularity
+	{
+	}
+
+void CTcContainer::ConstructL( const TRect& aRect )
+	{
+	// Create a window for this application view
+	CreateWindowL();
+
+#ifdef __SERIES90_
+	// Set skin configuration
+	CCknSkinBase& skin = CknEnv().Skin();
+	skin.SetAppViewType( ESkinAppViewNoCbaNoToolband );
+#endif
+    
+    CreateLabelsL( aRect );
+
+	// Set windows size and activate it
+	SetRect( aRect );
+	ActivateL();
+	}
+
+void CTcContainer::Draw( const TRect& aRect ) const
+	{
+	// Clear the view area
+	CWindowGc& gc = SystemGc();
+	gc.Clear( aRect );
+#ifdef __SERIES90_
+	CknEnv().Skin().DrawAppView( gc, aRect );
+#endif
+	}
+
+TInt CTcContainer::CountComponentControls() const
+	{
+	// Return amount of label control
+	return iLabels.Count();
+	}
+
+CCoeControl* CTcContainer::ComponentControl( TInt aIndex ) const
+	{
+	// Return pointer to a label control
+	return iLabels[ aIndex ];
+	}
+
+void CTcContainer::Update( CTcTestRunner& aRunner )
+	{
+	// Update "Value" labels
+	SetLabelText( ETestCaseValue, aRunner.CurrentTestCaseName() );
+	SetLabelText( ERequestValue, aRunner.CurrentRequestName() );
+
+	// Force screen update NOW
+	DrawDeferred();
+	CEikonEnv::Static()->WsSession().Flush();
+	}
+
+void CTcContainer::UpdateStatus( const TDesC8& aStatus )
+	{
+	// Update "Status" label
+	SetLabelText( EStatusValue, aStatus );
+
+	// Force screen update NOW
+	DrawNow();
+	CEikonEnv::Static()->WsSession().Flush();
+	}
+
+CEikLabel* CTcContainer::CreateLabelL( const TRect& aRect, const TDesC& aText )
+	{
+	// Create new label and add it to the label array
+	CEikLabel* label = new( ELeave ) CEikLabel;
+	CleanupStack::PushL( label );
+	iLabels.AppendL( label );
+	CleanupStack::Pop( label );
+
+	// Set label container, area and text
+	label->SetContainerWindowL( *this );
+	label->SetRect( aRect );
+	label->SetTextL( aText );
+
+	return label;
+	}
+
+void CTcContainer::SetLabelText( TInt aLabelId, const TDesC8& aText )
+	{
+	// 8bit to unicode conversion
+	TBuf< KMaxLabelSize > tmp16;
+	tmp16.Copy( aText );
+
+	// replace an empty text with "<none>"
+	if( tmp16 == KNullDesC )
+		{
+		tmp16 = KNone;
+		}
+
+	// Set text, ignore any errors
+	TRAP_IGNORE( iLabels[ aLabelId ]->SetTextL( tmp16 ) )
+	}
+	
+#ifdef __SERIES60_
+
+void CTcContainer::SizeChanged()
+    {
+    ReLayoutAllLabels( Rect() );
+    }
+
+void CTcContainer::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, 
+                                           mainPaneRect );
+        SetRect( mainPaneRect );
+        DrawNow();
+        }
+	}
+	
+AknLayoutUtils::SAknLayoutTextMultiline CTcContainer::GetLabelLayout( 
+    const TRect& aRect, TInt aLabelBase, TAknLogicalFontId aFontId ) const
+    {
+    /*
+    SAknLayoutTextMultiline struct:
+    
+    @param iFont      font id, ELatinPlain12, ELatinBold12, ELatinBold13 etc..
+	@param iC         colour index, 0..255
+	@param iL         left margin
+	@param iR         right margin
+	@param iB         Baseline from top of the parent rectangle
+	@param iW         text width in pixels
+	@param iJ         justification. ELayoutAlignNone; ELayoutAlignCenter;
+	                  ELayoutAlignLeft; ELayoutAlignRight; ELayoutAlignBidi
+	                  
+	@param iNumberOfLinesShown
+	@param iNextLineB baseline of 2nd line for multi-line labels/editors
+	*/
+
+    const TInt KFontColorIndexBlack( 200 );	
+
+	AknLayoutUtils::SAknLayoutTextMultiline labelLayout;
+	labelLayout.iFont = aFontId;
+    labelLayout.iC = KFontColorIndexBlack;
+    labelLayout.iL = KLabelTlX;
+    labelLayout.iR = KLabelTlX;
+    labelLayout.iB = aLabelBase;
+    labelLayout.iW = aRect.Width() - labelLayout.iL - labelLayout.iR;
+    labelLayout.iJ = ELayoutAlignLeft;
+    labelLayout.iNumberOfLinesShown = 1;
+    return labelLayout;
+    }
+
+TInt CTcContainer::FontTotalHeightInPixels( TAknLogicalFontId aFontId ) const
+    {
+    const CFont* font = AknLayoutUtils::FontFromId( aFontId );
+    
+   	_LIT( KPanicCntx, "TestClient" );
+	__ASSERT_ALWAYS( font, User::Panic( KPanicCntx(), KErrNotFound ) );
+	
+	return  font->HeightInPixels();
+    }
+
+void CTcContainer::CreateLabelsL( const TRect& aRect )
+    {
+    // Create labels
+	CEikLabel* label;
+	
+	TInt primaryFontTotalHeight( FontTotalHeightInPixels( EAknLogicalFontPrimaryFont ) );
+	TInt secondaryFontTotalHeight( FontTotalHeightInPixels( EAknLogicalFontSecondaryFont ) );
+	
+	TInt labelBase = KLabelTlY + primaryFontTotalHeight;	
+    AknLayoutUtils::SAknLayoutTextMultiline labelLayout = 
+        GetLabelLayout( aRect, labelBase, EAknLogicalFontPrimaryFont );
+	TRect rect( KLabelTlX, KLabelTlY, 
+	            aRect.Width() - KLabelTlX, KLabelTlY + primaryFontTotalHeight );
+
+    label = CreateLabelL( rect, KTestCase );
+    AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+    
+	rect.Move( 0, secondaryFontTotalHeight );
+	labelBase += secondaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontSecondaryFont );
+	label = CreateLabelL( rect, KNone );
+    AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+
+	rect.Move( 0, primaryFontTotalHeight );
+	labelBase += primaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontPrimaryFont );
+	label = CreateLabelL( rect, KRequest );
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+	rect.Move( 0, secondaryFontTotalHeight );
+	labelBase += secondaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontSecondaryFont );
+	label = CreateLabelL( rect, KNone );
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+
+
+	rect.Move( 0, primaryFontTotalHeight );
+	labelBase += primaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontPrimaryFont );
+	label = CreateLabelL( rect, KStatus );
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+	rect.Move( 0, secondaryFontTotalHeight );
+	labelBase += secondaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontSecondaryFont );
+	label = CreateLabelL( rect, KNone );
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+    }
+    
+ 
+void CTcContainer::ReLayoutAllLabels( const TRect& aRect )
+    {
+    if ( iLabels.Count() != 6 )
+        {
+        return;
+        }
+        
+    CEikLabel* label;
+    
+    TInt primaryFontTotalHeight( FontTotalHeightInPixels( EAknLogicalFontPrimaryFont ) );
+	TInt secondaryFontTotalHeight( FontTotalHeightInPixels( EAknLogicalFontSecondaryFont ) );
+	
+	TInt labelBase = KLabelTlY + primaryFontTotalHeight;	
+    AknLayoutUtils::SAknLayoutTextMultiline labelLayout = 
+        GetLabelLayout( aRect, labelBase, EAknLogicalFontPrimaryFont );
+	TRect rect( KLabelTlX, KLabelTlY, 
+	            aRect.Width() - KLabelTlX, KLabelTlY + primaryFontTotalHeight );
+
+    label = iLabels[ 0 ];
+    AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+    
+	rect.Move( 0, secondaryFontTotalHeight );
+	labelBase += secondaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontSecondaryFont );
+	label = iLabels[ 1 ];
+    AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+
+	rect.Move( 0, primaryFontTotalHeight );
+	labelBase += primaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontPrimaryFont );
+	label = iLabels[ 2 ];
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+	rect.Move( 0, secondaryFontTotalHeight );
+	labelBase += secondaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontSecondaryFont );
+	label = iLabels[ 3 ];
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+
+
+	rect.Move( 0, primaryFontTotalHeight );
+	labelBase += primaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontPrimaryFont );
+	label = iLabels[ 4 ];
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+	rect.Move( 0, secondaryFontTotalHeight );
+	labelBase += secondaryFontTotalHeight;
+	labelLayout = GetLabelLayout( aRect, labelBase, EAknLogicalFontSecondaryFont );
+	label = iLabels[ 5 ];
+	AknLayoutUtils::LayoutLabel( label, rect, labelLayout );
+    }
+    
+#else
+    
+void CTcContainer::CreateLabelsL( const TRect& /*aRect*/ )
+    {
+   	// Create labels
+	CEikLabel* label;
+	TRect rect( KLabelTlX, KLabelTlY, KLabelBrX, KLabelBrY );
+	label = CreateLabelL( rect, KTestCase );
+	rect.Move( 0, KLabelSpacing );
+	label = CreateLabelL( rect, KNone );
+	// Use smaller for for this label
+	label->SetFont( CEikonEnv::Static()->AnnotationFont() );
+
+	rect.Move( 0, KLabelSpacing );
+	label = CreateLabelL( rect, KRequest );
+	rect.Move( 0, KLabelSpacing );
+	label = CreateLabelL( rect, KNone );
+	// Use smaller for for this label
+	label->SetFont( CEikonEnv::Static()->AnnotationFont() );
+
+	rect.Move( 0, KLabelSpacing );
+	label = CreateLabelL( rect, KStatus );
+	rect.Move( 0, KLabelSpacing );
+	label = CreateLabelL( rect, KNone );
+	// Use smaller for for this label
+	label->SetFont( CEikonEnv::Static()->AnnotationFont() );
+    }
+
+#endif // __SERIES60_
+
+