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