Prune down surface manager. Interface bit moved to surfacemanager_api. Implementation bit moved to graphics.nokia
// 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);
}