author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// Copyright (c) 1995-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: // Test multiple connections to the window server // // #include <e32std.h> #include <e32svr.h> #include "W32STD.H" #include "../tlib/testbase.h" #include "TMAN.H" const TInt EMaxSubState=3; class CMcWindowBase; class TMultiConTest; class CMcConnectionBase : public CTClient { public: CMcConnectionBase(TMultiConTest *aTest); ~CMcConnectionBase(); virtual void ConstructL(); void SubStateChanged(); protected: TMultiConTest *iTest; CMcWindowBase *iWin; CWindowGc *iGc; }; class CMcConnection : public CMcConnectionBase // Sets AutoForeground off { public: CMcConnection(TMultiConTest *aTest); void ConstructL(); }; class CMcWindowGroupAf : public CTWindowGroup { public: CMcWindowGroupAf(CTClient *aClient); void KeyL(const TKeyEvent &aKey, const TTime &aTime); }; class CMcConnectionAf : public CMcConnectionBase // Sets AutoForeground on { public: CMcConnectionAf(TMultiConTest *aTest); void ConstructL(); void KeyL(const TKeyEvent &aKey); }; class CMcConnectionDef : public CMcConnectionBase // Leaves AutoForeground as the default value { public: CMcConnectionDef(TMultiConTest *aTest); void ConstructL(); }; class CMcWindowBase : public CTWin { public: CMcWindowBase(TMultiConTest *aTest); void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); virtual void Draw()=0; virtual void PointerL(const TPointerEvent &pointer,const TTime &)=0; protected: TMultiConTest *iTest; TRgb iBack; }; class CMcWindow : public CMcWindowBase { public: CMcWindow(TMultiConTest *aTest); virtual void Draw(); virtual void PointerL(const TPointerEvent &pointer,const TTime &); }; class CMcWindowAf : public CMcWindowBase { public: CMcWindowAf(TMultiConTest *aTest); virtual void Draw(); virtual void PointerL(const TPointerEvent &pointer,const TTime &); void ConstructL(); }; class CMcWindowDef : public CMcWindowBase { public: CMcWindowDef(TMultiConTest *aTest); virtual void Draw(); virtual void PointerL(const TPointerEvent &pointer,const TTime &); }; class TMultiConTest : public CTestBase { public: TMultiConTest(); ~TMultiConTest(); TestState DoTestL(); void ConstructL(); void EndAutoForegroundTest(); TInt SubState() const; void IncSubState(); private: CMcConnectionAf *iConn1; CMcConnection *iConn2; CMcConnectionDef *iConn3; TSize iWinSize; TInt iState; TInt iSubState; }; GLDEF_C CTestBase *CreateMultiConTest() { return(new(ELeave) TMultiConTest()); } TMultiConTest::TMultiConTest() : CTestBase(_L("MultiCon")) {} TMultiConTest::~TMultiConTest() { delete iConn1; delete iConn2; delete iConn3; } void TMultiConTest::EndAutoForegroundTest() { iConn1->iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); iConn2->iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); iConn3->iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); Request(); } void TMultiConTest::ConstructL() { iConn3=new(ELeave) CMcConnectionDef(this); iConn3->ConstructL(); iConn2=new(ELeave) CMcConnection(this); iConn2->ConstructL(); iConn1=new(ELeave) CMcConnectionAf(this); iConn1->ConstructL(); } // // CMcConnection CMcConnectionBase::CMcConnectionBase(TMultiConTest *aTest) : iTest(aTest) { } CMcConnectionBase::~CMcConnectionBase() { CTWin::Delete(iWin); delete iGc; } void CMcConnectionBase::SubStateChanged() { iWin->Invalidate(); iWs.Flush(); } void CMcConnectionBase::ConstructL() { CTClient::ConstructL(); User::LeaveIfError(iScreen->CreateContext(iGc)); } CMcConnection::CMcConnection(TMultiConTest *aTest) : CMcConnectionBase(aTest) { } void CMcConnection::ConstructL() { CMcConnectionBase::ConstructL(); iGroup=new(ELeave) CTWindowGroup(this); iGroup->ConstructL(); TSize screenSize=iGroup->Size(); TInt winWidth=screenSize.iWidth/3; TInt winHeight=screenSize.iHeight/2-10; iGroup->GroupWin()->AutoForeground(EFalse); CMcWindow *win=new(ELeave) CMcWindow(iTest); win->SetUpL(TPoint(5,5),TSize(winWidth,winHeight),iGroup,*iGc); iWin=win; iWs.Flush(); } CMcConnectionAf::CMcConnectionAf(TMultiConTest *aTest) : CMcConnectionBase(aTest) { } void CMcConnectionAf::ConstructL() { CMcConnectionBase::ConstructL(); iGroup=new(ELeave) CMcWindowGroupAf(this); iGroup->ConstructL(); TSize screenSize=iGroup->Size(); TInt winWidth=screenSize.iWidth/3; TInt winHeight=screenSize.iHeight/2-10; iGroup->GroupWin()->AutoForeground(ETrue); CMcWindowAf *win=new(ELeave) CMcWindowAf(iTest); win->SetUpL(TPoint(winWidth,5),TSize(winWidth,winHeight),iGroup,*iGc); iWin=win; iWs.Flush(); } void CMcConnectionAf::KeyL(const TKeyEvent &aKey) { switch(aKey.iCode) { case ' ': if (iTest->SubState()==0) { iTest->TestL(iGroup->GroupWin()->OrdinalPosition()==0); iTest->IncSubState(); } break; case EKeyEscape: iTest->EndAutoForegroundTest(); break; } } CMcConnectionDef::CMcConnectionDef(TMultiConTest *aTest) : CMcConnectionBase(aTest) { } void CMcConnectionDef::ConstructL() { CMcConnectionBase::ConstructL(); iGroup=new(ELeave) CTWindowGroup(this); iGroup->ConstructL(); iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); TSize screenSize=iGroup->Size(); TInt winWidth=screenSize.iWidth/3-10; TInt winHeight=(screenSize.iHeight/2)-10; CMcWindowDef *win=new(ELeave) CMcWindowDef(iTest); win->SetUpL(TPoint(5+winWidth/2,screenSize.iHeight/2),TSize(winWidth,winHeight),iGroup,*iGc); iWin=win; iWs.Flush(); } // // CMcWindow, base class // // CMcWindowBase::CMcWindowBase(TMultiConTest *aTest) : CTWin(), iTest(aTest) { } void CMcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) { ConstructExtLD(*parent,pos,size); iWin.SetBackgroundColor(iBack); Activate(); AssignGC(aGc); } // // CMcWindow, window used to test multiple connections // // CMcWindow::CMcWindow(TMultiConTest *aTest) : CMcWindowBase(aTest) { iBack=TRgb::Gray256(221); } void CMcWindow::PointerL(const TPointerEvent &pointer,const TTime &) { if (pointer.iType==TPointerEvent::EButton1Down) { switch(iTest->SubState()) { case 1: iTest->TestL(Client()->iGroup->GroupWin()->OrdinalPosition()==1); iTest->IncSubState(); break; } } } void CMcWindow::Draw() { iGc->Clear(); TBuf<0x40> buf; switch(iTest->SubState()) { case 1: buf.Copy(_L("Click on me")); break; case 0: case 2: case 3: buf.Copy(_L("")); break; default: buf.Copy(_L("ERROR")); } iGc->DrawText(buf, TPoint(10,20)); } // // CMcWindowAf, Auto foreground version of CMcWindow // // CMcWindowAf::CMcWindowAf(TMultiConTest *aTest) : CMcWindowBase(aTest) { iBack=TRgb::Gray256(150); } void CMcWindowAf::PointerL(const TPointerEvent &pointer,const TTime &) { if (pointer.iType==TPointerEvent::EButton1Down) { switch(iTest->SubState()) { case 2: iTest->TestL(Client()->iGroup->GroupWin()->OrdinalPosition()==0); iTest->IncSubState(); break; } } } void CMcWindowAf::Draw() { iGc->Clear(); TBuf<0x40> buf; switch(iTest->SubState()) { case 1: case 3: break; case 0: buf.Copy(_L("Press <Space>")); break; case 2: buf.Copy(_L("Click on me")); break; default: buf.Copy(_L("ERROR")); } iGc->DrawText(buf, TPoint(10,20)); } // CMcWindowGroupAf::CMcWindowGroupAf(CTClient *aClient) : CTWindowGroup(aClient) {} void CMcWindowGroupAf::KeyL(const TKeyEvent &aKey, const TTime &) { ((CMcConnectionAf *)iClient)->KeyL(aKey); } // // CMcWindowDef, Default auto foreground version of CMcWindow // // CMcWindowDef::CMcWindowDef(TMultiConTest *aTest) : CMcWindowBase(aTest) { iBack=TRgb::Gray256(236); } void CMcWindowDef::PointerL(const TPointerEvent &pointer,const TTime &) { if (pointer.iType==TPointerEvent::EButton1Down) { switch(iTest->SubState()) { case 3: iTest->TestL(Client()->iGroup->GroupWin()->OrdinalPosition()==0); iTest->IncSubState(); break; } } } void CMcWindowDef::Draw() { iGc->Clear(); TBuf<0x40> buf; switch(iTest->SubState()) { case 0: case 1: case 2: break; case 3: buf.Copy(_L("Click on me")); break; default: buf.Copy(_L("ERROR")); } iGc->DrawText(buf, TPoint(10,20)); } // TInt TMultiConTest::SubState() const { return(iSubState); } void TMultiConTest::IncSubState() { if (iSubState==EMaxSubState) EndAutoForegroundTest(); else { iSubState++; iConn1->SubStateChanged(); iConn2->SubStateChanged(); iConn3->SubStateChanged(); } } TestState TMultiConTest::DoTestL() { switch(iState) { case 0: LogSubTest(_L("MultiCon 1"),1); iState++; return(EContinue); default: return(EFinished); } // return(ENext); }