lafagnosticuifoundation/cone/tef/tmultiptrtestcontrol.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/cone/tef/tmultiptrtestcontrol.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,325 @@
+// Copyright (c) 2008-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:
+//
+
+
+#include <coemain.h>
+#include <coecntrl.h>
+#include <coeaui.h>
+
+#include "tmultiptrtestcontrol.h"
+#include "tconemultiptrtestappui.h"
+#include "tconemultiptrconst.h"
+#include "tconemultiptrcompoundstep.h"
+
+
+/**
+ CCoeControl derived class. Acts as both event handler for events comming from wserv and an 
+ event buffer for storing of events. 
+ 
+ @param aWindowOwning defaulted to EFalse
+*/
+void CMultiPtrTestControlBase::ConstructL()
+    {
+    iEventBuffer.SetLengthL(EEventBufferSize);
+    }
+
+
+CMultiPtrTestControlBase::~CMultiPtrTestControlBase()
+    {
+    }
+
+
+TInt CMultiPtrTestControlBase::EventsLeft()
+	{
+	return iEventBuffer.Count();
+	}
+
+
+void CMultiPtrTestControlBase::AddExpectedEvent( TAdvancedPointerEvent& aEvent)
+	{
+	iEventBuffer.Add( &aEvent );
+	}
+
+
+/**
+ Handles events from wserv and does the testing by comparing those with the events from
+ event buffer. If any test fails, it calls the Failed function of CConeMultiPtrTestAppUi
+ which stops the activescheduler. Once all the evnts in buffer are tested it calls 
+ NextSetOfEvents function to continue with other sub test case.
+ */ 
+void CMultiPtrTestControlBase::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+	{
+	CCoeControl::HandlePointerEventL( aPointerEvent );
+
+	if( iPassive )
+		{
+		return;
+		}
+	
+	const TAdvancedPointerEvent* advancedPointerEvent = aPointerEvent.AdvancedPointerEvent();
+	
+	TAdvancedPointerEvent expectedPtrEvent;
+	
+	if( 0 == iEventBuffer.Remove(&expectedPtrEvent) )
+		{
+		NotifyControlL( EMultiPtrTestFailed );
+		return;
+		}
+	
+	TRAPD( err, CheckEventL(expectedPtrEvent, *advancedPointerEvent) );
+	
+	if( ETestFailed == err )
+		{
+		NotifyControlL( EMultiPtrTestFailed );
+		}
+	else if( iEventBuffer.Count() == 0 )
+		{
+		NotifyControlL( EmultiPtrNext );
+		}	
+	
+	}
+
+
+/**
+ Compare the parameters of the received event with those of the anticipated event.
+*/
+void CMultiPtrTestControlBase::CheckEventL(const TAdvancedPointerEvent& aExpectedEvent, const TAdvancedPointerEvent& aActualEvent)
+	{
+	RDebug::Print( _L("ExPtr %d AcPtr %d"), aExpectedEvent.PointerNumber(), aActualEvent.PointerNumber() );
+	RDebug::Print( _L("ExType %d AcType %d"),aExpectedEvent.iType, aActualEvent.iType );
+	RDebug::Print( _L("ExProx %d AcProx %d"), aExpectedEvent.ProximityAndPressure(), aActualEvent.ProximityAndPressure() );
+	RDebug::Print( _L("ExPos X %d Y %d"), aExpectedEvent.iPosition.iX, aExpectedEvent.iPosition.iY );
+	RDebug::Print( _L("AcPos X %d Y %d"), aActualEvent.iPosition.iX, aActualEvent.iPosition.iY );
+	RDebug::Print( _L("ExMod 0x%X AcMod 0x%X"), aExpectedEvent.iModifiers, aActualEvent.iModifiers );
+	
+	TInt err = ETestPassed;
+	
+	if( aExpectedEvent.PointerNumber() != aActualEvent.PointerNumber() )
+		{		
+		RDebug::Print( _L("*** Pointer numbers differ") );
+		err = ETestFailed;
+		}
+
+	if ( aExpectedEvent.iPosition != aActualEvent.iPosition )
+		{	
+		RDebug::Print( _L("*** Position data differs") );
+		err = ETestFailed;
+		}
+	
+	if ( aExpectedEvent.iParentPosition == aActualEvent.iParentPosition )
+		{
+		RDebug::Print( _L("*** ParentPosition data differs") );
+		err = ETestFailed;
+		}
+	
+	if( aExpectedEvent.iType != aActualEvent.iType )
+		{
+		RDebug::Print( _L("*** Type data differs") );
+		err = ETestFailed;
+		}
+
+	// Disregard other modifiers, as build machines often have numlock, scroll-lock etc on.
+	if( !(aActualEvent.iModifiers & EModifierAdvancedPointerEvent) )
+		{	
+		RDebug::Print( _L("*** Key modifier flags differ") );
+		err = ETestFailed;
+		}
+
+	if( aExpectedEvent.ProximityAndPressure() != aActualEvent.ProximityAndPressure() )
+		{
+		RDebug::Print( _L("*** Proximity/pressure data differs") );
+		err = ETestFailed;
+		}
+
+	
+	if( ETestPassed != err )
+		{
+		RDebug::Print( _L("") );
+		User::Leave( err );
+		}
+	
+	RDebug::Print( _L("") );
+	}
+
+
+TBool CMultiPtrTestControlBase::Captures()
+	{
+	return CapturesPointer();
+	}
+
+
+void CMultiPtrTestControlBase::SetDrags()
+	{
+	Window().PointerFilter( (EPointerFilterMove | EPointerFilterDrag), 0 );
+	}
+
+
+void CMultiPtrTestControlBase::SetGrabs()
+	{
+	Window().SetPointerGrab( ETrue );
+	}
+
+
+void CMultiPtrTestControlBase::SetPassive( TBool aPassive )
+	{
+	iPassive = aPassive;
+	}
+
+
+//
+/**
+ A derived simple control
+ for use with CConeMultiPtrTestAppUi
+*/
+
+/**
+ PV in CMultiPtrTestControlBase
+*/
+void CMultiPtrTestControl::NotifyControlL( TInt aNotify )
+	{
+	switch( aNotify )
+		{
+	case EMultiPtrTestFailed:
+		iAppUi->Failed();
+		break;
+		
+	case EmultiPtrNext:	
+		iAppUi->NextSetOfEventsL();
+		break;
+		
+	default:
+		User::Leave( KErrArgument );
+		break;
+		}
+	}
+
+
+void CMultiPtrTestControl::Draw( const TRect& ) const
+	{
+	CWindowGc& gc=SystemGc();
+	
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbBlue);
+	gc.DrawRect(Rect());	
+	}
+
+
+
+CMultiPtrTestControl* CMultiPtrTestControl::NewL( TPoint aOrigin, TSize aSize )
+	{
+	CMultiPtrTestControl* self = new(ELeave) CMultiPtrTestControl;
+	CleanupStack::PushL( self );
+	self->ConstructL( aOrigin, aSize );
+	CleanupStack::Pop();
+	
+	return self;
+	}
+
+
+CMultiPtrTestControl::CMultiPtrTestControl()
+	{
+	
+	}
+
+
+void CMultiPtrTestControl::ConstructL( TPoint aOrigin, TSize aSize )
+	{
+	CMultiPtrTestControlBase::ConstructL();
+	iAppUi  = static_cast<CConeMultiPtrTestAppUi*>(ControlEnv()->AppUi());
+	
+	CreateWindowL();
+	Window().EnableAdvancedPointers();
+	SetExtent( aOrigin, aSize );
+    ActivateL();	
+	}
+
+
+CMultiPtrTestControl::~CMultiPtrTestControl()
+	{
+	}
+
+
+//
+/**
+ A derived simple control
+ for use with CConeMultiPtrCompoundTestAppUi
+*/
+
+/**
+ PV in CMultiPtrTestControlBase
+*/
+void CMultiPtrTestCompoundAppUiControl::NotifyControlL( TInt aNotify )
+	{
+	switch( aNotify )
+		{
+	case EMultiPtrTestFailed:
+		iAppUi->Failed();
+		break;
+		
+	case EmultiPtrNext:	
+		iAppUi->NextSetOfEventsL();
+		break;
+		
+	default:
+		User::Leave( KErrArgument );
+		break;
+		}
+	}
+
+
+void CMultiPtrTestCompoundAppUiControl::Draw( const TRect& ) const
+	{
+	CWindowGc& gc=SystemGc();
+	
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbRed);
+	gc.DrawRect(Rect());	
+	}
+
+
+
+CMultiPtrTestCompoundAppUiControl* CMultiPtrTestCompoundAppUiControl::NewL( TPoint aOrigin, TSize aSize )
+	{
+	CMultiPtrTestCompoundAppUiControl* self = new(ELeave) CMultiPtrTestCompoundAppUiControl;
+	CleanupStack::PushL( self );
+	self->ConstructL( aOrigin, aSize );
+	CleanupStack::Pop();
+	
+	return self;
+	}
+
+
+CMultiPtrTestCompoundAppUiControl::CMultiPtrTestCompoundAppUiControl()
+	{
+	
+	}
+
+
+void CMultiPtrTestCompoundAppUiControl::ConstructL( TPoint aOrigin, TSize aSize )
+	{
+	CMultiPtrTestControlBase::ConstructL();
+	iAppUi  = static_cast<CConeMultiPtrCompoundTestAppUi*>(ControlEnv()->AppUi());
+	
+	CreateWindowL();
+	Window().EnableAdvancedPointers();
+	SetExtent( aOrigin, aSize );
+    ActivateL();	
+	}
+
+
+CMultiPtrTestCompoundAppUiControl::~CMultiPtrTestCompoundAppUiControl()
+	{
+	}
+