windowing/windowserver/tlib/TESTBASE.CPP
changeset 110 7f25ef56562d
parent 98 bf7481649c98
child 111 29ddb8a72f0e
--- a/windowing/windowserver/tlib/TESTBASE.CPP	Fri Jun 11 14:58:47 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1446 +0,0 @@
-// Copyright (c) 1994-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:
-// Base classes used for building window server test code
-// 
-//
-
-#include <e32std.h>
-#include <w32std.h>
-#include <e32svr.h>
-#include <e32property.h>
-#include "TLIB.H"
-#include <graphics/wsgraphicdrawerinterface.h>
-
-//
-// Test code classes
-//
-// CTWinBase
-// CTBaseWin
-// CTWin
-// CTBackedUpWin
-// CTGroupWin
-// CTClient
-//
-//
-
-_LIT(KTestFontTypefaceName,"DejaVu Sans Condensed");
-
-class CStopTheScheduler : public CAsyncOneShot
-	{
-public:
-	inline CStopTheScheduler(CTClient* aClient,TInt aPriority,TBool aAll) :CAsyncOneShot(aPriority), iClient(aClient), iAll(aAll) {}
-	inline CStopTheScheduler(CTClient* aClient,TInt aPriority) :CAsyncOneShot(aPriority), iClient(aClient) {}
-	inline CStopTheScheduler(TInt aPriority) :CAsyncOneShot(aPriority) {}
-	void RunL();
-public:
-	CTClient* iClient;
-	TBool iAll;
-#ifdef __WINS__
-	TInt iCStopTheSchedulerRunCount;
-#endif
-	};
-
-
-void TbPanic(TInt aPanic)
-	{
-	User::Panic(_L("TestBase"),aPanic);
-	}
-
-EXPORT_C CTWinBase::CTWinBase(TInt aType) : iType(aType)
-	{
-	__DECLARE_NAME(_S("CTWinBase"));
-	}
-
-EXPORT_C CTWinBase *CTWinBase::Parent() const
-	{
-	return((CTWinBase *)WinTreeNode()->Parent());
-	}
-
-EXPORT_C CTWinBase *CTWinBase::NextSibling() const
-	{
-	return((CTWinBase *)WinTreeNode()->NextSibling());
-	}
-
-EXPORT_C CTWinBase *CTWinBase::PrevSibling() const
-	{
-	return((CTWinBase *)WinTreeNode()->PrevSibling());
-	}
-
-EXPORT_C CTClient *CTWinBase::Client() const
-	{
-	return(iOwnerWin->Client());
-	}
-
-EXPORT_C CTBaseWin *CTWinBase::Child() const
-	{
-	return((CTBaseWin *)WinTreeNode()->Child());
-	}
-
-EXPORT_C TPoint CTWinBase::Position() const
-	{
-	return(TPoint(0,0));
-	}
-
-EXPORT_C void CTWinBase::PointerEnter(const TTime&)
-	{
-	}
-
-EXPORT_C void CTWinBase::PointerExit(const TTime&)
-	{
-	}
-
-EXPORT_C void CTWinBase::PointerBufferReady(const TTime&)
-	{
-	}
-
-EXPORT_C void CTWinBase::PointerL(const TPointerEvent&,const TTime&)
-	{
-	}
-
-EXPORT_C void CTWinBase::SwitchOn(const TTime &)
-	{
-	}
-
-EXPORT_C void CTWinBase::ModifiersChanged(const TModifiersChangedEvent &,const TTime &)
-	{
-	}
-
-EXPORT_C void CTWinBase::AdjustOrdinal(TInt)
-	{
-	}
-
-EXPORT_C void CTWinBase::AdjustShadow(TInt)
-	{
-	}
-
-EXPORT_C void CTWinBase::SetVisible(TBool)
-	{
-	}
-
-EXPORT_C TInt CTWinBase::SubType()
-	{
-	return(0);
-	}
-
-EXPORT_C void CTWinBase::ErrorMessage(const TWsErrorMessage&, const TTime &)
-	{
-	}
-
-EXPORT_C void CTWinBase::__DbgTestInvariant() const
-	{
-	WinTreeNode()->__DbgTestInvariant();
-	}
-
-// CTBaseWin //
-
-EXPORT_C CTBaseWin::CTBaseWin(TInt aType) : CTWinBase(aType)
-	{
-	__DECLARE_NAME(_S("CTBaseWin"));
-	}
-
-EXPORT_C CTBaseWin::~CTBaseWin()
-	{
-	}
-
-EXPORT_C void CTBaseWin::RelinquishFocus()
-	{
-	CTWinBase *parent=Parent();
-	CTWindowGroup *group=Group();
-	CTWinBase *child=group->Child();
-	if (child==this)
-		child=child->NextSibling();
-	group->SetCurrentWindow((parent->iType==EWinTypeClient) ? (CTBaseWin *)parent : (CTBaseWin *)child);
-	}
-
-EXPORT_C void CTBaseWin::SetVisible(TBool aState)
-	{
-	BaseWin()->SetVisible(aState);
-	}
-
-EXPORT_C const RWindowTreeNode *CTBaseWin::WinTreeNode() const
-	{
-	return((const RWindowTreeNode *)BaseWin());
-	}
-
-EXPORT_C RWindowTreeNode *CTBaseWin::WinTreeNode()
-	{
-	return((RWindowTreeNode *)BaseWin());
-	}
-
-EXPORT_C void CTBaseWin::InitWin()
-	{
-	}
-
-EXPORT_C void CTBaseWin::ConstructExtLD(CTWinBase &aParent, const TPoint &aPos, const TSize &aSize)
-//
-// Call ConstructL, SetExt and either of these fail destroy this and leave
-//
-	{
-	TRAPD(err,ConstructL(aParent));
-	if (err!=KErrNone)
-		goto celd_err;
-	TRAP(err,SetExtL(aPos,aSize));
-	if (err!=KErrNone)
-		{
-celd_err:
-		delete this;
-		User::Leave(err);
-		}
-	}
-
-EXPORT_C void CTBaseWin::ConstructL(CTWinBase &aParent)
-	{
-	TInt ret;
-	__ASSERT_DEBUG(aParent.iOwnerWin!=NULL,TbPanic(ETestBasePanicNullOwnerWin));
-	iOwnerWin=aParent.iOwnerWin;
-	if ((ret=ConstructWin(aParent))==KErrNone)
-		{
-		//TFontSpec fspec(KTestFontTypefaceName,200);
-		//User::LeaveIfError(Client()->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)iFont, fspec));
-		TFontSpec fspec(KTestFontTypefaceName,17);
-		User::LeaveIfError(Client()->iScreen->GetNearestFontToDesignHeightInPixels((CFont *&)iFont, fspec));
-		AdjustShadow(1);
-		InitWin();
-		iSize=BaseWin()->Size();
-		}
-	User::LeaveIfError(ret);
-	}
-
-EXPORT_C void CTBaseWin::Activate()
-	{
-	BaseWin()->Activate();
-	}
-
-EXPORT_C void CTBaseWin::SetFullScreenExtL()
-	{
-	SetExtL(TPoint(0,0), Parent()->Size());
-	}
-
-EXPORT_C void CTBaseWin::SetDefaultExtL()
-	{
-	TSize size=Parent()->Size();
-	size.iWidth>>=1;
-	size.iHeight>>=1;
-	SetExtL(TPoint(size.iWidth>>1,size.iHeight>>1), size);
-	}
-
-EXPORT_C void CTBaseWin::AssignGC(CWindowGc &aGc)
-	{
-	iGc= &aGc;
-	}
-
-EXPORT_C void CTBaseWin::SetPos(const TPoint &aPos)
-	{
-	BaseWin()->SetPosition(aPos);
-	iPos=aPos;
-	}
-
-EXPORT_C void CTBaseWin::SetInitialPos(const TPoint &aPos)
-	{
-	TSize screen=Client()->iScreen->SizeInPixels();
-	TPoint pos(aPos);
-	TPoint botLeft=pos+iSize;
-	if (botLeft.iX>screen.iWidth)
-		pos.iX=Max(0,pos.iX-botLeft.iX+screen.iWidth);
-	if (botLeft.iY>screen.iHeight)
-		pos.iY=Max(0,pos.iY-botLeft.iY+screen.iHeight);
-	SetPos(pos);
-	}
-
-EXPORT_C void CTBaseWin::SetExtL(const TPoint &aPos, const TSize &aSize)
-	{
-	User::LeaveIfError(BaseWin()->SetExtentErr(aPos,aSize));
-	iPos=aPos;
-	iSize=aSize;
-	Resized(iSize);
-	}
-
-EXPORT_C void CTBaseWin::AdjustSizeL(TInt xMove,TInt yMove,TInt modifiers)
-	{
-	if (modifiers&EModifierCtrl)	// 4 times the movement
-		{
-		xMove<<=2;
-		yMove<<=2;
-		}
-	if (modifiers&EModifierShift)
-		{
-		TSize size(iSize.iWidth+xMove,iSize.iHeight+yMove);
-	
-		if (size.iWidth<0)
-			size.iWidth=0;
-		if (size.iHeight<0)
-			size.iHeight=0;
-		if (modifiers&EModifierCtrl)
-			{
-			TPoint pos(iPos);
-			pos.iX-=(xMove>>1);
-			pos.iY-=(yMove>>1);
-			SetExtL(pos,size);
-			}
-		else
-			SetSizeL(size);
-		}
-	else
-		SetPos(TPoint(iPos+TPoint(xMove,yMove)));
-	}
-
-EXPORT_C void CTBaseWin::SetSizeL(const TSize &aSize)
-	{
-	User::LeaveIfError(BaseWin()->SetSizeErr(aSize));
-	iSize=aSize;
-	Resized(iSize);
-	}
-
-EXPORT_C TSize CTBaseWin::Size() const
-	{
-	return(iSize);
-	}
-
-EXPORT_C void CTBaseWin::Resized(const TSize &aSize)
-//
-	{
-	SetDragRect(TRect(aSize));
-	}
-
-EXPORT_C TPoint CTBaseWin::Position() const
-	{
-	return(BaseWin()->Position());
-	}
-
-EXPORT_C void CTBaseWin::Delete(CTBaseWin *aWin)
-	{
-	RHeap& heap = User::Heap();
-	TUint8* base=heap.Base();
-	TInt size=heap.Size();
-	TUint8* cell=REINTERPRET_CAST(TUint8*,aWin);
-	__ASSERT_ALWAYS(base<=cell && cell<base+size, TbPanic(ETestBasePanicInvalidHeapAddress));
-	CTWinBase *tmp=aWin;
-	CTWinBase *win2;
-	CTBaseWin *curwin=NULL;
-	if (tmp->Group())
-		curwin=tmp->Group()->CurWin();
-	do
-		{
-		win2=tmp;
-		while((tmp=win2->Child())!=NULL)
-			win2=tmp;
-		if ((tmp=win2->NextSibling())==NULL)
-			tmp=win2->Parent();
-		if (curwin==win2)
-			((CTBaseWin *)win2)->RelinquishFocus();
-		delete win2;
-		} while(win2!=aWin);
-	}
-
-EXPORT_C void CTBaseWin::KeyUpL(const TKeyEvent &,const TTime&)
-	{
-	}
-
-EXPORT_C void CTBaseWin::KeyDownL(const TKeyEvent &,const TTime&)
-	{
-	}
-
-EXPORT_C void CTBaseWin::WinKeyL(const TKeyEvent &,const TTime&)
-	{
-	}
-
-EXPORT_C void CTBaseWin::PointerL(const TPointerEvent &aPointer,const TTime&)
-	{
-	if (iDragging)
-		{
-		if (aPointer.iType==TPointerEvent::EDrag)
-			SetPos(aPointer.iParentPosition-iDragPos);
-		else
-			iDragging=EFalse;
-		return;
-		}
-	if (aPointer.iType==TPointerEvent::EButton1Down)
-		{
-		if (aPointer.iModifiers&EModifierCtrl)
-			{
-			if (aPointer.iModifiers&EModifierShift)
-				BaseWin()->SetOrdinalPosition(-1);
-			else
-				BaseWin()->SetOrdinalPosition(0);
-			return;
-			}
-#if defined(__WINS__)
-		else if (aPointer.iModifiers&EModifierShift)
-			__DbgTestInvariant();
-#endif
-		else
-			{
-			Group()->SetCurrentWindow(this);
-			if (iDragRect.Contains(aPointer.iPosition))
-				{
-				iDragging=ETrue;
-				iDragPos=aPointer.iPosition;
-				return;
-				}
-			}
-		}
-	}
-
-EXPORT_C void CTBaseWin::DragDropL(const TPointerEvent &,const TTime &)
-	{
-	}
-
-EXPORT_C void CTBaseWin::AdjustOrdinal(TInt aAdjust)
-	{
-	TInt pos=BaseWin()->OrdinalPosition()+aAdjust;
-	if (pos>=0)
-		BaseWin()->SetOrdinalPosition(pos);
-	}
-
-EXPORT_C void CTBaseWin::AdjustShadow(TInt aAdjust)
-	{
-	iShadow+=aAdjust;
-	if (iShadow<0)
-		iShadow=0;
-	BaseWin()->SetShadowHeight(iShadow);
-	}
-
-EXPORT_C void CTBaseWin::DrawBorder()
-	{
-	iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
-	iGc->DrawRect(TRect(iSize));
-	iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
-	}
-
-EXPORT_C void CTBaseWin::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc, TDisplayMode *aMode,TBool aVisible,TInt aTransparency)
-	{
-	ConstructL(*parent);
-	if (aMode)
-		BaseWin()->SetRequiredDisplayMode(*aMode);
-	SetExtL(pos,size);
-	if (!aVisible)
-		BaseWin()->SetVisible(aVisible);
-	if (aTransparency!=ENoTransparency)
-		{
-		TInt err=((RWindow*)(BaseWin()))->SetTransparencyFactor(TRgb::_Gray256(aTransparency));	
-		User::LeaveIfError(err);	//asked for transparency when not got none!
-		}
-	Activate();
-	AssignGC(aGc);
-	}
-
-EXPORT_C void CTBaseWin::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc, TDisplayMode *aMode)
-	{
-	SetUpL(pos,size,parent,aGc,aMode,ETrue);
-	}
-
-EXPORT_C void CTBaseWin::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc,TBool aVisible)
-	{
-	SetUpL(pos,size,parent,aGc,NULL,aVisible);
-	}
-
-EXPORT_C void CTBaseWin::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
-	{
-	SetUpL(pos,size,parent,aGc,NULL,ETrue);
-	}
-
-EXPORT_C void CTBaseWin::SetDragRect(const TRect &aRect)
-	{
-	BaseWin()->PointerFilter(EPointerFilterDrag,0);	// Clear the drag filter
-	BaseWin()->SetPointerGrab(ETrue);
-	iDragRect=aRect;
-	}
-
-EXPORT_C CTWindowGroup *CTBaseWin::Group() const
-	{
-	return(iOwnerWin);
-	}
-
-EXPORT_C void CTBaseWin::FocusChanged(TBool )
-	{
-	}
-
-EXPORT_C CTBaseWin *CTBaseWin::Next()
-	{
-	CTWinBase *win;
-	CTWinBase *ret=Child();
-	if (ret==NULL)
-		{
-		win=this;
-		while((ret=win->NextSibling())==NULL)
-			{
-			ret=win;
-			win=win->Parent();
-			if (win==NULL)	// Group window
-				{
-				ret=ret->Child();
-				break;
-				}
-			}
-		}
-	return((CTBaseWin *)ret);
-	}
-
-EXPORT_C CTBaseWin *CTBaseWin::Prev()
-	{
-	CTWinBase *par=Parent();
-	CTWinBase *win;
-	CTWinBase *child;
-	if ((win=PrevSibling())==NULL)
-		{
-		if (par->iType==EWinTypeGroup)
-			{
-			CTWinBase *win2=par->Child();
-			do
-				{
-				win=win2;
-				while((win2=win->NextSibling())!=NULL)
-					win=win2;
-				win2=win->Child();
-				} while(win2!=NULL);
-			}
-		else
-			win=par;
-		}
-	else
-		{
-		child=win->Child();
-		while(child!=NULL)
-			{
-			win=child;
-			child=child->NextSibling();
-			}
-		}
-	return((CTBaseWin *)win);
-	}
-
-//EXPORT_C void CTBaseWin::SetDefaultExt()
-//	{
-//	TbPanic(ETestBasePanicUnimplementedBaseFunction);
-//	}
-
-EXPORT_C void CTBaseWin::Draw()
-	{
-	TbPanic(ETestBasePanicUnimplementedBaseFunction);
-	}
-
-EXPORT_C void CTBaseWin::__DbgTestInvariant() const
-	{
-	CTWinBase::__DbgTestInvariant();
-#if defined(__WINS__)
-	if (BaseWin()->Size()!=iSize)
-		User::Invariant();
-	TPoint offset;
-	const CTWinBase *win=this;
-	const CTWinBase *win2;
-	while((win2=win->Parent())!=NULL)
-		{
-		offset+=((CTBaseWin *)win)->BaseWin()->Position();
-		if (BaseWin()->InquireOffset(*(win2->WinTreeNode()))!=offset)
-			User::Invariant();
-		win=win2;
-		}
-#endif
-	}
-
-//CTDrawableWin//
-//	Drawable window					   //
-//
-
-EXPORT_C CTDrawableWin::CTDrawableWin(TInt aType) : CTBaseWin(aType)
-	{
-	__DECLARE_NAME(_S("CTDrawableWin"));
-	}
-
-//CTWin//
-//	Standard client window					   //
-//
-
-EXPORT_C CTWin::CTWin() : CTDrawableWin(EWinTypeClient)
-	{
-	__DECLARE_NAME(_S("CTWin"));
-	}
-
-EXPORT_C CTWin::~CTWin()
-	{
-	if (iFont)
-		Client()->iScreen->ReleaseFont(iFont);
-	iWin.Close();
-	}
-
-EXPORT_C TInt CTWin::ConstructWin(const CTWinBase &aParent)
-	{
-	iWin=RWindow(aParent.Client()->iWs);
-	return(iWin.Construct(*(aParent.WinTreeNode()),(TUint32)this));
-	}
-
-EXPORT_C void CTWin::SetDefaultExt()
-	{
-	TSize size=Parent()->Size();
-	size.iWidth>>=1;
-	size.iHeight>>=1;
-	SetExt(TPoint(size.iWidth>>1,size.iHeight>>1), size);
-	Invalidate();
-	}
-
-EXPORT_C void CTWin::SetExt(const TPoint &aPos, const TSize &aSize)
-	{
-	iWin.SetExtent(aPos,aSize);
-	iPos=aPos;
-	iSize=aSize;
-	Resized(iSize);
-	}
-
-EXPORT_C void CTWin::SetSize(const TSize &aSize)
-	{
-	iWin.SetSize(aSize);
-	iSize=aSize;
-	Resized(iSize);
-	}
-
-EXPORT_C void CTWin::AdjustSize(TInt xMove,TInt yMove,TInt modifiers)
-	{
-	if (modifiers&EModifierCtrl)	// 4 times the movement
-		{
-		xMove<<=2;
-		yMove<<=2;
-		}
-	if (modifiers&EModifierShift)
-		{
-		TSize size(iSize.iWidth+xMove,iSize.iHeight+yMove);
-	
-		if (size.iWidth<0)
-			size.iWidth=0;
-		if (size.iHeight<0)
-			size.iHeight=0;
-		if (modifiers&EModifierCtrl)
-			{
-			TPoint pos(iPos);
-			pos.iX-=(xMove>>1);
-			pos.iY-=(yMove>>1);
-			SetExt(pos,size);
-			}
-		else
-			SetSize(size);
-		Invalidate();
-		}
-	else
-		SetPos(TPoint(iPos+TPoint(xMove,yMove)));
-	}
-
-EXPORT_C RWindowBase *CTWin::BaseWin()
-	{
-	return((RWindowBase *)&iWin);
-	}
-
-EXPORT_C const RWindowBase *CTWin::BaseWin() const
-	{
-	return((const RWindowBase *)&iWin);
-	}
-
-EXPORT_C RDrawableWindow *CTWin::DrawableWin()
-	{
-	return((RDrawableWindow *)&iWin);
-	}
-
-EXPORT_C const RDrawableWindow *CTWin::DrawableWin() const
-	{
-	return((const RDrawableWindow *)&iWin);
-	}
-
-
-EXPORT_C void CTWin::Invalidate()
-	{
-	iWin.Invalidate();
-	}
-
-EXPORT_C void CTWin::Invalidate(const TRect &rect)
-	{
-	iWin.Invalidate(rect);
-	}
-
-EXPORT_C void CTWin::DrawNow()
-	{
-	iWin.Invalidate();
-	iWin.BeginRedraw();
-	iGc->Activate(iWin);
-	iGc->UseFont((CFont *)iFont);
-	Draw();
-	iGc->Deactivate();
-	iWin.EndRedraw();
-	}
-
-EXPORT_C void CTWin::Redraw()
-	{
-	iWin.BeginRedraw();
-	iGc->Activate(iWin);
-	iGc->UseFont((CFont *)iFont);
-	Draw();
-	iGc->Deactivate();
-	iWin.EndRedraw();
-	}
-
-EXPORT_C void CTWin::Redraw(const TRect &aRect)
-	{
-	iWin.BeginRedraw(aRect);
-	iGc->Activate(iWin);
-	iGc->UseFont((CFont *)iFont);
-	Draw();
-	iGc->Deactivate();
-	iWin.EndRedraw();
-	}
-
-//CTBackedUpWin//
-//	Backed up window						   //
-//
-
-EXPORT_C CTBackedUpWin::CTBackedUpWin(TDisplayMode aDisplayMode) : CTDrawableWin(EWinTypeClient), iDisplayMode(aDisplayMode)
-	{
-	__DECLARE_NAME(_S("CTBackedUpWin"));
-	}
-
-EXPORT_C CTBackedUpWin::~CTBackedUpWin()
-	{
-	if (iFont)
-		Client()->iScreen->ReleaseFont(iFont);
-	iWin.Close();
-	}
-
-EXPORT_C TInt CTBackedUpWin::ConstructWin(const CTWinBase &aParent)
-	{
-	iWin=RBackedUpWindow(aParent.Client()->iWs);
-	return(iWin.Construct(*(aParent.WinTreeNode()), iDisplayMode, (TUint32)this));
-	}
-
-EXPORT_C RWindowBase *CTBackedUpWin::BaseWin()
-	{
-	return((RWindowBase *)&iWin);
-	}
-
-EXPORT_C const RWindowBase *CTBackedUpWin::BaseWin() const
-	{
-	return((const RWindowBase *)&iWin);
-	}
-
-EXPORT_C RDrawableWindow *CTBackedUpWin::DrawableWin()
-	{
-	return((RDrawableWindow *)&iWin);
-	}
-
-EXPORT_C const RDrawableWindow *CTBackedUpWin::DrawableWin() const
-	{
-	return((const RDrawableWindow *)&iWin);
-	}
-
-EXPORT_C RBackedUpWindow *CTBackedUpWin::BackedUpWin()
-	{
-	return &iWin;
-	}
-
-EXPORT_C const RBackedUpWindow *CTBackedUpWin::BackedUpWin() const
-	{
-	return &iWin;
-	}
-
-//CTTitledWindow//
-
-EXPORT_C CTTitledWindow::CTTitledWindow() : CTWin(), iWinColor(TRgb(255,255,255)), iPenColor(TRgb(0,0,0))
-	{
-	__DECLARE_NAME(_S("CTTitledWin"));
-	}
-
-EXPORT_C CTTitledWindow::~CTTitledWindow()
-	{
-	}
-
-EXPORT_C void CTTitledWindow::ConstructL(CTWinBase &parent)
-	{
-	CTBaseWin::ConstructL(parent);
-	iTitleHeight=iFont->HeightInPixels()+4;
-	if (iTitle.Length()==0)
-		SetTitle(*Client()->Title());
-	}
-
-EXPORT_C void CTTitledWindow::SetColor(TRgb aRgb)
-	{
-	iWinColor=aRgb;
-	iWin.SetBackgroundColor(aRgb);
-	}
-
-EXPORT_C void CTTitledWindow::Resized(const TSize &aSize)
-	{
-	SetDragRect(TRect(0,0,aSize.iWidth,iTitleHeight));
-	}
-
-EXPORT_C void CTTitledWindow::SetTitle(const TWindowTitle &aTitle)
-	{
-	iTitle=aTitle;
-	}
-
-EXPORT_C void CTTitledWindow::Draw()
-	{
-	iGc->SetPenColor(iPenColor);
-	iGc->SetBrushColor(iWinColor);
-	DrawBorder();
-	iGc->DrawLine(TPoint(0,iTitleHeight),TPoint(iSize.iWidth,iTitleHeight));
-	if (Group()->HasFocus(this))
-		{
-		iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
-		iGc->SetPenColor(~iPenColor);
-		iGc->SetBrushColor(~iWinColor);
-		}
-	iGc->DrawText(iTitle, TRect(1,1,iSize.iWidth-1,iTitleHeight),iFont->AscentInPixels()+1,CGraphicsContext::ECenter);
-	iGc->SetPenColor(iPenColor);
-	iGc->SetBrushColor(iWinColor);
-	}
-
-EXPORT_C void CTTitledWindow::FocusChanged(TBool )
-	{
-	iWin.Invalidate(TRect(0,0,iSize.iWidth,iTitleHeight));
-	}
-
-// CTBlankWindow //
-
-EXPORT_C CTBlankWindow::CTBlankWindow() : CTBaseWin(EWinTypeClient)
-	{
-	__DECLARE_NAME(_S("CTBlankWin"));
-	}
-
-EXPORT_C void CTBlankWindow::ConstructL(CTWinBase &aParent)
-	{
-	CTBaseWin::ConstructL(aParent);
-	}
-
-EXPORT_C CTBlankWindow::~CTBlankWindow()
-	{
-	if (iFont)
-		Client()->iScreen->ReleaseFont(iFont);
-	iWin.Close();
-	}
-
-EXPORT_C void CTBlankWindow::SetExt(const TPoint &aPos, const TSize &aSize)
-	{
-	iWin.SetExtent(aPos,aSize);
-	iPos=aPos;
-	iSize=aSize;
-	Resized(iSize);
-	}
-
-EXPORT_C void CTBlankWindow::SetSize(const TSize &aSize)
-	{
-	iWin.SetSize(aSize);
-	iSize=aSize;
-	Resized(iSize);
-	}
-
-EXPORT_C void CTBlankWindow::SetColor(const TRgb &aRgb)
-	{
-	iWin.SetColor(aRgb);
-	}
-
-EXPORT_C TInt CTBlankWindow::ConstructWin(const CTWinBase &aParent)
-	{
-	iWin=RBlankWindow(aParent.Client()->iWs);
-	return(iWin.Construct(*(aParent.WinTreeNode()),(TUint32)this));
-	}
-
-EXPORT_C const RWindowBase *CTBlankWindow::BaseWin() const
-	{
-	return((const RWindowBase *)&iWin);
-	}
-
-EXPORT_C RWindowBase *CTBlankWindow::BaseWin()
-	{
-	return((RWindowBase *)&iWin);
-	}
-
-//CTWindowGroup//
-
-EXPORT_C CTWindowGroup::CTWindowGroup(CTClient *aClient) : CTWinBase(EWinTypeGroup), iGroupWin(aClient->iWs)
-	{
-	__DECLARE_NAME(_S("CTWindowGroup"));
-	iClient=aClient;
-	iOwnerWin=this;
-	}
-
-EXPORT_C CTWindowGroup::~CTWindowGroup()
-	{
-	iGroupWin.Close();
-	}
-
-EXPORT_C const RWindowTreeNode *CTWindowGroup::WinTreeNode() const
-	{
-	return((const RWindowTreeNode *)&iGroupWin);
-	}
-
-EXPORT_C RWindowTreeNode *CTWindowGroup::WinTreeNode()
-	{
-	return((RWindowTreeNode *)&iGroupWin);
-	}
-
-EXPORT_C void CTWindowGroup::ConstructL()
-	{
-	User::LeaveIfError(iGroupWin.Construct((TUint32)this));
-	}
-
-EXPORT_C TSize CTWindowGroup::Size() const
-	{
-	return(iClient->iScreen->SizeInPixels());
-	}
-
-EXPORT_C void CTWindowGroup::WinKeyL(const TKeyEvent &,const TTime&)
-	{
-	}
-
-EXPORT_C void CTWindowGroup::KeyL(const TKeyEvent &aKey,const TTime&aTime)
-	{
-	if (iCurWin)
-		iCurWin->WinKeyL(aKey,aTime);
-	}
-
-EXPORT_C void CTWindowGroup::KeyUpL(const TKeyEvent &,const TTime&)
-	{
-	}
-
-EXPORT_C void CTWindowGroup::KeyDownL(const TKeyEvent &,const TTime&)
-	{
-	}
-
-EXPORT_C void CTWindowGroup::ClearCurrentWindow()
-	{
-	iCurWin=NULL;
-	}
-
-EXPORT_C void CTWindowGroup::SetCurrentWindow(CTBaseWin *aWindow)
-	{
-	SetCurrentWindow(aWindow, EFalse);
-	}
-
-EXPORT_C void CTWindowGroup::SetCurrentWindow(CTBaseWin *aWindow, TBool aLocked)
-	{
-	if (iCurWin!=aWindow)
-		{
-		if (iFocus && iCurWin)
-			iCurWin->FocusChanged(EFalse);
-		iCurWin=aWindow;
-		if (iFocus && iCurWin)
-			iCurWin->FocusChanged(ETrue);
-		}
-	iLocked=aLocked;
-	}
-
-EXPORT_C CTBaseWin *CTWindowGroup::CurWin(void) const
-	{
-	return(iCurWin);
-	}
-
-EXPORT_C void CTWindowGroup::FocusLost()
-	{
-	iFocus=EFalse;
-	if (iCurWin)
-		iCurWin->FocusChanged(EFalse);
-	}
-
-EXPORT_C void CTWindowGroup::FocusGained()
-	{
-	iFocus=ETrue;
-	if (iCurWin)
-		iCurWin->FocusChanged(ETrue);
-	}
-
-EXPORT_C TBool CTWindowGroup::HasFocus(CTBaseWin *aWin) const
-	{
-	return(iFocus && iCurWin==aWin);
-	}
-
-EXPORT_C CTClient *CTWindowGroup::Client() const
-	{
-	return(iClient);
-	}
-
-EXPORT_C CTWindowGroup *CTWindowGroup::Group() const
-	{
-	return((CTWindowGroup *)this);
-	}
-
-EXPORT_C void CTWindowGroup::PasswordL(const TTime &)
-	{
-	TbPanic(ETestBasePanicPassword);
-	}
-
-EXPORT_C void CTWindowGroup::MessageReady(const TWsEvent &)
-//
-// Dummy handler for un-exepected messages (could panic, but better not as the app sending the messages fault really not ours)
-//
-	{
-	}
-
-EXPORT_C void CTWindowGroup::ScreenDeviceChanged()
-	{
-	TPixelsAndRotation sizeAndRotation;
-	Client()->iScreen->GetDefaultScreenSizeAndRotation(sizeAndRotation);
-	Client()->iScreen->SetScreenSizeAndRotation(sizeAndRotation);
-	}
-
-EXPORT_C void CTWindowGroup::UserEvent(TInt /*aEventType*/)
-	{
-	}
-
-
-// CTClient //
-
-EXPORT_C CTClient::CTClient()
-	{
-	__DECLARE_NAME(_S("CTClient"));
-	}
-
-EXPORT_C void CTClient::DestroyWindows()
-	{
-	if (iGroup)
-		{
-		CTBaseWin *win;
-		if (iGroup->GroupWin()->WsHandle()!=0)	// Check it was created okay
-			while((win=iGroup->Child())!=NULL && ((TUint)win)!=ENullWsHandle)
-				CTBaseWin::Delete(win);
-		delete iGroup;
-		iGroup=NULL;
-		}
-	}
-
-EXPORT_C CTClient::~CTClient()
-	{
-	DestroyWindows();
-	delete iGc;
-	delete iEventHandler;
-	delete iRedrawEventHandler;
-	delete iScreen;
-	TInt count=iWs.ResourceCount();
-	__ASSERT_ALWAYS(count==0,TbPanic(ETestBasePanicResourceCount));
-	iWs.Close();
-	}
-
-EXPORT_C void CTClient::ConstructEventHandlerL()
-	{
-	iEventHandler=new(ELeave) CTEvent(&iWs);
-	iEventHandler->Construct();
-	}
-
-EXPORT_C void CTClient::ConstructL()
-	{
-	User::LeaveIfError(iWs.Connect());
-	iScreen=new(ELeave) CWsScreenDevice(iWs);
-	User::LeaveIfError(iScreen->Construct(iScreenNumber));
-	iRedrawEventHandler=new(ELeave) CTRedraw(&iWs);
-	iRedrawEventHandler->Construct();
-	ConstructEventHandlerL();
-	iGc=new(ELeave) CWindowGc(iScreen);
-	User::LeaveIfError(iGc->Construct());
-	iTitle.Copy(RThread().FullName());
-	}
-
-EXPORT_C void CTClient::ResetFocus()
-	{
-	iGroup->ClearCurrentWindow();
-	iGroup->SetCurrentWindow(iGroup->Child());
-	}
-
-EXPORT_C TWindowTitle *CTClient::Title()
-	{
-	return(&iTitle);
-	}
-
-EXPORT_C TBool CTClient::QueueRead()
-	{
-	TBool ret=iEventHandler->IsActive();
-	if (ret==EFalse)
-		iEventHandler->Request();
-	return(ret);
-	}
-
-EXPORT_C void CTClient::CancelRead()
-	{
-	iEventHandler->Cancel();
-	}
-
-EXPORT_C void CTClient::SetCancelFunction(const TCallBack &aCallBack)
-	{
-	iEventHandler->SetCancelFunction(aCallBack);
-	}
-
-EXPORT_C void CTClient::CancelRedrawRead()
-	{
-	iRedrawEventHandler->Cancel();
-	}
-
-EXPORT_C void CTClient::SetRedrawCancelFunction(const TCallBack &aCallBack)
-	{
-	iRedrawEventHandler->SetCancelFunction(aCallBack);
-	}
-
-EXPORT_C void CTClient::RequestRedraw()
-	{
-	iRedrawEventHandler->Request();
-	}
-
-EXPORT_C void CTClient::LogMessage(const TLogMessageText &aMessage)
-	{
-	iWs.LogMessage(aMessage);
-	iWs.Flush();
-	}
-
-EXPORT_C TBool CTClient::IsEventWaiting()
-	{
-	iWs.NumWindowGroups();		//Make sure all asyncronus calls have finished
-	return (iEventHandler->iStatus!=KRequestPending);
-	}
-
-TBool CTClient::WaitUntilEventPending(const TRequestStatus& aStatus)
-	{
-	if (aStatus!=KRequestPending)
-		return ETrue;
-	User::After(2000000);		//Need something smarter than this
-	return (aStatus!=KRequestPending);
-	}
-
-EXPORT_C TBool CTClient::WaitUntilRedrawPending()
-	{
-	return WaitUntilEventPending(iRedrawEventHandler->iStatus);
-	}
-
-EXPORT_C TBool CTClient::WaitUntilEventPending()
-	{
-	return WaitUntilEventPending(iEventHandler->iStatus);
-	}
-
-EXPORT_C TInt CTClient::WaitForRedrawsToFinish()
-	{
-	return WaitForEventsToFinish(EFalse);
-	}
-
-EXPORT_C TInt CTClient::WaitForAllEventProcessingToFinish()
-	{
-	return WaitForEventsToFinish(ETrue);
-	}
-
-TInt CTClient::WaitForEventsToFinish(TBool aAll)
-	{
-	CStopTheScheduler* stop=new CStopTheScheduler(this,ETlibRedrawActivePriority-1,aAll);
-	if (!stop)
-		return KErrNoMemory;
-	stop->Call();
-	CActiveScheduler::Start();
-	delete stop;
-	return KErrNone;
-	}
-
-
-// CStopTheScheduler //
-
-void CStopTheScheduler::RunL()
-	{
-#ifdef __WINS__
-	RDebug::Print(_L("CStopTheScheduler::RunL - enter - %d"), iCStopTheSchedulerRunCount);
-#endif
-	if (iClient)
-	    {
-		iClient->iWs.NumWindowGroups();		//Make sure all asyncronus calls have finished
-	    }
-	
-	if (!iClient || (iClient->RedrawHandler()->iStatus==KRequestPending && (!iAll || iClient->EventHandler()->iStatus==KRequestPending)))
-	    {
-#ifdef __WINS__
-	    RDebug::Print(_L("CStopTheScheduler::RunL - Stop - %d"), iCStopTheSchedulerRunCount);
-#endif
-	    CActiveScheduler::Stop();
-	    }
-	else
-	    {  
-#ifdef __WINS__
-	    RDebug::Print(_L("CStopTheScheduler::RunL - Call - %d"), iCStopTheSchedulerRunCount);
-#endif
-	    Call();
-	    }
-#ifdef __WINS__
-    RDebug::Print(_L("CStopTheScheduler::RunL - exit - %d"), iCStopTheSchedulerRunCount);
-    iCStopTheSchedulerRunCount++;
-#endif
-	}
-
-void WaitForRedrawsToFinish()
-	{
-	CStopTheScheduler* ps=new CStopTheScheduler(ETlibRedrawActivePriority-1);
-	if(ps)
-		{
-		ps->Call();
-		CActiveScheduler::Start();
-		delete ps;
-		}
-	}
-
-
-// CTEventBase //
-
-EXPORT_C CTEventBase::CTEventBase(RWsSession *aWs, TInt aPriority) : CActive(aPriority), iWs(aWs)
-	{
-	}
-
-EXPORT_C CTEventBase::~CTEventBase()
-	{
-	}
-
-EXPORT_C void CTEventBase::Construct()
-	{
-	CActiveScheduler::Add(this);
-	Request();
-	}
-
-EXPORT_C void CTEventBase::RunL()
-	{
-	if (iStatus==KErrNone)
-		{
-		++iCount;
-		TRAPD(err,doRunL());
-		if (err<=0)	// Positive value means this has been destroyed
-			{
-			if (iCancelRequested)
-				CancelHandler();
-			Request();
-//			if (err!=KErrNone)
-//				User::LeaveIfError(err); Should have a guaranteed to work error dialog here I guess
-			}
-		}
-	else if (iStatus==KErrCancel && iCancelRequested)
-		{
-		CancelHandler();
-		Request();
-		}
-	else
-		TbPanic(ETestBasePanicEventStat);
-	}
-
-void CTEventBase::SetCancelFunction(const TCallBack &aCallBack)
-	{
-	if (!IsActive() && iCancelRequested)
-		TbPanic(ETestBasePanicCancelFunction);
-	iCancelCallBack=aCallBack;
-	iCancelRequested=ETrue;
-	DoCancel();
-	}
-
-EXPORT_C void CTEventBase::CancelHandler()
-	{
-	iCancelCallBack.CallBack();
-	iCancelRequested=EFalse;
-	}
-
-// TLibWsEvent //
-
-EXPORT_C CTWindowGroup *TlibWsEvent::WindowGroup()
-	{
-	CTWindowGroup *group=(CTWindowGroup *)Handle();
-	__ASSERT_DEBUG(group->iType==EWinTypeGroup,TbPanic(ETestBasePanicWinType));
-	return(group);
-	}
-
-EXPORT_C CTBaseWin *TlibWsEvent::BaseWin()
-	{
-	CTBaseWin *win=(CTBaseWin *)Handle();
-	__ASSERT_DEBUG(win->iType==EWinTypeClient || win->iType==EWinTypeGroup,TbPanic(ETestBasePanicWinType));
-	return(win);
-	}
-
-// CTEvent //
-
-EXPORT_C CTEvent::CTEvent(RWsSession *aWs) : CTEventBase(aWs, ETlibWsEventActivePriority)
-	{
-	__DECLARE_NAME(_S("CTEvent"));
-	}
-
-EXPORT_C CTEvent::~CTEvent()
- 	{
-	Cancel();
-	}
-
-EXPORT_C void CTEvent::DoCancel()
-	{
-	iWs->EventReadyCancel();
-	}
-
-EXPORT_C void CTEvent::Request()
-	{
-	iWs->EventReady(&iStatus);
-	SetActive();
-	}
-
-EXPORT_C void CTEvent::LogEvent(const TWsEvent &)
-	{
-	}
-
-EXPORT_C void CTEvent::doRunL()
-	{
-	TlibWsEvent event;
-	
-	iWs->GetEvent(event);
-	LogEvent(event);
-	if (event.Handle()!=0 && event.Handle()!=ENullWsHandle)
-		{
-		switch(event.Type())
-			{
-			case EEventKey:
-				event.WindowGroup()->KeyL(*event.Key(),event.Time());
-				break;
-			case EEventKeyDown:
-				__ASSERT_ALWAYS(event.Key()->iCode==0 && event.Key()->iRepeats==0, TbPanic(ETestBasePanicKeyParams));
-				event.WindowGroup()->KeyDownL(*event.Key(),event.Time());
-				break;
-			case EEventKeyUp:
-				__ASSERT_ALWAYS(event.Key()->iCode==0 && event.Key()->iRepeats==0, TbPanic(ETestBasePanicKeyParams));
-				event.WindowGroup()->KeyUpL(*event.Key(),event.Time());
-				break;
-			case EEventModifiersChanged:
-				event.BaseWin()->ModifiersChanged(*event.ModifiersChanged(),event.Time());
-				break;
-			case EEventPointer:
-				event.BaseWin()->PointerL(*event.Pointer(),event.Time());
-				break;
-			case EEventDragDrop:
-				event.BaseWin()->DragDropL(*event.Pointer(),event.Time());
-				break;
-			case EEventPointerEnter:
-				event.BaseWin()->PointerEnter(event.Time());
-				break;
-			case EEventPointerExit:
-				event.BaseWin()->PointerExit(event.Time());
-				break;
-			case EEventPointerBufferReady:
-				event.BaseWin()->PointerBufferReady(event.Time());
-				break;
-			case EEventSwitchOn:
-				event.BaseWin()->SwitchOn(event.Time());
-				break;
-			case EEventFocusLost:
-				event.WindowGroup()->FocusLost();
-				break;
-			case EEventFocusGained:
-				event.WindowGroup()->FocusGained();
-				break;
-			case EEventPassword:
-				event.WindowGroup()->PasswordL(event.Time());
-				break;
-			case EEventMessageReady:
-				event.WindowGroup()->MessageReady(event);
-				break;
-			case EEventErrorMessage:
-				event.WindowGroup()->ErrorMessage(*event.ErrorMessage(), event.Time());
-				break;
-			case EEventSwitchOff:
-			case EEventKeySwitchOff:
-				{
-				TTimeIntervalMicroSeconds32 ii=1000000;
-				User::After(ii);			//WINS does not always work without this!
-				UserHal::SwitchOff();
-				}
-				break;
-			case EEventScreenDeviceChanged:
-				event.WindowGroup()->ScreenDeviceChanged();
-				break;
-			case EEventNull:
-				break;
-			default:
-				if (event.Type()>=EEventUser)
-					{
-					event.WindowGroup()->UserEvent(event.Type());
-					break;
-					}
-				else
-					{
-					//if not in BufferSecurity test - panic
-					TInt value = EFalse;
-					TInt err = RProperty::Get(KUidWServSecurityTesting,EWServSecTestBufferSecurity,value);
-					if ((err != KErrNone) || (value != (TInt)ETrue))
-						TbPanic(ETestBasePanicInvalidEvent);
-					}
-				break;
-			}
-		}
-	}
-
-EXPORT_C CTRedraw::CTRedraw(RWsSession *aWs) : CTEventBase(aWs, ETlibRedrawActivePriority)
-	{
-	__DECLARE_NAME(_S("CTRedraw"));
-	}
-
-EXPORT_C CTRedraw::~CTRedraw()
-	{
-	Cancel();
-	}
-
-EXPORT_C void CTRedraw::Request()
-	{
-	iWs->RedrawReady(&iStatus);
-	SetActive();
-	}
-
-EXPORT_C void CTRedraw::DoCancel()
-	{
-	iWs->RedrawReadyCancel();
-	}
-
-EXPORT_C void CTRedraw::doRunL()
-	{
-	TWsRedrawEvent redraw;
-	iWs->GetRedraw(redraw);
-	if (redraw.Handle()!=0 && redraw.Handle()!=ENullWsHandle)
-		{
-		__ASSERT_ALWAYS(!redraw.Rect().IsEmpty(),TbPanic(ETestBasePanicNullRedraw));
-		((CTWin *)redraw.Handle())->Redraw(redraw.Rect());
-		}
-	}
-
-EXPORT_C void CTUser::Splat(CTClient *aClient, const TRect &aRect, const TRgb &aRgb)
-	{
-	RBlankWindow win(aClient->iWs);
-	win.Construct(*(aClient->iGroup->WinTreeNode()),1);
-	win.SetColor(aRgb);
-	win.SetExtent(aRect.iTl,aRect.Size());
-	win.Activate();
-	aClient->iWs.Flush();
-	win.Close();
-	}
-
-void doTestLibStartUpL(TInt aScreenNumber, CTClient *&aClient, CActiveScheduler *&aActiveScheduler,CTrapCleanup *&aCleanUpStack,TCreateClientFunc aFunc)
-	{
-	User::LeaveIfNull(aCleanUpStack=CTrapCleanup::New());
-	aActiveScheduler=new(ELeave) CActiveScheduler;
-	CActiveScheduler::Install(aActiveScheduler);
-	aClient=aFunc();
-	aClient->SetScreenNumber(aScreenNumber);
-	aClient->ConstructL();
-	CActiveScheduler::Start();
-	}
-
-EXPORT_C TInt TestLibStartUp(TCreateClientFunc aFunc,TInt aScreenNumber)
-	{
-	__UHEAP_MARK;
-	CTrapCleanup* cleanUpStack=NULL;
-	CActiveScheduler *activeScheduler=NULL;
-	CTClient *client=NULL;
-	TRAPD(err,doTestLibStartUpL(aScreenNumber, client,activeScheduler,cleanUpStack,aFunc));
-	delete client;
-	delete activeScheduler;
-	delete cleanUpStack;
-	__UHEAP_MARKEND;
-	return(err);
-	}
-
-EXPORT_C TInt TestLibStartUp(TCreateClientFunc aFunc)
-	{
-	return TestLibStartUp(aFunc, KDefaultScreen);
-	}
-