--- 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);
- }
-