diff -r bf7481649c98 -r 7f25ef56562d windowing/windowserver/tlib/TESTBASE.CPP --- 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 -#include -#include -#include -#include "TLIB.H" -#include - -// -// 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 && cellGroup()) - 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); - } -