windowing/windowserver/tman/MULTICON.CPP
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tman/MULTICON.CPP	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,446 @@
+// 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);
+ 	}