windowing/windowserver/test/tman/TMMODCHG.CPP
changeset 103 2717213c588a
parent 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/tman/TMMODCHG.CPP	Tue Jun 22 15:21:29 2010 +0300
@@ -0,0 +1,301 @@
+// Copyright (c) 1996-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 modifier changed message
+// 
+//
+
+#include <e32std.h>
+#include <e32svr.h>
+#include "W32STD.H"
+#include "../tlib/testbase.h"
+#include "TMAN.H"
+
+class CTModifiersChangedTest;
+
+class CMCWindow : public CTWin
+	{
+public:
+	CMCWindow(CTModifiersChangedTest *aTest);
+	void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
+	void Draw();
+	void DrawModSetLine(const TDesC &aDes,TInt aModifier,TInt iSettableModifiers);
+protected:
+	CTModifiersChangedTest *iTest;
+	TRgb iBack;
+	TInt iLineHeight;
+	TInt iFontAscent;
+	TInt iYpos;
+	TInt iXpos1;
+	TInt iXpos2;
+	};
+
+class CTEventWindowGroup : public CTWindowGroup
+	{
+public:
+	CTEventWindowGroup(CTClient *aClient, CTModifiersChangedTest *iTest);
+	void ConstructL();
+	void ModifiersChanged(const TModifiersChangedEvent &aModifiersChanged ,const TTime &aTime);
+	void KeyL(const TKeyEvent &aKey,const TTime &aTime);
+private:
+	CTModifiersChangedTest *iTest;
+	};
+
+class CTModifiersChangedTest : public CTestBase
+	{
+public:
+	CTModifiersChangedTest();
+	~CTModifiersChangedTest();
+	TestState DoTestL();
+	void ConstructL();
+	void EndTest();
+	TInt SubState() const;
+	void IncSubState();
+	void BadParams();
+	void ModifierChangedEventsL();
+	void SetModifiersL();
+	void CheckModifierL(TEventModifier aModifier);
+public:
+	TBool iModSetTest;
+	TInt iSettable;
+private:
+	TSize iWinSize;
+	TInt iState;
+	TInt iSubState;
+	CTEventWindowGroup *iEventGroup;
+	CMCWindow *iWin;
+	};
+
+struct TModifierChangedTestsParams
+	{
+	TText *txt;			// Text message telling user what to do
+	TUint changed;
+	TUint state;
+	TUint stateMask;
+	};
+
+LOCAL_D TModifierChangedTestsParams ModifierChangedTests[]={
+#if defined(__WINS__)
+	{(TText *)_S("Press Caps"),EModifierCapsLock,EModifierCapsLock,EModifierCapsLock},
+	{(TText *)_S("Press Caps (again)"),EModifierCapsLock,0,EModifierCapsLock},
+#endif
+	{(TText *)_S("Press left shift"),EModifierShift|EModifierLeftShift,EModifierShift|EModifierLeftShift,EModifierShift|EModifierLeftShift},
+	{(TText *)_S("Release left shift"),EModifierShift|EModifierLeftShift,0,EModifierShift|EModifierLeftShift},
+	{(TText *)_S("Press right shift"),EModifierShift|EModifierRightShift,EModifierShift|EModifierRightShift,EModifierShift|EModifierRightShift},
+	{(TText *)_S("Release right shift"),EModifierShift|EModifierRightShift,0,EModifierShift|EModifierRightShift},
+	{(TText *)_S("Press (left) func"),EModifierFunc|EModifierLeftFunc,EModifierFunc|EModifierLeftFunc,EModifierFunc|EModifierLeftFunc},
+	{(TText *)_S("Release (left) func"),EModifierFunc|EModifierLeftFunc,0,EModifierFunc|EModifierLeftFunc},
+	{(TText *)_S("Press (left) control"),EModifierCtrl|EModifierLeftCtrl,EModifierCtrl|EModifierLeftCtrl,EModifierCtrl|EModifierLeftCtrl},
+	{(TText *)_S("Release (left) control"),EModifierCtrl|EModifierLeftCtrl,0,EModifierCtrl|EModifierLeftCtrl},
+	};
+
+const TInt numTests=sizeof(ModifierChangedTests)/sizeof(ModifierChangedTests[0]);
+
+GLDEF_C CTestBase *CreateModifiersChangedTest()
+	{
+	return(new(ELeave) CTModifiersChangedTest());
+	}
+
+//
+// CTEventWindowGroup class //
+//
+
+CTEventWindowGroup::CTEventWindowGroup(CTClient *aClient, CTModifiersChangedTest *aTest) : CTWindowGroup(aClient), iTest(aTest)
+	{}
+
+void CTEventWindowGroup::ConstructL()
+	{
+	CTWindowGroup::ConstructL();
+	iGroupWin.EnableModifierChangedEvents(EModifierShift|EModifierLeftShift|EModifierRightShift|EModifierCapsLock|
+							EModifierFunc|EModifierLeftFunc|EModifierCtrl|EModifierLeftCtrl,EEventControlAlways);
+	}
+
+void CTEventWindowGroup::ModifiersChanged(const TModifiersChangedEvent &aModifiersChanged ,const TTime &)
+	{
+	TInt ss=iTest->SubState();
+	TInt getMods=Client()->iWs.GetModifierState();	// Double check the mods with get mods
+	if (aModifiersChanged.iChangedModifiers==ModifierChangedTests[ss].changed && 
+		(aModifiersChanged.iModifiers&ModifierChangedTests[ss].stateMask)==ModifierChangedTests[ss].state &&
+		(getMods&ModifierChangedTests[ss].stateMask)==ModifierChangedTests[ss].state)
+		iTest->IncSubState();
+	}
+
+void CTEventWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &)
+	{
+	if (aKey.iCode==EKeyEscape || (aKey.iCode==' ' && iTest->iModSetTest))
+		iTest->EndTest();
+	}
+
+//
+// CMCWindow, class //
+//
+
+CMCWindow::CMCWindow(CTModifiersChangedTest *aTest) : CTWin(), iTest(aTest)
+	{
+	iBack=TRgb::Gray256(230);
+	}
+
+void CMCWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
+	{
+	ConstructExtLD(*parent,pos,size);
+	iWin.SetBackgroundColor(iBack);
+	Activate();
+	AssignGC(aGc);
+	iLineHeight=iFont->HeightInPixels()*5/4;
+	iFontAscent=iFont->AscentInPixels();
+	iXpos1=4;
+	iXpos2=iXpos1+12*iFont->TextWidthInPixels(_L("M"));
+	}
+
+void CMCWindow::DrawModSetLine(const TDesC &aDes,TInt aModifier,TInt iSettableModifiers)
+	{
+	iYpos+=iLineHeight;
+	iGc->DrawText(aDes, TPoint(iXpos1,iYpos));
+	iGc->DrawText(aModifier&iSettableModifiers ? _L("Yes"):_L("No"), TPoint(iXpos2,iYpos));
+	}
+
+void CMCWindow::Draw()
+	{
+	iGc->Clear();
+	if (iTest->iModSetTest)
+		{
+		iYpos=iFontAscent+3;
+		TBuf<32> buf;
+		buf.Format(TRefByValue<const TDesC>(_L("Settable? [0x%4x]")), iTest->iSettable);
+		iGc->DrawText(_L("Modifier"), TPoint(iXpos1,iYpos));
+		iGc->DrawText(buf, TPoint(iXpos2,iYpos));
+		DrawModSetLine(_L("Shift"),EModifierShift,iTest->iSettable);
+		DrawModSetLine(_L("Left Shift"),EModifierLeftShift,iTest->iSettable);
+		DrawModSetLine(_L("Func"),EModifierFunc,iTest->iSettable);
+		DrawModSetLine(_L("Caps"),EModifierCapsLock,iTest->iSettable);
+		DrawModSetLine(_L("NumLock"),EModifierNumLock,iTest->iSettable);
+		DrawModSetLine(_L("Double Click"),EModifierDoubleClick,iTest->iSettable);
+		}
+	else
+		iGc->DrawText(TPtrC(ModifierChangedTests[iTest->SubState()].txt), TPoint(10,20));
+	}
+
+//
+
+CTModifiersChangedTest::CTModifiersChangedTest() : CTestBase(_L("Capture Key"))
+	{}
+
+CTModifiersChangedTest::~CTModifiersChangedTest()
+	{
+	delete iWin;
+	delete iEventGroup;
+	}
+
+void CTModifiersChangedTest::EndTest()
+	{
+	if (iModSetTest)
+		{
+		iModSetTest=EFalse;
+		iWin->Invalidate();
+		}
+	Request();
+	}
+
+void CTModifiersChangedTest::ConstructL()
+	{
+	iWin=new(ELeave) CMCWindow(this);
+	iWin->SetUpL(TPoint(10,10),TSize(240,200),Client()->iGroup, *Client()->iGc);
+	}
+
+TInt CTModifiersChangedTest::SubState() const
+	{
+	return(iSubState);
+	}
+
+void CTModifiersChangedTest::IncSubState()
+	{
+	if (iSubState==(numTests-1))
+		EndTest();
+	else
+		{
+		iSubState++;
+		iWin->Invalidate();
+		}
+	}
+
+void CTModifiersChangedTest::BadParams()
+	{
+	}
+
+void CTModifiersChangedTest::ModifierChangedEventsL()
+	{
+	iEventGroup=new(ELeave) CTEventWindowGroup(Client(), this);
+	iEventGroup->ConstructL();
+	}
+
+void CTModifiersChangedTest::CheckModifierL(TEventModifier aModifier)
+	{
+	TInt oldMods=Client()->iWs.GetModifierState();
+	Client()->iWs.SetModifierState(aModifier, EToggleModifier);
+	TInt getMods=Client()->iWs.GetModifierState();
+	if (oldMods!=getMods)
+		{
+		iSettable|=aModifier;
+		Client()->iWs.SetModifierState(aModifier, ETurnOffModifier);
+		getMods=Client()->iWs.GetModifierState();
+		TestL(!(getMods&aModifier));
+		Client()->iWs.SetModifierState(aModifier, ETurnOnModifier);
+		getMods=Client()->iWs.GetModifierState();
+		TestL(getMods&aModifier);
+		Client()->iWs.SetModifierState(aModifier, ETurnOffModifier);
+		getMods=Client()->iWs.GetModifierState();
+		TestL(!(getMods&aModifier));
+		if (oldMods&aModifier)
+			Client()->iWs.SetModifierState(aModifier, ETurnOnModifier);
+		}
+	else
+		{
+		Client()->iWs.SetModifierState(aModifier, ETurnOffModifier);
+		TestL(oldMods==Client()->iWs.GetModifierState());
+		Client()->iWs.SetModifierState(aModifier, ETurnOnModifier);
+		TestL(oldMods==Client()->iWs.GetModifierState());
+		}
+	}
+
+void CTModifiersChangedTest::SetModifiersL()
+	{
+	iModSetTest=ETrue;
+	for(TInt mod=1;mod!=0;mod<<=1)
+		CheckModifierL((TEventModifier)mod);
+	iWin->Invalidate();
+	Client()->iWs.Flush();
+	}
+
+TestState CTModifiersChangedTest::DoTestL()
+	{
+	switch(iState)
+		{
+		case 0:		//The first 2 tests have been converted to TAuto test code.
+			ModifierChangedEventsL();
+		/*	iState++;
+			return(EContinue);
+		case 1:
+			LogSubTest(_L("Errors"),1);
+			BadParams();
+			break;
+		case 2:*/
+			LogSubTest(_L("Set modifiers"),1);
+			SetModifiersL();
+			iState++;
+			return(EContinue);
+		default:
+			return(EFinished);
+		}
+	//iState++;
+	//return(ENext);
+ 	}