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