diff -r 000000000000 -r 2f259fa3e83a commonuisupport/uikon/test/tcolours/tcolscm/TCOLSCM.CPP --- /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 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "TCOLSCM.HRH" +#include + +#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 *windowList = new(ELeave) CArrayFixFlat(5); + CleanupStack::PushL(windowList); + iEikonEnv->WsSession().WindowGroupList(windowList); + + TInt count=windowList->Count(); + for(int ii=0;iiWsSession().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(); + } +