windowing/windowserver/tman/TMPNTCAP.CPP
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tman/TMPNTCAP.CPP	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,856 @@
+// 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 capture
+// 
+//
+
+#include <e32std.h>
+#include <e32svr.h>
+#include "W32STD.H"
+#include "../tlib/testbase.h"
+#include "TMAN.H"
+
+enum TTestState
+	{
+	ECaptureDisabled,
+	ENormalCapture,
+	ECaptureAllGroups,
+	EDragDropCapture,
+	EDragDropCaptureAllGroups,
+	ENormalCaptureWithoutFocus,
+	};
+
+enum TTestSubState
+	{
+	EMainWindow,
+	EChildWindow,
+	EOtherGroup,
+	EOtherSession,
+	ERootWindow,
+	};
+
+enum TPointerCheckRet
+	{
+	EFailed,
+	EOkay,
+	ENeedsDDEvent,
+	};
+
+const TInt ESubStates1=2;
+const TInt ESubStates2=5;
+const TInt ESubStates3=5;
+const TInt ESubStates4=5;
+const TInt ESubStates5=5;
+const TInt ESubStates6=5;
+
+const TInt EWinBorderSize=10;
+
+class CPcWindowBase;
+class TPointerCaptureTest;
+
+class CPcConnection : public CTClient
+	{
+public:
+	CPcConnection(TPointerCaptureTest *aTest);
+	~CPcConnection();
+	virtual void ConstructL();
+protected:
+	TPointerCaptureTest *iTest;
+	};
+
+class CPcWindowBase : public CTWin
+	{
+public:
+	CPcWindowBase(TPointerCaptureTest *aTest);
+	void SetUpL(TPoint pos,TSize size,CTWinBase *parent);
+	void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
+	void Draw(TDesC &aBuf);
+	void PointerL(const TPointerEvent &pointer,const TTime &);
+	void DragDropL(const TPointerEvent &pointer,const TTime &);
+	virtual TPointerCheckRet PointerDown()=0;
+	virtual TPointerCheckRet DragDrop()=0;
+	virtual void SubStateChanged();
+protected:
+	TPointerCaptureTest *iTest;
+	TRgb iBack;
+	};
+
+class CPcWindowChild : public CPcWindowBase
+	{
+public:
+	CPcWindowChild(TPointerCaptureTest *aTest);
+	void Draw();
+	TPointerCheckRet PointerDown();
+	TPointerCheckRet DragDrop();
+	};
+
+class CPcWindowMain : public CPcWindowBase
+	{
+public:
+	CPcWindowMain(TPointerCaptureTest *aTest);
+	void Draw();
+	TPointerCheckRet PointerDown();
+	TPointerCheckRet DragDrop();
+	void WinKeyL(const TKeyEvent &aKey,const TTime &aTime);
+	};
+
+class CPcWindowAltGroup : public CPcWindowBase
+	{
+public:
+	CPcWindowAltGroup(TPointerCaptureTest *aTest);
+	void Draw();
+	TPointerCheckRet PointerDown();
+	TPointerCheckRet DragDrop();
+	};
+
+class CPcWindowNickFocusGroup : public CTWindowGroup
+	{
+public:
+	CPcWindowNickFocusGroup(TPointerCaptureTest *aTest, CTClient *aClient);
+	void KeyL(const TKeyEvent &aKey,const TTime &aTime);
+private:
+	TPointerCaptureTest *iTest;
+	};
+
+class CPcWindowAltConnection : public CPcWindowBase
+	{
+public:
+	CPcWindowAltConnection(TPointerCaptureTest *aTest);
+	void Draw();
+	TPointerCheckRet PointerDown();
+	TPointerCheckRet DragDrop();
+	};
+
+class TPointerCaptureTest : public CTestBase
+	{
+private:
+	enum TDState {DDStateNull, DDStateGot, DDStateWaiting};
+public:
+	TPointerCaptureTest();
+	~TPointerCaptureTest();
+	TestState DoTestL();
+	void ConstructL();
+	void NextTest();
+	void AbortTests();
+	TInt State() const;
+	TInt SubState() const;
+	void doIncSubState();
+	void IncSubState(TBool aNeedsDD=EFalse);
+	void GotDD();
+	void StateChanged();
+	void TestFailed();
+	void NickFocusL();
+	void SetCapture(TInt aCaptureFlags);
+	void RestartTest();
+private:
+	TInt doTestFailedL();
+private:
+	CPcConnection *iAltConnection;
+	CTWindowGroup *iMainGroup;
+	CTWindowGroup *iAltGroup;
+	CPcWindowChild *iChildWin;
+	CPcWindowMain *iMainWin;
+	CPcWindowAltGroup *iAltGroupWin;
+	CPcWindowAltConnection *iAltConnectionWin;
+	CPcWindowNickFocusGroup *iNickFocusGroup;
+	CTBlankWindow *iNickFocusBlankWin;
+	TInt iState;
+	TInt iSubState;
+	TDState iDDState;
+public:
+	TBool iFailed;
+	};
+
+GLDEF_C CTestBase *CreatePointerCaptureTest()
+	{
+	return(new(ELeave) TPointerCaptureTest());
+	}
+
+//
+// CMcConnection
+
+CPcConnection::CPcConnection(TPointerCaptureTest *aTest) : iTest(aTest)
+	{
+	}
+
+CPcConnection::~CPcConnection()
+	{
+	}
+
+void CPcConnection::ConstructL()
+	{
+	CTClient::ConstructL();
+	iGroup=new(ELeave) CTWindowGroup(this);
+	iGroup->ConstructL();
+	iGroup->GroupWin()->SetOrdinalPosition(0,1);
+	iGroup->GroupWin()->EnableReceiptOfFocus(EFalse);
+	iWs.Flush();
+	}
+
+//
+// CPcWindow, base class //
+//
+
+CPcWindowBase::CPcWindowBase(TPointerCaptureTest *aTest) : CTWin(), iTest(aTest)
+	{
+	}
+
+void CPcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
+	{
+	ConstructExtLD(*parent,pos,size);
+	iWin.SetBackgroundColor(iBack);
+	Activate();
+	AssignGC(aGc);
+	}
+
+void CPcWindowBase::SetUpL(TPoint pos,TSize size,CTWinBase *parent)
+	{
+	SetUpL(pos,size,parent,*iTest->Client()->iGc);
+	}
+
+void CPcWindowBase::SubStateChanged()
+	{
+	iWin.Invalidate();
+	Client()->iWs.Flush();
+	}
+
+void CPcWindowBase::Draw(TDesC &aBuf)
+	{
+	iGc->Clear();
+	iGc->SetPenColor(iBack.Gray4()>1 ? TRgb(0,0,0) : TRgb(255,255,255));
+	iGc->DrawText(aBuf, TPoint(10,20));
+	}
+
+void CPcWindowBase::PointerL(const TPointerEvent &pointer,const TTime &)
+	{
+	if (pointer.iType==TPointerEvent::EButton1Down && !iTest->iFailed)
+		{
+		if (iTest->SubState()==ERootWindow)	// Root window click, must not be inside this window
+			{
+			if (TRect(Size()).Contains(pointer.iPosition))
+				{
+				iTest->TestFailed();
+				return;
+				}
+			}
+		TInt ret;
+		if ((ret=PointerDown())==EFailed)
+			iTest->TestFailed();
+		else
+			iTest->IncSubState(ret==ENeedsDDEvent);
+		}
+	}
+
+void CPcWindowBase::DragDropL(const TPointerEvent &pointer,const TTime &)
+	{
+	switch(iTest->State())
+		{
+		case ECaptureDisabled:
+		case ENormalCapture:
+		case ECaptureAllGroups:
+		case ENormalCaptureWithoutFocus:
+			iTest->TestFailed();
+			break;
+		}
+	if (pointer.iType==TPointerEvent::EButton1Down && !iTest->iFailed)
+		{
+		if (DragDrop()==EFailed)
+			iTest->TestFailed();
+		else
+			iTest->GotDD();
+		}
+	}
+//
+
+CPcWindowMain::CPcWindowMain(TPointerCaptureTest *aTest) : CPcWindowBase(aTest)
+	{
+	iBack=TRgb::Gray256(236);
+	}
+
+TPointerCheckRet CPcWindowMain::PointerDown()
+	{
+	switch(iTest->State())
+		{
+		case ECaptureDisabled:
+			if (iTest->SubState()==EMainWindow)
+				return(EOkay);
+			break;
+		case ENormalCapture:
+			switch(iTest->SubState())
+				{
+				case EMainWindow:
+				case ERootWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		case ECaptureAllGroups:
+			switch(iTest->SubState())
+				{
+				case EMainWindow:
+				case EOtherGroup:
+				case EOtherSession:
+				case ERootWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		case EDragDropCapture:
+			switch(iTest->SubState())
+				{
+				case EMainWindow:
+					return(ENeedsDDEvent);
+				case ERootWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		case EDragDropCaptureAllGroups:
+			switch(iTest->SubState())
+				{
+				case EMainWindow:
+				case EOtherGroup:
+				case EOtherSession:
+					return(ENeedsDDEvent);
+				case ERootWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		case ENormalCaptureWithoutFocus:
+			switch(iTest->SubState())
+				{
+				case EMainWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		default:
+			break;
+		}
+	return(EFailed);
+	}
+
+TPointerCheckRet CPcWindowMain::DragDrop()
+	{
+	switch(iTest->State())
+		{
+		case EDragDropCapture:
+		case EDragDropCaptureAllGroups:
+			switch(iTest->SubState())
+				{
+				case EMainWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		default:
+			break;
+		}
+	return(EFailed);
+	}
+
+void CPcWindowMain::Draw()
+	{
+	TBuf<0x40> buf;
+	if (iTest->State()==ECaptureDisabled)
+		{
+		switch(iTest->SubState())
+			{
+			case EMainWindow:
+				buf.Copy(_L("Click on me"));
+				break;
+			}
+		}
+	else
+		{
+		switch(iTest->SubState())
+			{
+			case EMainWindow:
+				buf.Copy(_L("Click on me"));
+				break;
+			case EChildWindow:
+			case EOtherGroup:
+			case EOtherSession:
+				break;
+			case ERootWindow:
+				if (iTest->State()==ENormalCaptureWithoutFocus)
+					buf.Copy(_L("Click on the root window, then press <Escape>"));
+				else
+					buf.Copy(_L("Click on the root window"));
+				break;
+			}
+		}
+	CPcWindowBase::Draw(buf);
+	}
+
+void CPcWindowMain::WinKeyL(const TKeyEvent &aKey,const TTime &)
+	{
+	switch(aKey.iCode)
+		{
+		case EKeyEscape:
+			iTest->AbortTests();
+			break;
+		}
+	}
+
+//
+
+CPcWindowChild::CPcWindowChild(TPointerCaptureTest *aTest) : CPcWindowBase(aTest)
+	{
+	iBack=TRgb::Gray256(85);
+	}
+
+TPointerCheckRet CPcWindowChild::PointerDown()
+	{
+	switch(iTest->State())
+		{
+		case ECaptureDisabled:
+			break;
+		default:
+			switch(iTest->SubState())
+				{
+				case EChildWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		}
+	return(EFailed);
+	}
+
+TPointerCheckRet CPcWindowChild::DragDrop()
+	{
+	switch(iTest->State())
+		{
+		case EDragDropCapture:
+		case EDragDropCaptureAllGroups:
+			switch(iTest->SubState())
+				{
+				case EChildWindow:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		default:
+			break;
+		}
+	return(EFailed);
+	}
+
+void CPcWindowChild::Draw()
+	{
+	TBuf<0x40> buf;
+	if (iTest->State()!=ECaptureDisabled)
+		{
+		switch(iTest->SubState())
+			{
+			case EChildWindow:
+				buf.Copy(_L("Click on me"));
+				break;
+			default:
+				break;
+			}
+		}
+	CPcWindowBase::Draw(buf);
+	}
+
+//
+
+CPcWindowNickFocusGroup::CPcWindowNickFocusGroup(TPointerCaptureTest *aTest, CTClient *aClient) : CTWindowGroup(aClient), iTest(aTest)
+	{
+	}
+
+void CPcWindowNickFocusGroup::KeyL(const TKeyEvent &aKey,const TTime &)
+	{
+	if (aKey.iCode==EKeyEscape)
+		iTest->IncSubState(EFalse);
+	}
+
+//
+
+CPcWindowAltGroup::CPcWindowAltGroup(TPointerCaptureTest *aTest) : CPcWindowBase(aTest)
+	{
+	iBack=TRgb::Gray256(236);
+	}
+
+TPointerCheckRet CPcWindowAltGroup::PointerDown()
+	{
+	switch(iTest->State())
+		{
+		case ECaptureDisabled:
+			if (iTest->SubState()==EChildWindow)
+				return(EOkay);
+			break;
+		case ENormalCapture:
+		case EDragDropCapture:
+		case ENormalCaptureWithoutFocus:
+			switch(iTest->SubState())
+				{
+				case EOtherGroup:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		default:
+			break;
+		}
+	return(EFailed);
+	}
+
+TPointerCheckRet CPcWindowAltGroup::DragDrop()
+	{
+	switch(iTest->State())
+		{
+		case EDragDropCapture:
+		case EDragDropCaptureAllGroups:
+			switch(iTest->SubState())
+				{
+				case EOtherGroup:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		default:
+			break;
+		}
+	return(EFailed);
+	}
+
+void CPcWindowAltGroup::Draw()
+	{
+	TBuf<0x40> buf;
+	if (iTest->State()==ECaptureDisabled)
+		{
+		switch(iTest->SubState())
+			{
+			case EMainWindow:
+				break;
+			case EChildWindow:
+				buf.Copy(_L("Click on me"));
+				break;
+			}
+		}
+	else
+		{
+		switch(iTest->SubState())
+			{
+			case EOtherGroup:
+				buf.Copy(_L("Click on me"));
+				break;
+			default:
+				break;
+			}
+		}
+	CPcWindowBase::Draw(buf);
+	}
+
+//
+
+CPcWindowAltConnection::CPcWindowAltConnection(TPointerCaptureTest *aTest) : CPcWindowBase(aTest)
+	{
+	iBack=TRgb::Gray256(236);
+	}
+
+TPointerCheckRet CPcWindowAltConnection::PointerDown()
+	{
+	switch(iTest->State())
+		{
+		case ECaptureDisabled:
+			if (iTest->SubState()==EChildWindow)
+				return(EOkay);
+			break;
+		case ENormalCapture:
+		case EDragDropCapture:
+		case ENormalCaptureWithoutFocus:
+			switch(iTest->SubState())
+				{
+				case EOtherSession:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		default:
+			break;
+		}
+	return(EFailed);
+	}
+
+TPointerCheckRet CPcWindowAltConnection::DragDrop()
+	{
+	switch(iTest->State())
+		{
+		case EDragDropCapture:
+		case EDragDropCaptureAllGroups:
+			switch(iTest->SubState())
+				{
+				case EOtherSession:
+					return(EOkay);
+				default:
+					break;
+				}
+			break;
+		default:
+			break;
+		}
+	return(EFailed);
+	}
+
+void CPcWindowAltConnection::Draw()
+	{
+	TBuf<0x40> buf;
+	if (iTest->State()!=ECaptureDisabled)
+		{
+		switch(iTest->SubState())
+			{
+			case EOtherSession:
+				buf.Copy(_L("Click on me"));
+				break;
+			default:
+				break;
+			}
+		}
+	CPcWindowBase::Draw(buf);
+	}
+
+//
+
+TPointerCaptureTest::TPointerCaptureTest() : CTestBase(_L("Pointer Capture"))
+	{}
+
+TPointerCaptureTest::~TPointerCaptureTest()
+	{
+	delete iNickFocusBlankWin;
+	delete iNickFocusGroup;
+	delete iAltConnectionWin;
+	delete iAltConnection;
+	delete iChildWin;
+	delete iMainWin;
+	delete iMainGroup;
+	delete iAltGroupWin;
+	delete iAltGroup;
+	}
+
+void TPointerCaptureTest::TestFailed()
+	{
+	__ASSERT_DEBUG(iFailed==EFalse,TManPanic(ETManPanicPcFailed));
+	iFailed=ETrue;
+	Client()->iGroup->GroupWin()->SetOrdinalPosition(0,10);	// Put error dialog on top of test windows
+	TInt dRet=1;
+	TRAPD(err,dRet=doTestFailedL());
+	Client()->iGroup->GroupWin()->SetOrdinalPosition(0,0);
+	switch(dRet)
+		{
+		case 0:
+			RestartTest();
+			break;
+		case 1:
+			TRAP(err,TestL(EFalse));
+			break;
+		}
+	}
+
+TInt TPointerCaptureTest::doTestFailedL()
+	{
+	CTDialog *dialog=new(ELeave) CTDialog();
+	dialog->SetTitle(_L("Pointer capture test failed"));
+	dialog->SetNumButtons(2);
+	dialog->SetButtonText(0,_L("Retest"));
+	dialog->SetButtonText(1,_L("Fail"));
+	dialog->ConstructLD(*Client()->iGroup,*Client()->iGc);
+	return dialog->Display();
+	}
+
+TInt TPointerCaptureTest::State() const
+	{
+	return(iState);
+	}
+
+TInt TPointerCaptureTest::SubState() const
+	{
+	return(iSubState);
+	}
+
+void TPointerCaptureTest::doIncSubState()
+	{
+	iSubState++;
+	TInt max=0;
+	switch(iState)
+		{
+		case ECaptureDisabled:
+			max=ESubStates1;
+			break;
+		case ENormalCapture:
+			max=ESubStates2;
+			break;
+		case ECaptureAllGroups:
+			max=ESubStates3;
+			break;
+		case EDragDropCapture:
+			max=ESubStates4;
+			break;
+		case EDragDropCaptureAllGroups:
+			max=ESubStates5;
+			break;
+		case ENormalCaptureWithoutFocus:
+			max=ESubStates6;
+			break;
+		}
+	if (iSubState==max)
+		NextTest();
+	StateChanged();
+	}
+
+void TPointerCaptureTest::GotDD()
+	{
+	if (iDDState==DDStateWaiting)
+		doIncSubState();
+	else
+		iDDState=DDStateGot;
+	}
+
+void TPointerCaptureTest::IncSubState(TBool aNeedsDD)
+	{
+	if (!aNeedsDD)
+		{
+		if (iDDState!=DDStateNull)
+			TestFailed();
+		else
+			doIncSubState();
+		}
+	else if (iDDState==DDStateGot)
+		doIncSubState();
+	else
+		iDDState=DDStateWaiting;
+	}
+
+void TPointerCaptureTest::StateChanged()
+	{
+	iDDState=DDStateNull;
+	iChildWin->SubStateChanged();
+	iMainWin->SubStateChanged();
+	iAltGroupWin->SubStateChanged();
+	iAltConnectionWin->SubStateChanged();
+	}
+
+void TPointerCaptureTest::AbortTests()
+	{
+	iState=99;
+	Request();
+	}
+
+void TPointerCaptureTest::NextTest()
+	{
+	iState++;
+	Request();
+	}
+
+void TPointerCaptureTest::RestartTest()
+	{
+	Request();
+	}
+
+void TPointerCaptureTest::ConstructL()
+	{
+	TSize size(Client()->iGroup->Size());
+	TInt winWidth2=size.iWidth/2-EWinBorderSize*2;
+	TInt winWidth4=size.iWidth/4-EWinBorderSize*2;
+	TInt winHeight=size.iHeight/2-EWinBorderSize*2;
+//
+	iMainGroup=new(ELeave) CTWindowGroup(Client());
+	iMainGroup->ConstructL();
+	iMainGroup->GroupWin()->SetOrdinalPosition(0,1);
+	iMainWin=new(ELeave) CPcWindowMain(this);
+	iMainWin->SetUpL(TPoint(EWinBorderSize,EWinBorderSize) ,TSize(winWidth2,winHeight) ,iMainGroup);
+	iMainGroup->SetCurrentWindow(iMainWin);
+	iChildWin=new(ELeave) CPcWindowChild(this);
+	iChildWin->SetUpL(TPoint(0,winHeight/2) ,TSize(winWidth2,winHeight/2) ,iMainWin);
+//
+	iAltGroup=new(ELeave) CTWindowGroup(Client());
+	iAltGroup->ConstructL();
+	iAltGroup->GroupWin()->SetOrdinalPosition(0,1);
+	iAltGroup->GroupWin()->EnableReceiptOfFocus(EFalse);
+	iAltGroupWin=new(ELeave) CPcWindowAltGroup(this);
+	iAltGroupWin->SetUpL(TPoint(size.iWidth/2+EWinBorderSize,EWinBorderSize) ,TSize(winWidth4,winHeight) ,iAltGroup);
+//
+	iAltConnection=new(ELeave) CPcConnection(this);
+	iAltConnection->ConstructL();
+	iAltConnectionWin=new(ELeave) CPcWindowAltConnection(this);
+	iAltConnectionWin->SetUpL(TPoint(size.iWidth/4*3+EWinBorderSize,EWinBorderSize) ,TSize(winWidth4,winHeight),iAltConnection->iGroup,*iAltConnection->iGc);
+	}
+
+void TPointerCaptureTest::NickFocusL()
+	{
+	iNickFocusGroup=new(ELeave) CPcWindowNickFocusGroup(this,Client());
+	iNickFocusGroup->ConstructL();
+	iNickFocusGroup->GroupWin()->SetOrdinalPosition(0,2);
+	iNickFocusBlankWin=new(ELeave) CTBlankWindow();
+	iNickFocusBlankWin->ConstructL(*iNickFocusGroup);
+	iNickFocusBlankWin->SetSize(TSize(1,1));
+	iNickFocusBlankWin->Activate();
+	}
+
+void TPointerCaptureTest::SetCapture(TInt aCaptureFlags)
+	{
+	iMainWin->Win()->SetPointerCapture(aCaptureFlags);
+	}
+
+TestState TPointerCaptureTest::DoTestL()
+	{
+	iSubState=0;
+	iFailed=EFalse;
+	StateChanged();
+	switch(iState)
+		{
+		case ECaptureDisabled:
+			LogSubTest(_L("No capture"),1);
+			SetCapture(RWindowBase::TCaptureDisabled);
+			break;
+		case ENormalCapture:
+			LogSubTest(_L("Normal capture"),1);
+			SetCapture(RWindowBase::TCaptureEnabled);
+			break;
+		case ECaptureAllGroups:
+			LogSubTest(_L("All groups"),1);
+			SetCapture(RWindowBase::TCaptureEnabled|RWindowBase::TCaptureFlagAllGroups);
+			break;
+		case EDragDropCapture:
+			LogSubTest(_L("Drag & Drop"),1);
+			SetCapture(RWindowBase::TCaptureDragDrop&~RWindowBase::TCaptureFlagAllGroups);
+			break;
+		case EDragDropCaptureAllGroups:
+			LogSubTest(_L("Drag & Drop All groups"),1);
+			SetCapture(RWindowBase::TCaptureDragDrop);
+			break;
+		case ENormalCaptureWithoutFocus:
+			LogSubTest(_L("Without focus"),1);
+			NickFocusL();
+			SetCapture(RWindowBase::TCaptureEnabled);
+			break;
+		default:
+			return(EFinished);
+		}
+	return(EContinue);
+ 	}