diff -r 2717213c588a -r 171fae344dd4 windowing/windowserver/tman/TMPOINTR.CPP --- a/windowing/windowserver/tman/TMPOINTR.CPP Tue Jun 22 15:21:29 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,808 +0,0 @@ -// 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 pointer event handling -// -// - -#include -#include -#include "W32STD.H" -#include "../tlib/testbase.h" -#include "TMAN.H" - -class CTPointerTest; -class CGrabWindow; - -class CPointerWindow : public CTWin - { - enum {KRepeatMargin=200000}; // 0.2 Seconds - enum {KRepeatCount=4}; - enum {KRepeatIntervalIncrements=100000}; - enum {KRepeatRectXExtra=50}; - enum {KRepeatRectYExtra=50}; - enum {KStateWaitingForTest1,KStateFailed,KStateTesting1, - KStateWaitingForTest2,KStateTesting2, - KStateWaitingForTest3,KStateTesting3, - KStateWaitingForTest4,KStateTesting4, - KStateWaitingForTest5,KStateTesting5, - KStateWaitingForTest6,KStateTesting6, - KStateWaitingForTest8,KStateTesting8, - KStateWaitingForTest7,KStateTesting7, - KStateFinished}; -public: - CPointerWindow(CTPointerTest *aTest); - void SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); - void Draw(); - void StartNextRepeatTest(); - void QueueNextRepeat(); - void PointerL(const TPointerEvent &aPointer,const TTime&); - void WinKeyL(const TKeyEvent &aKey,const TTime &aTime); -private: - void SwitchOn(const TTime &); - void ResetTest(TInt aState); - void SetState(TInt aState); - void FinishedTests(); - void TestFailed(); -private: - CTPointerTest *iTest; - TInt iRepeatCount; - TInt iState; - TTimeIntervalMicroSeconds32 iInterval; - TTime iPrevTime; - TRect iRepeatRect; - }; - -class CGrabWindow2 : public CTWin - { -public: - CGrabWindow2(CGrabWindow *aWindow); - void SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); -private: - void Draw(); - void PointerL(const TPointerEvent &aPointer,const TTime&); -private: - CGrabWindow *iGrabWindow; - }; - -class CGrabWindow : public CTWin - { - enum {KGrabStateWaitingForDown,KGrabStateWaitingForDragOut,KGrabStateWaitingForUp,KGrabStateFinished, - KGrabStateWaitingForDown2,KGrabStateWaitingForUp2a,KGrabStateWaitingForDrag2,KGrabStateWaitingForUp2b, - KGrabStateWaitingForDown3,KGrabStateWaitingForUp3a,KGrabStateWaitingForUp3b, - KGrabStateWaitingForDown4,KGrabStateWaitingForUp4, - KGrabStateWaitingForDown5,KGrabStateWaitingForUp5,KGrabStateWaitingForDrag5, - KStateFailed}; -public: - CGrabWindow(CTPointerTest *aTest); - void Pointer2(const TPointerEvent &aPointer); - void SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); - void WinKeyL(const TKeyEvent &aKey,const TTime &aTime); -private: - void Draw(); - void SetState(TInt aState); - void ResetTest(); - void PointerL(const TPointerEvent &aPointer,const TTime&); - void TestFailed(); - void FinishedTests(); -private: - TInt iState; - CTPointerTest *iTest; - }; - -class CTPointerTest : public CTestBase - { -public: - CTPointerTest(); - ~CTPointerTest(); - TBool TestFailed(); - TestState DoTestL(); - void StartGrabTestL(); - void ConstructL(); - CGrabWindow2 *GrabWin2() const; - inline TBool Digitiser() const {return !iNoDigitiser;} -private: - TInt doTestFailedL(); -private: - CPointerWindow *iRepeatWin; - CGrabWindow *iGrabWin; - CGrabWindow2 *iGrabWin2; - TSize iWinSize; - TInt iState; - TBool iOldPointerState; - TBool iNoDigitiser; - }; - -GLDEF_C CTestBase *CreatePointerTest() - { - return(new(ELeave) CTPointerTest()); - } - -CPointerWindow::CPointerWindow(CTPointerTest *aTest) : CTWin(), iTest(aTest) - {} - -void CPointerWindow::SetState(TInt aState) - { - iState=aState; - iWin.Invalidate(); - switch(aState) - { - case KStateWaitingForTest1: - case KStateWaitingForTest2: - case KStateWaitingForTest3: - case KStateWaitingForTest4: - case KStateWaitingForTest5: - case KStateWaitingForTest6: - case KStateWaitingForTest8: - case KStateWaitingForTest7: - iRepeatRect=TRect(); - break; - case KStateTesting8: - iWin.Close(); - Client()->iWs.Flush(); - User::After(500000); - FinishedTests(); - break; - } - } - -void CPointerWindow::ResetTest(TInt aState) - { - TInt newState=KStateFinished; - switch(aState) - { - case KStateTesting1: - newState=KStateWaitingForTest1; - break; - case KStateTesting2: - newState=KStateWaitingForTest2; - break; - case KStateTesting3: - newState=KStateWaitingForTest3; - break; - case KStateTesting4: - newState=KStateWaitingForTest4; - break; - case KStateTesting5: - newState=KStateWaitingForTest5; - break; - case KStateTesting6: - newState=KStateWaitingForTest6; - break; - case KStateTesting8: - newState=KStateWaitingForTest8; - break; - case KStateTesting7: - newState=KStateWaitingForTest7; - break; - } - SetState(newState); - } - -void CPointerWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - Activate(); - AssignGC(aGc); - //SetState(KStateWaitingForTest1); - SetState(KStateWaitingForTest7); //Only unconverted test - BaseWin()->EnableOnEvents(); - } - -void CPointerWindow::Draw() - { - iGc->Clear(); - iGc->DrawRect(Size()); - iGc->DrawRect(iRepeatRect); - TBuf<0x80> buf; - TBuf<0x80> buf2; - switch(iState) - { - case KStateWaitingForTest1: - buf.Format(_L("Click anywhere in the window and hold the pointer steady")); - break; - case KStateTesting1: - buf.Format(_L("Hold pointer inside the box")); - break; - case KStateWaitingForTest2: - buf.Format(_L("Release the pointer then click in the window and hold the pointer steady")); - break; - case KStateTesting2: - buf.Format(_L("Drag the pointer outside the box")); - break; - case KStateWaitingForTest3: - buf.Format(_L("Release the pointer then click in the window and hold the pointer steady")); - break; - case KStateTesting3: - buf.Format(_L("Release the pointer")); - break; - case KStateWaitingForTest4: - buf.Format(_L("Click anywhere in the window and move the pointer slightly")); - break; - case KStateTesting4: - buf.Format(_L("Release the pointer")); - break; - case KStateWaitingForTest5: - buf.Format(_L("Click anywhere in the window and move the pointer slightly")); - break; - case KStateTesting5: - buf.Format(_L("Release the pointer")); - break; - case KStateWaitingForTest6: - buf.Format(_L("Click anywhere in the window")); - break; - case KStateTesting6: - buf.Format(_L("Move the pointer")); - break; - case KStateWaitingForTest8: - buf.Format(_L("Click anywhere in the window, and keep the pointer pressed")); - break; - case KStateTesting8: - buf.Format(_L("")); - break; - case KStateWaitingForTest7: - buf.Format(_L("Switch off and touch the center of the screen")); - break; - case KStateTesting7: - buf.Format(_L("")); - break; - } - switch(iState) - { - case KStateTesting1: - buf2.Format(TRefByValue(_L("Repeat (%d/%d), interval=%d.%d")),iRepeatCount,KRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000); - break; - case KStateTesting2: - case KStateTesting3: - buf2.Format(TRefByValue(_L("Repeat (%d), interval=%d.%d")),iRepeatCount,iInterval.Int()/1000000,(iInterval.Int()%1000000)/100000); - break; - } - iGc->DrawText(buf,TPoint(10,20)); - iGc->DrawText(buf2,TPoint(10,40)); - } - -void CPointerWindow::FinishedTests() - { - iState=KStateFinished; - iTest->Request(); - } - -void CPointerWindow::StartNextRepeatTest() - { - iInterval=0; - iRepeatCount=0; - if (iState==KStateWaitingForTest4) - User::After(TTimeIntervalMicroSeconds32(1000000)); - else if (iState==KStateWaitingForTest5) - User::After(TTimeIntervalMicroSeconds32(1000000)); - QueueNextRepeat(); - switch(iState) - { - case KStateWaitingForTest1: - SetState(KStateTesting1); - break; - case KStateWaitingForTest2: - SetState(KStateTesting2); - break; - case KStateWaitingForTest3: - SetState(KStateTesting3); - break; - case KStateWaitingForTest4: - SetState(KStateTesting4); - break; - case KStateWaitingForTest5: - SetState(KStateTesting5); - break; - case KStateWaitingForTest6: - SetState(KStateTesting6); - break; - case KStateWaitingForTest8: - SetState(KStateTesting8); - break; - case KStateWaitingForTest7: - SetState(KStateTesting7); - break; - } - } - -void CPointerWindow::QueueNextRepeat() - { - iInterval=iInterval.Int()+KRepeatIntervalIncrements; - iWin.RequestPointerRepeatEvent(TTimeIntervalMicroSeconds32(iInterval),TRect(iRepeatRect)); - iPrevTime.HomeTime(); - iWin.Invalidate(); - } - -void CPointerWindow::PointerL(const TPointerEvent &aPointer,const TTime &aTime) - { - if (aPointer.iType==TPointerEvent::EButtonRepeat) - { - if (iState!=KStateTesting1 && iState!=KStateTesting2 && iState!=KStateTesting3 && iState!=KStateTesting4) - TestFailed(); - else - { - TTimeIntervalMicroSeconds32 interval(I64LOW(aTime.MicroSecondsFrom(iPrevTime).Int64())); - if (interval.Int()<(iInterval.Int()-KRepeatMargin) || interval.Int()>(iInterval.Int()+KRepeatMargin)) - TestFailed(); - else - { - if (!iRepeatRect.Contains(aPointer.iPosition) || - aPointer.iParentPosition!=(aPointer.iPosition+iWin.InquireOffset(*Parent()->WinTreeNode()))) - TestFailed(); - else - { - iRepeatCount++; - if (iState==KStateTesting1 && iRepeatCount==KRepeatCount) - { - QueueNextRepeat(); - Client()->iWs.Flush(); - User::After(TTimeIntervalMicroSeconds32(iRepeatCount*KRepeatIntervalIncrements)); - iWin.CancelPointerRepeatEventRequest(); - SetState(KStateWaitingForTest2); - } - else - QueueNextRepeat(); - } - } - } - } - else switch(iState) - { - case KStateWaitingForTest1: - case KStateWaitingForTest2: - case KStateWaitingForTest3: - case KStateWaitingForTest4: - case KStateWaitingForTest8: - if (aPointer.iType==TPointerEvent::EButton1Down) - { - iRepeatRect.iTl=aPointer.iPosition-TPoint(KRepeatRectXExtra,KRepeatRectYExtra); - iRepeatRect.iBr=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra); - StartNextRepeatTest(); - } - break; - case KStateWaitingForTest5: - if (aPointer.iType==TPointerEvent::EButton1Down) - { - iRepeatRect.iTl=aPointer.iPosition; - iRepeatRect.iBr=aPointer.iPosition+TPoint(1,1); - StartNextRepeatTest(); - } - break; - case KStateWaitingForTest6: - if (aPointer.iType==TPointerEvent::EButton1Down) - { - iRepeatRect.iTl=aPointer.iPosition+TPoint(KRepeatRectXExtra,KRepeatRectYExtra); - iRepeatRect.iBr=aPointer.iPosition+TPoint(2*KRepeatRectXExtra,2*KRepeatRectYExtra); - StartNextRepeatTest(); - } - break; - case KStateTesting1: - TestFailed(); - break; - case KStateTesting2: - if (aPointer.iType==TPointerEvent::EDrag) - SetState(KStateWaitingForTest3); - else - TestFailed(); - break; - case KStateTesting3: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KStateWaitingForTest4); - else - TestFailed(); - break; - case KStateTesting4: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KStateWaitingForTest5); - else - TestFailed(); - break; - case KStateTesting5: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KStateWaitingForTest6); - else if (aPointer.iType!=TPointerEvent::EDrag) - TestFailed(); - break; - case KStateTesting6: - if (aPointer.iType==TPointerEvent::EDrag) - { - #if !defined(__WINS__) // Can't emulate touching dig when switched off under WINS - if (iTest->Digitiser()) - SetState(KStateWaitingForTest7); - else - #endif - SetState(KStateWaitingForTest8); - } - else - TestFailed(); - break; - case KStateWaitingForTest7: - if (aPointer.iType==TPointerEvent::EButton1Down || aPointer.iType==TPointerEvent::ESwitchOn) - TestFailed(); - break; - case KStateTesting7: - if (aPointer.iType!=TPointerEvent::ESwitchOn) - TestFailed(); - else - SetState(KStateTesting8); //Jump straight to end as this is only unconverted test. - //SetState(KStateWaitingForTest8); - break; - case KStateTesting8: - break; - } - } - -void CPointerWindow::TestFailed() - { - if (iState!=KStateFailed) - { - TInt oldState=iState; - iState=KStateFailed; - if (iTest->TestFailed()) - ResetTest(oldState); - } - } - -void CPointerWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) - { - if (aKey.iCode==EKeyEscape) - FinishedTests(); // Simply skip this test if the Escape key is pressed - } - -void CPointerWindow::SwitchOn(const TTime &) - { - if (iState==KStateWaitingForTest7) - SetState(KStateTesting7); - else - TestFailed(); - } - -// -// CGrabWindow // -// - -CGrabWindow::CGrabWindow(CTPointerTest *aTest) : iTest(aTest) - { - } - -void CGrabWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) - { - ConstructExtLD(*parent,pos,size); - Activate(); - AssignGC(aGc); - SetState(KGrabStateWaitingForDown); - } - -void CGrabWindow::Draw() - { - iGc->Clear(); - iGc->DrawRect(Size()); - TBuf<0x80> buf; - switch(iState) - { - case KGrabStateWaitingForDown: - case KGrabStateWaitingForDown2: - case KGrabStateWaitingForDown5: - buf.Copy(_L("Press the pointer inside the window")); - break; - case KGrabStateWaitingForDown3: - case KGrabStateWaitingForUp3a: - buf.Copy(_L("Press and release the pointer inside the window")); - break; - case KGrabStateWaitingForDragOut: - buf.Copy(_L("Drag the pointer outside into the outside window")); - break; - case KGrabStateWaitingForDrag2: - buf.Copy(_L("Drag the pointer outside outside both windows")); - break; - case KGrabStateWaitingForUp: - case KGrabStateWaitingForUp2b: - case KGrabStateWaitingForUp5: - buf.Copy(_L("Release the pointer")); - break; - case KGrabStateWaitingForDown4: - buf.Copy(_L("Press then release the pointer")); - break; - default:; - } - iGc->DrawText(buf,TPoint(10,20)); - } - -void CGrabWindow::PointerL(const TPointerEvent &aPointer,const TTime&) - { - switch(iState) - { - case KGrabStateWaitingForDown: - if (aPointer.iType==TPointerEvent::EButton1Down) - SetState(KGrabStateWaitingForDragOut); - break; - case KGrabStateWaitingForDragOut: - if (aPointer.iType!=TPointerEvent::EDrag) - TestFailed(); - else - { - if (!TRect(Size()).Contains(aPointer.iPosition)) - SetState(KGrabStateWaitingForUp); - } - break; - case KGrabStateWaitingForUp: - if (aPointer.iType==TPointerEvent::EDrag) - break; - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown2); - else - TestFailed(); - break; - case KGrabStateWaitingForDown2: - if (aPointer.iType!=TPointerEvent::EButton1Down) - TestFailed(); - else - { - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(); - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(); // Call twice to check it's harmless - SetState(KGrabStateWaitingForUp2a); - } - break; - case KGrabStateWaitingForUp2a: - SetState(KGrabStateWaitingForDrag2); - break; - case KGrabStateWaitingForDrag2: - break; - case KGrabStateWaitingForUp2b: - TestFailed(); - break; - case KGrabStateWaitingForDown3: - if (aPointer.iType!=TPointerEvent::EButton1Down) - TestFailed(); - else - SetState(KGrabStateWaitingForUp3a); - break; - case KGrabStateWaitingForUp3a: - if (aPointer.iType==TPointerEvent::EButton1Up) - { - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(); - SetState(KGrabStateWaitingForUp3b); - } - break; - case KGrabStateWaitingForUp3b: - TestFailed(); - break; - case KGrabStateWaitingForDown5: - if (aPointer.iType!=TPointerEvent::EButton1Down) - TestFailed(); - else - { - iTest->GrabWin2()->BaseWin()->ClaimPointerGrab(EFalse); - SetState(KGrabStateWaitingForDrag5); - } - break; - case KGrabStateWaitingForDrag5: - if (aPointer.iType==TPointerEvent::EButton1Up) - TestFailed(); - break; - case KGrabStateWaitingForUp5: - TestFailed(); - break; - case KGrabStateWaitingForDown4: - SetState(KGrabStateWaitingForUp4); - iWin.Close(); // Close the window with the grab captured in it - break; - case KGrabStateFinished: - break; - } - } - -void CGrabWindow::ResetTest() - { - SetState(KGrabStateWaitingForDown); - } - -void CGrabWindow::Pointer2(const TPointerEvent &aPointer) - { - switch(iState) - { - case KGrabStateWaitingForDrag2: - { - if (aPointer.iType==TPointerEvent::EDrag) - { - SetState(KGrabStateWaitingForUp2b); - } - else - { - if (iTest->TestFailed()) - ResetTest(); - } - break; - } - case KGrabStateWaitingForUp2b: - if (aPointer.iType==TPointerEvent::EDrag) // Harmless - break; - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown3); - else - TestFailed(); - break; - case KGrabStateWaitingForUp3b: - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown5); - else - TestFailed(); - break; - case KGrabStateWaitingForUp4: - FinishedTests(); - break; - case KGrabStateWaitingForDrag5: - { - if (aPointer.iType==TPointerEvent::EDrag) - SetState(KGrabStateWaitingForUp5); - else if (iTest->TestFailed()) - ResetTest(); - break; - } - case KGrabStateWaitingForUp5: - if (aPointer.iType==TPointerEvent::EDrag) // Harmless - break; - if (aPointer.iType==TPointerEvent::EButton1Up) - SetState(KGrabStateWaitingForDown4); - else - TestFailed(); - break; - default:; - } - } - -void CGrabWindow::SetState(TInt aState) - { - iState=aState; - iWin.Invalidate(); - } - -void CGrabWindow::TestFailed() - { - if (iState!=KStateFailed) - { - iState=KStateFailed; - if (iTest->TestFailed()) - ResetTest(); - } - } - -void CGrabWindow::FinishedTests() - { - iState=KGrabStateFinished; - iTest->Request(); - } - -void CGrabWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) - { - if (aKey.iCode==EKeyEscape) - FinishedTests(); // Simply skip this test if the Escape key is pressed - } - -// -// CGrabWindow2, used as part of grab tests // -// - -CGrabWindow2::CGrabWindow2(CGrabWindow *aWindow) : iGrabWindow(aWindow) - { - } - -void CGrabWindow2::Draw() - { - iGc->SetBrushStyle(CGraphicsContext::ESolidBrush); - iGc->SetBrushColor(TRgb::Gray4(2)); - iGc->DrawRect(Size()); - } - -void CGrabWindow2::PointerL(const TPointerEvent &aPointer,const TTime&) - { - iGrabWindow->Pointer2(aPointer); - } - -// -// CTPointTest // -// - -CTPointerTest::CTPointerTest() : CTestBase(_L("CTPointerTest")) - {} - -CTPointerTest::~CTPointerTest() - { - HAL::Set(HALData::EPenDisplayOn,iOldPointerState); - delete iRepeatWin; - delete iGrabWin; - delete iGrabWin2; - Client()->ResetFocus(); - } - -void CTPointerTest::ConstructL() - { - iRepeatWin=new(ELeave) CPointerWindow(this); - TSize screenSize(Client()->iScreen->SizeInPixels()); - iRepeatWin->SetUpLD(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc); - Client()->iGroup->SetCurrentWindow(iRepeatWin); - iNoDigitiser=EFalse; - TInt err=HAL::Get(HALData::EPenDisplayOn,iOldPointerState); - if (err==KErrNotSupported) - iNoDigitiser=ETrue; - else if (err==KErrNone) - err=HAL::Set(HALData::EPenDisplayOn,ETrue); - if (err==KErrNotSupported) - iNoDigitiser=(!iOldPointerState); - else - TestL(err==KErrNone); - } - -TBool CTPointerTest::TestFailed() - { - TInt ret=1; - TRAP_IGNORE(ret=doTestFailedL()); - switch(ret) - { - case 0: - return(ETrue); // Re-try test - case 1: - Request(); - break; - } - return(EFalse); - } - -TInt CTPointerTest::doTestFailedL() - { - CTDialog *dialog=new(ELeave) CTDialog(); - dialog->SetTitle(_L("Pointer repeat test failed")); - dialog->SetNumButtons(2); - dialog->SetButtonText(0,_L("Retest")); - dialog->SetButtonText(1,_L("Fail")); - dialog->ConstructLD(*Client()->iGroup,*Client()->iGc); - return dialog->Display(); - } - -CGrabWindow2 *CTPointerTest::GrabWin2() const - { - return(iGrabWin2); - } - -void CTPointerTest::StartGrabTestL() - { - iGrabWin=new(ELeave) CGrabWindow(this); - iGrabWin2=new(ELeave) CGrabWindow2(iGrabWin); -// - TSize screenSize(Client()->iScreen->SizeInPixels()); - iGrabWin2->SetUpL(TPoint(screenSize.iWidth/8,screenSize.iHeight/8),TSize(screenSize.iWidth*3/4,screenSize.iHeight*3/4),Client()->iGroup,*Client()->iGc); - Client()->iGroup->SetCurrentWindow(iGrabWin2); -// - iGrabWin->SetUpLD(TPoint(screenSize.iWidth/4,screenSize.iHeight/4),TSize(screenSize.iWidth/2,screenSize.iHeight/2),Client()->iGroup,*Client()->iGc); - Client()->iGroup->SetCurrentWindow(iGrabWin); -// - } - -#pragma warning( disable : 4065 ) //switch statement contains 'default' but no 'case' labels -TestState CTPointerTest::DoTestL() - { - switch(iState) - { - #if !defined(__WINS__) //Only unconverted test is MARM only - case 0: - LogSubTest(_L("Repeat tests"),1); - iState++; - return(EContinue); - #endif - - default: - return(EFinished); - } - } -#pragma warning( default : 4065 ) -