lafagnosticuifoundation/clockanim/tef/TCLCK1STEP.CPP
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/clockanim/tef/TCLCK1STEP.CPP	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,417 @@
+// Copyright (c) 2005-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:
+// test code for the clock DLL
+// $Workfile:   TCLCK1.CPP  $
+// $Revision:   1.7  $
+// $Author:     DougF  $
+// $Date:       07 Jul 1999 16:16:30  $
+// 
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+#include <e32keys.h>
+#include <coemain.h>
+#include <coedef.h>
+#include <coeaui.h>
+#include <coecntrl.h>
+#include <clock.h>
+#include <basched.h>
+
+#include <mbs1.mbg>
+#include "TCLCK1STEP.h"
+
+
+
+#define TCLCK1_MBM _L("z:\\system\\data\\MBS1.MBM")
+#define CLOCK EMbmMbs1Clock
+#define CLOCKMSK EMbmMbs1Clockmsk
+
+// classes
+// main functions
+
+CTestClck1Ui::CTestClck1Ui(CTmsTestStep* aStep) :
+CTestCoeAppUi(aStep)
+	{}
+
+
+void CTestClck1Ui::ConstructL()
+	{
+	CTestCoeAppUi::ConstructL();
+	iControl=new(ELeave) CClk1Control;
+	AddToStackL(iControl,ECoeStackPriorityDefault,ECoeStackFlagOwnershipTransfered);
+//	appUi->AddToStackL(control,ECoeStackPriorityDefault,ECoeStackFlagOwnershipTransfered);
+	iControl->ConstructL();
+
+	AutoTestManager().StartAutoTest();
+	}
+
+/**
+   @SYMTestCaseID UIF-Clock-TClock1
+ */
+
+void CTestClck1Ui::RunTestStepL(TInt aNumStep)
+	{
+	TKeyEvent theKeyEvent;
+	TEventCode theType = EEventKey;
+	
+	//only for debug
+	User::After(TTimeIntervalMicroSeconds32(1000000));
+	
+	
+	switch(aNumStep)
+		{
+		case 1:
+		SetTestStepID(_L("UIF-Clock-TClock1"));
+		theKeyEvent.iCode = EKeyEnter;
+		theKeyEvent.iModifiers = 0;
+		
+		iControl->OfferKeyEventL(theKeyEvent, theType);
+		INFO_PRINTF1(_L("Show analog & digital clocks"));
+		break;
+		
+		case 2: case 3: case 4: case 5:
+		theKeyEvent.iCode = EKeyLeftArrow;
+		theKeyEvent.iModifiers = 0;
+		
+		iControl->OfferKeyEventL(theKeyEvent, theType);
+		INFO_PRINTF1(_L("Change universal time backward"));
+		break;
+
+		case 6: case 7: case 8: case 9:
+		theKeyEvent.iCode = EKeyRightArrow;
+		theKeyEvent.iModifiers = 0;
+		
+		iControl->OfferKeyEventL(theKeyEvent, theType);
+		INFO_PRINTF1(_L("Change universal time forward"));
+		break;
+
+		case 10:
+		theKeyEvent.iCode = '*';
+		theKeyEvent.iModifiers = 0;
+		
+		iControl->OfferKeyEventL(theKeyEvent, theType);
+		INFO_PRINTF1(_L("Change clock separator"));
+		break;
+
+		case 11:  
+		theKeyEvent.iCode = EKeySpace;
+		theKeyEvent.iModifiers = EModifierShift;
+		
+		iControl->OfferKeyEventL(theKeyEvent, theType);
+		INFO_PRINTF1(_L("Set a new background color"));
+		break;
+
+		case 12:  
+		theKeyEvent.iCode = EKeySpace;
+		theKeyEvent.iModifiers = 0;
+		
+		iControl->OfferKeyEventL(theKeyEvent, theType);
+		INFO_PRINTF1(_L("Restore previos background color"));
+		break;
+
+		case 13:
+		theKeyEvent.iCode = EKeyEnter;
+		theKeyEvent.iModifiers = EModifierShift;
+		
+		iControl->OfferKeyEventL(theKeyEvent, theType);
+		INFO_PRINTF1(_L("hide clocks"));
+		RecordTestResultL();
+		CloseTMSGraphicsStep();
+		break;
+
+		case 14:
+			AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+		}
+	}
+
+
+void CTClck1Step::ConstructAppL(CCoeEnv* aCoeEnv)
+	{
+	aCoeEnv->ConstructL();
+	CTestClck1Ui* appUi=new(ELeave) CTestClck1Ui(this);
+	appUi->ConstructL();
+	aCoeEnv->SetAppUi(appUi);
+	}
+
+CTClck1Step::~CTClck1Step()
+/**
+   Destructor
+ */
+	{
+	}
+
+CTClck1Step::CTClck1Step()
+/**
+   Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTClck1Step);
+	}
+
+TVerdict CTClck1Step::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test Started"));
+	CCoeEnv* coeEnv=new CCoeEnv;
+	if (coeEnv==NULL)
+		{
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+	TRAPD(error, ConstructAppL(coeEnv));
+	if (error!=KErrNone)
+		{
+		delete coeEnv;
+		SetTestStepResult(EFail);
+		return TestStepResult();
+		}
+	coeEnv->ExecuteD();
+	INFO_PRINTF1(_L("Test Finished"));
+	return TestStepResult();
+	}
+
+
+// CClck1DestructableFont
+
+CClck1DestructableFont::CClck1DestructableFont(CWsScreenDevice* aScreenDevice)
+	:iScreenDevice(aScreenDevice)
+	{
+	}
+
+void CClck1DestructableFont::ConstructL(const TFontSpec& aFontSpec)
+	{
+	User::LeaveIfError(iScreenDevice->GetNearestFontInTwips((CFont*&)iFont, aFontSpec));
+	}
+
+CClck1DestructableFont::~CClck1DestructableFont()
+	{
+	iScreenDevice->ReleaseFont(iFont); // N.B. do not need to do "delete iFont"
+	}
+
+TInt CClck1DestructableFont::Handle() const
+	{
+	return iFont->Handle();
+	}
+
+// CClk1Control
+
+CClk1Control::CClk1Control()
+	:iBackgroundColor(85, 85, 85),
+	 iAnimDll(iCoeEnv->WsSession()),
+	 iDigitalClock0Position(350, 125),
+	 iDigitalClock0Size(180, 70),
+	 iAnalogClock0Position(10, 0),
+	 iAnalogClock0Size(300, 222),
+	 iUniversalTimeOffset(0)
+	{
+	__DECLARE_NAME(_S("CClk1Control"));
+
+	__ASSERT_DEBUG(iDigitalClock0==NULL, User::Panic(_L("Clock test-code"), 1));
+	__ASSERT_DEBUG(iAnalogClock0==NULL, User::Panic(_L("Clock test-code"), 2));
+	}
+
+void CClk1Control::ConstructL()
+	{
+	// CONE construction stuff
+	CreateBackedUpWindowL(iCoeEnv->RootWin());
+	SetExtent(TPoint(10, 10), TSize(620, 220));
+	ActivateL();
+	iCoeEnv->WsSession().Flush();
+
+	User::LeaveIfError(iAnimDll.Load(_L("CLOCKA.DLL")));
+
+	// clock construction stuff
+	CreateDigitalClocksL();
+	CreateAnalogClocksL();
+	}
+
+CClk1Control::~CClk1Control()
+	{
+	if (iDigitalClock0!=NULL)
+		iDigitalClock0->Destroy();
+	if (iAnalogClock0!=NULL)
+		iAnalogClock0->Destroy();
+	iAnimDll.Close();
+	}
+
+TKeyResponse CClk1Control::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+	{
+	if (aType==EEventKey)
+		{
+		TInt adjust=0;
+		switch (aKeyEvent.iCode)
+			{
+		case CTRL('e'):
+			iCoeEnv->Flush();
+			CBaActiveScheduler::Exit();
+			break;
+		case EKeySpace:
+			if (aKeyEvent.iModifiers&EModifierShift)
+				iDigitalClock0->SetBackgroundColor(TRgb(85, 85, 85), TRgb(0, 0, 0));
+			else
+				iDigitalClock0->SetBackgroundColor(TRgb(170, 170, 170), TRgb(85, 85, 85));
+			break;
+		case EKeyEnter:
+			if (aKeyEvent.iModifiers&EModifierShift)
+				{
+				iDigitalClock0->SetVisible(EFalse);
+				iAnalogClock0->SetVisible(EFalse);
+				}
+			else
+				{
+				iDigitalClock0->SetVisible(ETrue);
+				iAnalogClock0->SetVisible(ETrue);
+				}
+			break;
+		case '$':
+		case '%':
+		case '^':
+		case '&':
+		case '+':
+		case '-':
+		case '*':
+		case '/':
+		case 'S':
+		case 's':
+		case '\\':
+		case ':':
+			{
+			TLocale locale;
+			locale.Refresh();
+#pragma warning (disable: 4710)
+			locale.SetTimeSeparator(aKeyEvent.iCode, 1);
+			locale.SetTimeSeparator(aKeyEvent.iCode, 2);
+#pragma warning (default: 4710)
+			locale.Set();
+			}
+			break;
+		case EKeyLeftArrow:
+		case EKeyUpArrow:
+			adjust=-3600;
+			goto adjustClock;
+		case EKeyRightArrow:
+		case EKeyDownArrow:
+			adjust=3600;
+			goto adjustClock;
+		adjustClock:
+			iUniversalTimeOffset+=adjust;
+			iDigitalClock0->SetUniversalTimeOffset(iUniversalTimeOffset);
+			iAnalogClock0->SetUniversalTimeOffset(iUniversalTimeOffset);
+			break;
+		case 'U':
+		case 'u':
+			iDigitalClock0->UpdateDisplay();
+			iAnalogClock0->UpdateDisplay();
+			break;
+		case 'D':
+		case 'd':
+			iDigitalClock0->Draw();
+			iAnalogClock0->Draw();
+			break;
+			}
+		}
+
+	return EKeyWasConsumed;
+	}
+
+void CClk1Control::Draw(const TRect&) const
+	{
+	CGraphicsContext& systemGc=SystemGc();
+	systemGc.SetPenStyle(CGraphicsContext::ENullPen);
+	systemGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	systemGc.SetBrushColor(iBackgroundColor);
+	systemGc.DrawRect(Rect());
+	}
+
+void CClk1Control::CreateDigitalClocksL()
+	{
+	TMargins margins;
+	margins.iLeft=0;
+	margins.iRight=0;
+	margins.iTop=0;
+	margins.iBottom=0;
+	// construct digital clock
+	STimeDeviceShadow digitalClock0Shadow;
+	digitalClock0Shadow.iIsOn=ETrue;
+	digitalClock0Shadow.iColor=TRgb(85, 85, 85);
+	digitalClock0Shadow.iOffset.SetXY(2, 2);
+	//
+	iDigitalClock0=new(ELeave) RDigitalClock(iAnimDll, BackedUpWindow());
+	iDigitalClock0->ConstructL(TTimeIntervalSeconds(30*60), iDigitalClock0Position, iDigitalClock0Size, margins, digitalClock0Shadow, TRgb(170, 170, 170), 1);
+	//
+	TBuf<64> digitalClock0Format0=_L("%-B%J%:1%T%+B");
+	CClck1DestructableFont* digitalClock0Font0=new(ELeave) CClck1DestructableFont(iCoeEnv->ScreenDevice());
+	CleanupStack::PushL(digitalClock0Font0);
+	TFontSpec digitalClock0FontSpec0(_L("arial"), iCoeEnv->ScreenDevice()->VerticalPixelsToTwips(25));
+	digitalClock0FontSpec0.iFontStyle.SetPosture(EPostureItalic);
+	digitalClock0FontSpec0.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+	digitalClock0Font0->ConstructL(digitalClock0FontSpec0);
+	iDigitalClock0->AddTextSectionL(TDigitalDisplayTextSection(digitalClock0Font0->Handle(), TRgb(0, 0, 0),
+																EDigitalDisplayHorizontalTextAlignmentCenter,
+																EDigitalDisplayVerticalTextAlignmentCenterExclDescent,
+																0, 0, digitalClock0Format0));
+	//
+	CleanupStack::PopAndDestroy(); // pop and destroy digitalClock0Font0
+	}
+
+void CClk1Control::CreateAnalogClocksL()
+	{
+	CWsScreenDevice* screenDevice=iCoeEnv->ScreenDevice();
+	TMargins margins;
+	margins.iLeft=0;
+	margins.iRight=0;
+	margins.iTop=0;
+	margins.iBottom=0;
+	// construct analog clock
+	//
+	STimeDeviceShadow  analogClock0Shadow;
+	analogClock0Shadow.iIsOn=ETrue;
+	analogClock0Shadow.iColor=TRgb(85, 85, 85);
+	analogClock0Shadow.iOffset.SetXY(4, 4);
+	//
+	CFbsBitmap* analogClock0Face=new(ELeave) CFbsBitmap;
+	CleanupStack::PushL(analogClock0Face);
+	User::LeaveIfError(analogClock0Face->Load(TCLCK1_MBM, CLOCK));
+	analogClock0Face->SetSizeInTwips(screenDevice);
+	CFbsBitmap* analogClock0FaceMask=new(ELeave) CFbsBitmap;
+	CleanupStack::PushL(analogClock0FaceMask);
+	User::LeaveIfError(analogClock0FaceMask->Load(TCLCK1_MBM, CLOCKMSK));
+	analogClock0Face->SetSizeInTwips(screenDevice);
+	//
+	iAnalogClock0=new(ELeave) RAnalogClock(iAnimDll, BackedUpWindow());
+	iAnalogClock0->ConstructL(TTimeIntervalSeconds(30*60), iAnalogClock0Position, iAnalogClock0Size, margins, analogClock0Shadow,
+								analogClock0Face->Handle(), analogClock0FaceMask->Handle(), 2);
+	//
+	TRgb black(0, 0, 0);
+	CArrayFix<TPoint>* pointList=new(ELeave) CArrayFixFlat<TPoint>(4);
+	CleanupStack::PushL(pointList);
+	//
+	// N.B. the dimensions/positions of the hand features (i.e. lines and circles) are specified with the hand assumed to be in the
+	// 12 o'clock position, with TPoint(0, 0) being the center of the clock
+	TAnalogDisplayHand analogClock0HourHand(EAnalogDisplayHandOneRevPer12Hours);
+	analogClock0HourHand.AddLine(CGraphicsContext::ESolidPen, black, TSize(4, 4), TPoint(0, 10), TPoint(0, -55));
+	iAnalogClock0->AddHandL(analogClock0HourHand);
+	//
+	TAnalogDisplayHand analogClock0MinuteHand(EAnalogDisplayHandOneRevPerHour);
+	analogClock0MinuteHand.AddLine(CGraphicsContext::ESolidPen, black, TSize(4, 4), TPoint(0, 10), TPoint(0, -70));
+	iAnalogClock0->AddHandL(analogClock0MinuteHand);
+	//
+	CleanupStack::PopAndDestroy(); // pop and destroy pointList
+	CleanupStack::PopAndDestroy(); // pop and destroy analogClock0FaceMask
+	CleanupStack::PopAndDestroy(); // pop and destroy analogClock0Face
+	}
+