Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.
// 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);
}