commonuisupport/uikon/test/tcolours/tcolscm/TCOLSCM.CPP
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/uikon/test/tcolours/tcolscm/TCOLSCM.CPP	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,596 @@
+// Copyright (c) 2007-2009 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:
+// Acts as a very simple run-time colour scheme changer application.
+// 
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <s32file.h>
+#include <gdi.h>
+#include <gulutil.h>
+
+#include <eikenv.h>
+#include <techview/eikdialg.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikdebug.h>
+#include <techview/eikchlst.h>
+#include <eikrutil.h>
+#include <eikpanic.h>
+#include <eiksvdef.h>
+#include <ecom/ecom.h>
+
+#include <techview/eikon.hrh>
+#include <techview/eikon.rsg>
+#include <eikspane.h>
+#include <spaneinit.rsg>
+
+#include "TCOLSCM.HRH"
+#include <tcolscm.rsg>
+
+#include "Tcolscm.h"
+
+
+// globals 
+_LIT(KTColscmResourceFilePath, "z:\\system\\test\\colours\\tcolscm\\tcolscm.rsc");
+const TUid KUidTColscm={651};
+
+GLDEF_C void Panic(TEikPanic aPanic)
+	{
+	User::Panic(_L("TCOLSCM"), aPanic);
+	}
+
+
+//!***************************** CColorSchemeDlg. 
+/**
+ Dialog for the colour scheme control.
+*/
+
+CColorSchemeDlg::CColorSchemeDlg(TInt& aChoice)
+	: iChoice(aChoice) 
+	{
+	}
+
+/**
+   This method is an override from CEikDialog. It is used to perform pre-layout dialog initialisation. 
+ */
+void CColorSchemeDlg::PreLayoutDynInitL()
+	{
+	}
+
+/**
+   This method is an override from CEikDialog. It handles a dialog button press for OK button.  
+ */
+TBool CColorSchemeDlg::OkToExitL(TInt aControlId)
+    {
+	if (aControlId==EEikBidOk)
+		{
+		iChoice=STATIC_CAST(CEikChoiceList*,Control(EAppChoiceListId))->CurrentItem();
+		}
+	return(ETrue);
+    }
+
+
+
+//!*****************************  CColorSchemeControl. 
+/**
+ The class represents colour scheme control on which tests are performed.
+*/
+
+/**
+   The method creates the controls window and sets it ready to be drawn.
+ */
+void CColorSchemeControl::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+    Window().SetShadowDisabled(ETrue);
+    SetRect(aRect);
+    ActivateL();
+
+	iLogicalNames = new(ELeave) CDesCArrayFlat(5);
+	InitNameArrayL();
+    }
+
+/**
+   The method is called by CColorSchemeControl::ConstructL() to initialize the descriptor array,iLogicalNames.
+ */
+void CColorSchemeControl::InitNameArrayL()
+    {
+	iLogicalNames->AppendL(_L("WindowBackground"));
+	iLogicalNames->AppendL(_L("WindowText"));
+	iLogicalNames->AppendL(_L("ControlBackground"));
+	iLogicalNames->AppendL(_L("ControlText"));
+	iLogicalNames->AppendL(_L("ControlSurroundBackground"));
+	iLogicalNames->AppendL(_L("ControlSurroundText"));
+	iLogicalNames->AppendL(_L("ControlHighlightBackground"));
+	iLogicalNames->AppendL(_L("ControlHighlightText"));
+	iLogicalNames->AppendL(_L("ControlDimmedBackground"));
+	iLogicalNames->AppendL(_L("ControlDimmedText"));
+	iLogicalNames->AppendL(_L("ControlDimmedHighlightBackground"));
+	iLogicalNames->AppendL(_L("ControlDimmedHighlightText"));
+	iLogicalNames->AppendL(_L("DialogBackground"));
+	iLogicalNames->AppendL(_L("DialogText"));
+	iLogicalNames->AppendL(_L("DialogTitle"));
+	iLogicalNames->AppendL(_L("DialogTitlePressed"));
+	iLogicalNames->AppendL(_L("DialogTitleText"));
+	iLogicalNames->AppendL(_L("DialogTitleTextPressed"));
+	iLogicalNames->AppendL(_L("MenubarBackground"));
+	iLogicalNames->AppendL(_L("MenubarText"));
+	iLogicalNames->AppendL(_L("MenubarTitleBackground"));
+	iLogicalNames->AppendL(_L("MenubarTitleText"));
+	iLogicalNames->AppendL(_L("MenuPaneBackground"));
+	iLogicalNames->AppendL(_L("MenuPaneText"));
+	iLogicalNames->AppendL(_L("MenuPaneHighlight"));
+	iLogicalNames->AppendL(_L("MenuPaneTextHighlight"));
+	iLogicalNames->AppendL(_L("MenuPaneDimmedHighlight"));
+	iLogicalNames->AppendL(_L("MenuPaneDimmedText"));
+	iLogicalNames->AppendL(_L("MenuPaneDimmedTextHighlight"));
+	iLogicalNames->AppendL(_L("ButtonFaceClear"));
+	iLogicalNames->AppendL(_L("ButtonFaceSet"));
+	iLogicalNames->AppendL(_L("ButtonFaceSetPressed"));
+	iLogicalNames->AppendL(_L("ButtonFaceClearPressed"));
+	iLogicalNames->AppendL(_L("ButtonText"));
+	iLogicalNames->AppendL(_L("ButtonTextPressed"));
+	iLogicalNames->AppendL(_L("ButtonTextDimmed"));
+	iLogicalNames->AppendL(_L("MsgWinForeground"));
+	iLogicalNames->AppendL(_L("MsgWinBackground"));
+	iLogicalNames->AppendL(_L("ScrollBarBorder"));
+	iLogicalNames->AppendL(_L("ScrollBarShaft"));
+	iLogicalNames->AppendL(_L("ScrollBarShaftDimmed"));
+	iLogicalNames->AppendL(_L("ScrollBarShaftPressed"));
+	iLogicalNames->AppendL(_L("ScrollBarNoShaftOrThumb"));
+	iLogicalNames->AppendL(_L("ScrollButtonIcon"));
+	iLogicalNames->AppendL(_L("ScrollButtonIconPressed"));
+	iLogicalNames->AppendL(_L("ScrollButtonIconDimmed"));
+	iLogicalNames->AppendL(_L("ScrollButtonThumbBackground"));
+	iLogicalNames->AppendL(_L("ScrollButtonThumbBackgroundPressed"));
+	iLogicalNames->AppendL(_L("ScrollThumbDimmed"));
+	iLogicalNames->AppendL(_L("ScrollThumbEdge"));
+	iLogicalNames->AppendL(_L("ToolbarBackground"));
+	iLogicalNames->AppendL(_L("ToolbarText"));
+	iLogicalNames->AppendL(_L("StatuspaneBackground"));
+	iLogicalNames->AppendL(_L("StatuspaneText"));
+	iLogicalNames->AppendL(_L("LabelText"));
+	iLogicalNames->AppendL(_L("LabelTextEmphasis"));	
+	iLogicalNames->AppendL(_L("LabelDimmedText"));
+	iLogicalNames->AppendL(_L("LabelHighlightPartialEmphasis"));
+	iLogicalNames->AppendL(_L("LabelHighlightFullEmphasis"));
+	}
+
+const TInt KXStart = 10;
+const TInt KYStart = 10;
+const TInt KYTextStart = 20;
+const TInt KWidth = 10;
+const TInt KHeight = 18;
+const TInt KXSpacing = 5;
+const TInt KYSpacing = 5;
+const TInt KXTextWidth = 80;
+
+
+/**
+   The method is an override from CCoeControl. The method gets the physical
+   (TRgb) colour which corresponds to the logical colour specified from the
+   application's colour list and sets it as controls background colour.
+ */
+void CColorSchemeControl::Draw(const TRect& /*aRect*/) const
+	{
+	// Tests whether custom color arrays in the list have been merged correctly
+	ASSERT(iEikonEnv->ColorList().Color(KUidTColscm, EExtraSystemBackground)==KRgbRed);
+	ASSERT(iEikonEnv->ColorList().Color(KUidTColscm, EExtraSystemText)==KRgbGreen);
+	//
+
+	CWindowGc& gc = SystemGc();
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(iEikonEnv->ControlColor(EColorWindowBackground,*this));
+	gc.SetPenColor(KRgbBlack);
+	gc.DrawRect(Rect());
+
+	gc.UseFont(iEikonEnv->AnnotationFont());
+
+	TInt yPos = KYStart;
+	TInt xPos = KXStart;
+
+	TInt yTextPos = KYTextStart;
+	
+	const TInt yInc = KHeight+KYSpacing;
+	const TInt xInc = KWidth+KXSpacing;
+
+	TInt count = 0;
+	for(TInt jj=0;jj<6;jj++)
+		{
+		for(TInt ii=0;ii<10;ii++)
+			{
+			if(count>EEikColorLabelHighlightFullEmphasis) break;
+					
+			TRect rect(TPoint(xPos,yPos),TSize(KWidth,KHeight));
+			gc.SetBrushColor(iEikonEnv->ControlColor(STATIC_CAST(TLogicalColor,count),*this));
+			gc.DrawRect(rect);
+				
+			xPos+=xInc;
+			TRAPD(err,
+				HBufC* text=HBufC::NewLC(1024);
+				TPtr textPointer=text->Des();
+				textPointer.Format((*iLogicalNames)[count]);
+				TextUtils::ClipToFit(textPointer, *(iEikonEnv->AnnotationFont()), KXTextWidth);
+				gc.DrawText(textPointer,TPoint(xPos,yTextPos));
+				CleanupStack::PopAndDestroy(); // text
+				);
+ 		
+		   	__ASSERT_ALWAYS(!err,User::Panic(_L("tcolscm"),err));
+			yTextPos+=yInc;
+			yPos+=yInc;
+			xPos-=xInc;
+
+			count++;
+			}
+		xPos+=xInc+KXTextWidth+KXSpacing;
+		yTextPos=KYTextStart;
+		yPos=KYStart;
+		}
+	}
+
+/**
+   The method is an override from CCoeControl. The method handles key events of the control.
+ */
+TKeyResponse CColorSchemeControl::OfferKeyEventL(const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
+	{
+	return EKeyWasNotConsumed;
+	}
+
+CColorSchemeControl::~CColorSchemeControl()
+	{
+	delete iLogicalNames;
+	}
+
+
+//!*****************************  CBlankerWin. 
+/**
+ Empty Control
+*/
+
+/**
+   The method is an override from CCoeControl. The method draws an empty control.
+ */
+void CBlankerWin::Draw(const TRect& /*aRect*/) const
+	{
+	}
+
+/**
+   The method creates an empty control and sets its extend to fit the entire screen.  
+ */	
+void CBlankerWin::ConstructL()
+    {
+    CreateWindowL();
+    SetExtentToWholeScreen();
+    ActivateL();
+    DrawNow();
+    iCoeEnv->Flush(300000);
+    }
+
+
+
+//!*****************************  A CTColorSchemeAppUi test class. 
+/**
+ The class performs tests to change colour scheme.
+*/
+CTColorSchemeAppUi::CTColorSchemeAppUi(CTmsTestStep* aStep) :
+	CTestAppUi(aStep,KTColscmResourceFilePath)
+	{
+	}
+
+
+/**
+   The method initiates the creation of a control that acts as a runtime
+   colour scheme changer and sets active object with lowest priority for
+   running test in auto mode. It also initializes a colour array by reading
+   a list of available colours from a resource definition.  
+ */
+void CTColorSchemeAppUi::ConstructL()
+    {
+	CTestAppUi::ConstructL();
+
+	ReadCustomColorResourceL();
+
+	iColorSchemeControl=new(ELeave) CColorSchemeControl();
+    iColorSchemeControl->ConstructL(ClientRect());
+	AddToStackL(iColorSchemeControl);
+
+	AutoTestManager().StartAutoTest();
+    }
+
+
+CTColorSchemeAppUi::~CTColorSchemeAppUi()
+    {
+	RemoveFromStack(iColorSchemeControl);
+	delete iColorSchemeControl;
+    }
+
+
+/**
+   The method is an override from CTestAppUi. The method initiates all tests
+   which refresh background with different colors by calling CTColorSchemeAppUi::HandleCommandL().
+ */
+void CTColorSchemeAppUi::RunTestStepL(TInt aNextStep)
+	{
+	switch(aNextStep)
+		{
+	case 1:
+		SetTestStepID(_L("UIF-TCOLSCM-HandleCommandL"));
+		INFO_PRINTF1(_L("Draw color background DEFAULT"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 2:
+		INFO_PRINTF1(_L("Draw color background GRAY"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 3:
+		INFO_PRINTF1(_L("Draw color background LILAC"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 4:
+		INFO_PRINTF1(_L("Draw color background MARAM_GRASS"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 5:
+		INFO_PRINTF1(_L("Draw color background SKY_BLUE"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 6:
+		INFO_PRINTF1(_L("Draw color background BEACH_SAND"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 7:
+		INFO_PRINTF1(_L("Draw color background BLUE_SLATE"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 8:
+		INFO_PRINTF1(_L("Draw color background SKY_BLUE"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 9:
+		INFO_PRINTF1(_L("Draw color background CUSTOM COLOR 1"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 10:
+		INFO_PRINTF1(_L("Draw color background CUSTOM COLOR 2"));
+		HandleCommandL(EAppCmdShowDlg);
+		iChoice++;
+		break;
+	case 11:
+		HandleCommandL(EAppCmdToggleSpane);
+		iChoice = 0;
+		INFO_PRINTF1(_L("End of Test."));
+		RecordTestResultL();
+		CloseTMSGraphicsStep();
+		CTestAppUi::AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+		break;
+	default:
+		break;
+		}
+	}
+
+/**
+   The method creates a colour array by calling EikResourceUtils::CreateColorArrayLC()
+   to read a list of available colours from a resource definition. The method
+   sets a mapping in application colour list between logical colours which
+   specify the colour scheme and physical colours by calling CEikonEnv::SetColor().
+   The method then updates the system color list with application colour list
+   by calling ColorUtils::UpdateSystemColorListL().
+ */
+void CTColorSchemeAppUi::StorePrefsL()
+	{	
+	CColorArray* colorArray=EikResourceUtils::CreateColorArrayLC(iResId,iEikonEnv);
+	for (TInt ii=EColorWindowBackground;ii<=EEikColorLabelHighlightFullEmphasis;ii++)
+		{
+		iEikonEnv->SetColor(((TLogicalColor)ii),colorArray->Color(ii));
+		}
+	ColorUtils::UpdateSystemColorListL(iEikonEnv->FsSession(),iEikonEnv->ColorList());
+	CleanupStack::PopAndDestroy(colorArray);
+	}
+
+
+/**
+   @SYMTestCaseID UIF-TCOLSCM-HandleCommandL
+  
+   @SYMPREQ
+  
+   @SYMTestCaseDesc Tests refreshing the background color of the control.
+  
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+   
+   @SYMTestActions The method performs the following:\n
+   1) Test changing background color of the control
+   2) Toggle between making the Status Pane visible and invisible.
+  
+   @SYMTestExpectedResults Each of the tests should display the sprite as
+   expected for the values assigned to parameters of methods covered by the
+   test.\n
+ */
+void CTColorSchemeAppUi::HandleCommandL(TInt aCommand)
+    {
+    switch (aCommand)
+        {
+    case EEikCmdExit:
+        Exit();
+        break;
+	case EAppCmdToggleSpane:
+		ToggleStatusPane();
+		break;
+	case EAppCmdShowDlg:
+		HandleColorChangesL();
+		break;
+        }
+    }
+
+
+/**
+  The method changes the background of the control.The method calls
+  StorePrefsL() to set the application colour list as the system colour list
+  and accesses the windows server to change the background colour. In order
+  to change the colour a windows server event to change colour scheme is
+  created and the event is send to all windows group of all applications.
+*/
+void CTColorSchemeAppUi::HandleColorChangesL()
+    {
+	switch(iChoice)
+		{
+	case 0:
+		iResId=R_COLOR_SCHEME_ER5;
+		break;
+	case 1:
+		iResId=R_COLOR_SCHEME_GRAY;
+		break;
+	case 2:
+		iResId=R_COLOR_SCHEME_LILAC;
+		break;
+	case 3:
+		iResId=R_COLOR_SCHEME_MARAM_GRASS;
+		break;
+	case 4:
+		iResId=R_COLOR_SCHEME_SKY_BLUE;
+		break;
+	case 5:
+		iResId=R_COLOR_SCHEME_BEACH_SAND;
+		break;
+	case 6:
+		iResId=R_COLOR_SCHEME_BLUE_SLATE;
+		break;
+	case 7:
+		iResId=R_COLOR_SCHEME_SKY_BLUE;
+		break;
+		}
+
+	StorePrefsL();
+
+	iEikonEnv->WsSession().SetAutoFlush(ETrue);
+
+	CArrayFixFlat<TInt> *windowList = new(ELeave) CArrayFixFlat<TInt>(5);
+	CleanupStack::PushL(windowList);
+	iEikonEnv->WsSession().WindowGroupList(windowList);
+
+	TInt count=windowList->Count();
+	for(int ii=0;ii<count;ii++)
+		{
+		TWsEvent event;
+		event.SetType(KUidValueEikColorSchemeChangeEvent);
+		TInt winId=(*windowList)[ii];
+		iEikonEnv->WsSession().SendEventToWindowGroup(winId,event);
+		}
+	
+	CleanupStack::PopAndDestroy(windowList);
+
+	iEikonEnv->WsSession().SetAutoFlush(EFalse);
+	
+	CBlankerWin* win=new(ELeave) CBlankerWin;
+	CleanupStack::PushL(win);
+	win->ConstructL();
+	CleanupStack::PopAndDestroy(win);
+	}
+
+
+/**
+   The method initializes a colour array by calling
+   EikResourceUtils::CreateColorArrayLC() to read a list of available
+   colours from a resource definition. The color array thus created is added
+   to application's colour list by calling CColorList::AddColorArrayL().
+ */
+void CTColorSchemeAppUi::ReadCustomColorResourceL()
+	{
+	CColorArray* colors=EikResourceUtils::CreateColorArrayLC(R_CUSTOM_EXTRA_COLORS,iEikonEnv);
+	iEikonEnv->ColorList().AddColorArrayL(KUidTColscm,colors); // takes ownership
+	CleanupStack::Pop(colors);
+	}
+
+
+/**
+   The method alternatively makes the status pane appear, disappear and refreshes the screen.   
+ */
+void CTColorSchemeAppUi::ToggleStatusPane()
+	{
+	if( iEikonEnv->AppUiFactory()->StatusPane() )
+		{
+		iEikonEnv->AppUiFactory()->StatusPane()->MakeVisible( !iEikonEnv->AppUiFactory()->StatusPane()->IsVisible() );
+		iColorSchemeControl->SetRect( ClientRect() );
+		iColorSchemeControl->DrawNow();
+		}
+	}
+
+
+
+//!*****************************  A CTestColscmStep test class. 
+/**
+ The class creates & sets the application's user interface object.
+*/
+
+CTestColscmStep::CTestColscmStep()
+	{
+	SetTestStepName(KTestColscmStep);
+	}
+
+
+CTestColscmStep::~CTestColscmStep()
+	{
+	}
+
+
+/**
+   The method creates & sets the application's user interface object. 
+ */
+void CTestColscmStep::ConstructAppL(CEikonEnv* aCoe)
+    { // runs inside a TRAP harness
+	aCoe->ConstructL();
+	CTestAppUi* appUi= new (ELeave) CTColorSchemeAppUi(this);
+    aCoe->SetAppUi(appUi);
+    appUi->ConstructL();
+    }
+
+TVerdict CTestColscmStep::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test Colscm step started...."));
+
+	PreallocateHALBuffer();
+	__UHEAP_MARK;
+
+	CEikonEnv* coe=new(ELeave) CEikonEnv;
+	TRAPD(err,ConstructAppL(coe));
+	TEST(err==KErrNone);
+	if (!err)
+		{
+		coe->ExecuteD();
+		}
+
+	REComSession::FinalClose();	
+	__UHEAP_MARKEND;
+
+	INFO_PRINTF1(_L("...Test Colscm step finished!!!"));
+	return TestStepResult();
+	}
+