sl@0: // Copyright (c) 1996-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: // Test Pointer move/drag buffer sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include "W32STD.H" sl@0: #include "../tlib/testbase.h" sl@0: #include "TMAN.H" sl@0: sl@0: const TInt ENumPntKeyTests=6; sl@0: const TUint EModifierMask=EModifierCtrl|EModifierShift|EModifierFunc; sl@0: sl@0: class CTPntKeyTest; sl@0: sl@0: class CTPntKeyWindow : public CTWin sl@0: { sl@0: private: sl@0: enum {KPointerMoveBufferSize=32}; sl@0: public: sl@0: CTPntKeyWindow(CTPntKeyTest *aTest); sl@0: ~CTPntKeyWindow(); sl@0: void SetUpLD(TPoint pos,TSize size,CTWinBase *parent); sl@0: void PointerL(const TPointerEvent &pointer,const TTime &aTime); sl@0: void KeyUpL(const TKeyEvent &aKey,const TTime &); sl@0: void KeyDownL(const TKeyEvent &aKey,const TTime &); sl@0: void WinKeyL(const TKeyEvent &aKey,const TTime &); sl@0: void SwitchOn(const TTime &aTime); sl@0: void SetState(TInt iState); sl@0: void NextKey(); sl@0: void Test(TInt aCheck); sl@0: void Error(); sl@0: void DrawButton(const TRect &aRect, const TDesC &aText); sl@0: void Draw(); sl@0: private: sl@0: CTPntKeyTest *iTest; sl@0: TInt iKeyCount; sl@0: TRect iKey1; sl@0: TRect iKey2; sl@0: TRect iKey3; sl@0: static TInt iTestScanCodes[ENumPntKeyTests]; sl@0: static TUint iTestCodes[ENumPntKeyTests]; sl@0: static TUint iTestModifiers[ENumPntKeyTests]; sl@0: }; sl@0: sl@0: class CTPntKeyTest : public CTestBase sl@0: { sl@0: public: sl@0: CTPntKeyTest(); sl@0: ~CTPntKeyTest(); sl@0: TestState DoTestL(); sl@0: void FinishedTests(); sl@0: void ConstructL(); sl@0: void Failed(); sl@0: inline TBool NoDigitiser() const {return iNoDigitiser;} sl@0: private: sl@0: CTPntKeyWindow *iWin; sl@0: TSize iWinSize; sl@0: TInt iState; sl@0: TBool iFailed; sl@0: TBool iOldPointerState; sl@0: TBool iNoDigitiser; sl@0: }; sl@0: sl@0: TInt CTPntKeyWindow::iTestScanCodes[ENumPntKeyTests]={'A','B',0,'C',EStdKeyEnter,'Y'}; sl@0: TUint CTPntKeyWindow::iTestCodes[ENumPntKeyTests]={'a','B',0,'c',EKeyEnter,'y'}; sl@0: TUint CTPntKeyWindow::iTestModifiers[ENumPntKeyTests]={0,EModifierShift,0,0,0,0}; sl@0: sl@0: GLDEF_C CTestBase *CreatePointerKeyTest() sl@0: { sl@0: return(new(ELeave) CTPntKeyTest()); sl@0: } sl@0: sl@0: CTPntKeyWindow::CTPntKeyWindow(CTPntKeyTest *aTest) : iTest(aTest) sl@0: {} sl@0: sl@0: CTPntKeyWindow::~CTPntKeyWindow() sl@0: { sl@0: } sl@0: sl@0: void CTPntKeyWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent) sl@0: { sl@0: ConstructExtLD(*parent,pos,size); sl@0: iWin.SetPointerGrab(ETrue); sl@0: iKey1=TRect(size.iWidth*1/16,size.iHeight/2,size.iWidth*5/16,size.iHeight); sl@0: iKey2=TRect(size.iWidth*6/16,size.iHeight/2,size.iWidth*10/16,size.iHeight); sl@0: iKey3=TRect(size.iWidth*11/16,size.iHeight/2,size.iWidth*15/16,size.iHeight); sl@0: iWin.AddKeyRect(iKey1,'A',EFalse); sl@0: iWin.AddKeyRect(iKey2,'B',EFalse); sl@0: AssignGC(*Client()->iGc); sl@0: BaseWin()->EnableOnEvents(); sl@0: Activate(); sl@0: } sl@0: sl@0: void CTPntKeyWindow::Error() sl@0: { sl@0: iTest->Failed(); sl@0: } sl@0: sl@0: void CTPntKeyWindow::SetState(TInt iState) sl@0: { sl@0: iKeyCount=iState-1; sl@0: NextKey(); sl@0: iTest->Client()->Flush(); sl@0: } sl@0: sl@0: void CTPntKeyWindow::NextKey() sl@0: { sl@0: if (++iKeyCount==ENumPntKeyTests || iKeyCount>4) sl@0: iTest->FinishedTests(); sl@0: else sl@0: { sl@0: if (iKeyCount==2) sl@0: iWin.RemoveAllKeyRects(); sl@0: else if (iKeyCount==3) sl@0: iWin.AddKeyRect(iKey3,'C',EFalse); sl@0: else if (iKeyCount==4) sl@0: { sl@0: #if !defined(__WINS__) sl@0: if (iTest->NoDigitiser()) sl@0: iTest->FinishedTests(); sl@0: #endif sl@0: iWin.RemoveAllKeyRects(); sl@0: iWin.AddKeyRect(TRect(Client()->iScreen->SizeInPixels()),'Z',EFalse); sl@0: } sl@0: else if (iKeyCount==5) sl@0: { sl@0: iWin.RemoveAllKeyRects(); sl@0: Client()->iWs.Flush(); sl@0: User::After(500000); // Wait half a second sl@0: iWin.AddKeyRect(TRect(Client()->iScreen->SizeInPixels()),'Y',ETrue); sl@0: } sl@0: Invalidate(); sl@0: } sl@0: } sl@0: sl@0: void CTPntKeyWindow::Test(TInt aCheck) sl@0: { sl@0: if (!aCheck) sl@0: Error(); sl@0: } sl@0: sl@0: void CTPntKeyWindow::KeyUpL(const TKeyEvent &aKey,const TTime&) sl@0: { sl@0: if (aKey.iScanCode==iTestScanCodes[iKeyCount]) sl@0: NextKey(); sl@0: } sl@0: sl@0: void CTPntKeyWindow::KeyDownL(const TKeyEvent &aKey,const TTime &) sl@0: { sl@0: if (aKey.iScanCode!=EStdKeyLeftFunc && aKey.iScanCode!=EStdKeyRightFunc && sl@0: aKey.iScanCode!=EStdKeyLeftAlt && aKey.iScanCode!=EStdKeyRightAlt && sl@0: aKey.iScanCode!=EStdKeyLeftCtrl && aKey.iScanCode!=EStdKeyRightCtrl && sl@0: aKey.iScanCode!=EStdKeyLeftShift && aKey.iScanCode!=EStdKeyRightShift && sl@0: aKey.iScanCode!=EStdKeyOff && sl@0: aKey.iScanCode!=EStdKeyEscape) sl@0: Test(aKey.iScanCode==iTestScanCodes[iKeyCount]); sl@0: } sl@0: sl@0: void CTPntKeyWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) sl@0: { sl@0: if (aKey.iCode==EKeyEscape) sl@0: iTest->FinishedTests(); sl@0: else sl@0: { sl@0: Test(aKey.iScanCode==iTestScanCodes[iKeyCount]); sl@0: Test(aKey.iCode==iTestCodes[iKeyCount]); sl@0: Test((aKey.iModifiers&EModifierMask)==(iTestModifiers[iKeyCount]&EModifierMask)); sl@0: } sl@0: } sl@0: sl@0: void CTPntKeyWindow::SwitchOn(const TTime &) sl@0: { sl@0: if (iKeyCount==4) sl@0: NextKey(); sl@0: else if (iKeyCount!=5) sl@0: Error(); sl@0: } sl@0: sl@0: void CTPntKeyWindow::PointerL(const TPointerEvent &aPointer,const TTime &) sl@0: { sl@0: if (aPointer.iType==TPointerEvent::EButton1Down) sl@0: { sl@0: if (iKeyCount!=2) sl@0: Error(); sl@0: else sl@0: NextKey(); sl@0: } sl@0: } sl@0: sl@0: void CTPntKeyWindow::DrawButton(const TRect &aRect, const TDesC &aText) sl@0: { sl@0: iGc->DrawRect(aRect); sl@0: iGc->DrawText(aText, TPoint((aRect.iBr.iX+aRect.iTl.iX)/2,(aRect.iBr.iY+aRect.iTl.iY)/2)); sl@0: } sl@0: sl@0: void CTPntKeyWindow::Draw() sl@0: { sl@0: iGc->SetBrushColor(TRgb::Gray4(0)); sl@0: iGc->SetPenColor(TRgb::Gray4(3)); sl@0: iGc->Clear(); sl@0: DrawButton(iKey1,_L("A")); sl@0: DrawButton(iKey2,_L("B")); sl@0: DrawButton(iKey3,_L("C")); sl@0: switch(iKeyCount) sl@0: { sl@0: case 0: sl@0: iGc->DrawText(_L("Click on 'A'"), TPoint(10,20)); sl@0: break; sl@0: case 1: sl@0: iGc->DrawText(_L("Shift-Click on 'B'"), TPoint(10,20)); sl@0: break; sl@0: case 2: sl@0: iGc->DrawText(_L("Click anywhere in this window"), TPoint(10,20)); sl@0: break; sl@0: case 3: sl@0: iGc->DrawText(_L("Click on 'C'"), TPoint(10,20)); sl@0: break; sl@0: case 4: sl@0: #if defined(__WINS__) // Can't emulate touching dig when switched off under WINS sl@0: iGc->DrawText(_L("Switch off and on (or press Enter)"), TPoint(10,20)); sl@0: #else sl@0: iGc->DrawText(_L("1st Switch off, then touch the screen to switch on"), TPoint(10,20)); sl@0: #endif sl@0: break; sl@0: case 5: sl@0: #if defined(__WINS__) // Can't emulate touching dig when switched off under WINS sl@0: iGc->DrawText(_L("Touch anywhere in the window"), TPoint(10,20)); sl@0: #else sl@0: iGc->DrawText(_L("2nd Switch off and touch the screen to switch on"), TPoint(10,20)); sl@0: #endif sl@0: break; sl@0: } sl@0: } sl@0: sl@0: CTPntKeyTest::CTPntKeyTest() : CTestBase(_L("Pointer Key Test")) sl@0: {} sl@0: sl@0: CTPntKeyTest::~CTPntKeyTest() sl@0: { sl@0: HAL::Set(HALData::EPenDisplayOn,iOldPointerState); sl@0: CTWin::Delete(iWin); sl@0: Client()->ResetFocus(); sl@0: } sl@0: sl@0: void CTPntKeyTest::Failed() sl@0: { sl@0: if (!iFailed) sl@0: { sl@0: iFailed=ETrue; sl@0: FinishedTests(); sl@0: } sl@0: } sl@0: sl@0: void CTPntKeyTest::FinishedTests() sl@0: { sl@0: Request(); sl@0: } sl@0: sl@0: void CTPntKeyTest::ConstructL() sl@0: { sl@0: CTPntKeyWindow *win=new(ELeave) CTPntKeyWindow(this); sl@0: win->SetUpLD(TPoint(20,20),Client()->iScreen->SizeInPixels()-TSize(40,40),Client()->iGroup); sl@0: iWin=win; sl@0: Client()->iGroup->SetCurrentWindow(iWin); sl@0: iNoDigitiser=EFalse; sl@0: TInt err=HAL::Get(HALData::EPenDisplayOn,iOldPointerState); sl@0: if (err==KErrNotSupported) sl@0: iNoDigitiser=ETrue; sl@0: else if (err==KErrNone) sl@0: err=HAL::Set(HALData::EPenDisplayOn,ETrue); sl@0: if (err==KErrNotSupported) sl@0: iNoDigitiser=(!iOldPointerState); sl@0: else sl@0: TestL(err==KErrNone); sl@0: } sl@0: sl@0: TestState CTPntKeyTest::DoTestL() sl@0: { sl@0: TestL(!iFailed); sl@0: switch(iState) sl@0: { sl@0: case 0: sl@0: LogSubTest(_L("Key set 1"),1); sl@0: iWin->SetState(4); sl@0: iState++; sl@0: return(EContinue); sl@0: default: sl@0: return(EFinished); sl@0: } sl@0: // return(ENext); sl@0: }