Applied patch 1, to provide a syborg specific minigui oby file.
Need to compare this with the "stripped" version currently in the tree.
This supplied version applies for Nokia builds, but need to repeat the
test for SF builds to see if pruning is needed, or if the file needs to
be device-specific.
// Copyright (c) 1995-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 code to tun ANIMDLL.DLL
//
//
#include <e32std.h>
#include <w32std.h>
#include <e32svr.h>
#include "../tlib/testbase.h"
#include "TANIM.H"
#include "ANIMDLL.H"
#define NONEXISTENT_DLL_NAME _L("Z:\\NONEXISTENT.DLL")
#define ANIM_BITMAP _L("Z:\\WSTEST\\TANIM.MBM")
#define ANIM_DLL_NAME _L("ANIDLL.DLL")
enum TAnimPanic
{
EAnimPanicBadLoadFailed,
};
class CTAnimClient;
class TestAnim : public RAnim
{
public:
TestAnim(RAnimDll &aDll);
TInt Construct(RWindowBase &aWin,const TPoint &aPos,CFbsBitmap *aBit1,CFbsBitmap *aBit2,CFbsBitmap *aMask,TInt aInterval, CFbsFont *aFont);
void Set(const TPoint &aPos, TInt aInterval);
void TextPos(const TPoint &aPos);
void SetPolyRectL(const TRect &aRect);
void ToggleMask();
};
class CTAnimWindow2 : public CTBlankWindow
{
public:
CTAnimWindow2(RAnimDll &aAnimDll);
~CTAnimWindow2();
void ConstructL(CTWinBase &parent, const TPoint &aPos, const TSize &aSize);
void ConstructExtLD(CTWinBase &aParent, const TPoint &aPos, const TSize &aSize);
private:
TestAnim iAnim;
CFbsBitmap iAnimBitmap1;
CFbsBitmap iAnimBitmap2;
};
class CTAnimWindow1 : public CTTitledWindow
{
public:
CTAnimWindow1(RAnimDll &aAnimDll);
~CTAnimWindow1();
void ConstructL(CTWinBase &parent);
void Draw();
void AdjustAnimRect(TInt xMove,TInt yMove,TInt modifiers);
void AdjustPolyRectL(TInt xMove,TInt yMove,TInt modifiers);
void ToggleMask();
TInt SubType();
private:
TestAnim iAnim;
TPoint iAnimPos;
TRect iAnimPolyRect;
CFbsBitmap iAnimBitmap1;
CFbsBitmap iAnimBitmap2;
CFbsBitmap iMask;
};
class CTAnimWindowGroup : public CTWindowGroup
{
public:
CTAnimWindowGroup(CTClient *aClient);
void CursorKeyL(TInt xMove,TInt yMove,TInt modifiers);
void KeyL(const TKeyEvent &aKey, const TTime &aTime);
TInt iCursorMode;
};
class CTAnimClient : public CTClient
{
public:
CTAnimClient();
~CTAnimClient();
void ConstructL();
void KeyL(const TKeyEvent &aKey,const TTime &aTime);
void ExitL();
void ErrorTests();
CTBaseWin *CreateTestWindowL(TPoint pos,TSize size,CTWinBase *parent, TInt aType);
private:
TInt iNum;
RAnimDll iAnimDll;
};
const TInt Xmove=8;
const TInt Ymove=6;
void AnimPanic(TInt aPanic)
{
User::Panic(_L("ANIM"),aPanic);
}
//
// Anim class
//
TestAnim::TestAnim(RAnimDll &aDll) : RAnim(aDll)
{
}
TInt TestAnim::Construct(RWindowBase &aWin, const TPoint &aPos, CFbsBitmap *aBit1,CFbsBitmap *aBit2,CFbsBitmap *aMask, TInt aInterval, CFbsFont *aFont)
{
TPckgBuf<CTAParams> params;
params().pos=aPos;
params().interval=aInterval;
params().bit1=aBit1->Handle();
params().bit2=aBit2->Handle();
params().mask=aMask->Handle();
params().font=aFont->Handle();
return(RAnim::Construct(aWin,0,params));
}
void TestAnim::Set(const TPoint &aPos, TInt aInterval)
{
TPckgBuf<CTAParams> params;
params().pos=aPos;
params().interval=aInterval;
Command(EADllOpcodeMove,params);
}
void TestAnim::TextPos(const TPoint &aPos)
{
TPckgBuf<TPoint> params;
params()=aPos;
Command(EADllTextPos,params);
}
void TestAnim::SetPolyRectL(const TRect &aRect)
{
TPckgC<TRect> params(aRect);
User::LeaveIfError(CommandReply(EADllOpcodePolyLineRect,params));
}
void TestAnim::ToggleMask()
{
Command(EADllToggleBitmapMask);
}
//
// Individual window sub-classes
//
CTAnimWindow1::CTAnimWindow1(RAnimDll &aAnimDll) : CTTitledWindow(),
iAnim(aAnimDll)
{
}
CTAnimWindow1::~CTAnimWindow1()
{
iAnim.Close();
}
void CTAnimWindow1::ConstructL(CTWinBase &parent)
{
CTTitledWindow::ConstructL(parent);
User::LeaveIfError(iAnimBitmap1.Load(ANIM_BITMAP,EMbmTanimAnim1));
User::LeaveIfError(iAnimBitmap2.Load(ANIM_BITMAP,EMbmTanimAnim2));
User::LeaveIfError(iMask.Load(ANIM_BITMAP,EMbmTanimMask));
iAnimPos=TPoint(10,10);
User::LeaveIfError(iAnim.Construct(iWin, iAnimPos,&iAnimBitmap1,&iAnimBitmap2,&iMask,1,iFont));
iAnimPolyRect=TRect(TPoint(10,40),TSize(50,50));
iAnim.SetPolyRectL(iAnimPolyRect);
iAnim.TextPos(TPoint(20,50));
}
void CTAnimWindow1::Draw()
{
TInt i;
CTTitledWindow::Draw();
iGc->SetPenColor(TRgb::Gray16(8));
TInt hgt=iSize.iHeight-iTitleHeight;
for(i=0;i<iSize.iWidth;i+=30)
{
iGc->DrawLine(TPoint(i,iTitleHeight),TPoint(iSize.iWidth,iTitleHeight+(hgt*i)/iSize.iWidth));
iGc->DrawLine(TPoint(iSize.iWidth-i,iTitleHeight+hgt),TPoint(iSize.iWidth,iTitleHeight+(hgt*i)/iSize.iWidth));
iGc->DrawLine(TPoint(iSize.iWidth-i,iTitleHeight+hgt),TPoint(0,iTitleHeight+hgt-(hgt*i)/iSize.iWidth));
iGc->DrawLine(TPoint(i,iTitleHeight),TPoint(0,iTitleHeight+hgt-(hgt*i)/iSize.iWidth));
}
}
void CTAnimWindow1::AdjustAnimRect(TInt xMove,TInt yMove,TInt modifiers)
{
if (modifiers&EModifierCtrl) // 4 times the movement
{
xMove<<=2;
yMove<<=2;
}
iAnimPos+=TPoint(xMove,yMove);
iAnim.Set(iAnimPos,5);
}
void CTAnimWindow1::AdjustPolyRectL(TInt xMove,TInt yMove,TInt modifiers)
{
if (modifiers&EModifierCtrl) // 4 times the movement
{
xMove<<=2;
yMove<<=2;
}
if (modifiers&EModifierShift) // 4 times the movement
iAnimPolyRect.Grow(xMove,yMove);
else
iAnimPolyRect.Move(TPoint(xMove,yMove));
iAnim.SetPolyRectL(iAnimPolyRect);
}
void CTAnimWindow1::ToggleMask()
{
iAnim.ToggleMask();
}
TInt CTAnimWindow1::SubType()
{
return(69);
}
// CTAnimWindow2 //
CTAnimWindow2::CTAnimWindow2(RAnimDll &aAnimDll) : CTBlankWindow(),
iAnim(aAnimDll)
{
}
CTAnimWindow2::~CTAnimWindow2()
{
iAnim.Close();
}
void CTAnimWindow2::ConstructL(CTWinBase &parent, const TPoint &aPos, const TSize &aSize)
{
CTBlankWindow::ConstructL(parent);
iWin.SetColor(TRgb(128,128,128));
iWin.SetVisible(EFalse);
SetExt(aPos,aSize);
iWin.Activate();
User::LeaveIfError(iAnimBitmap1.Load(ANIM_BITMAP,EMbmTanimAnim1));
User::LeaveIfError(iAnimBitmap2.Load(ANIM_BITMAP,EMbmTanimAnim2));
User::LeaveIfError(iAnim.Construct(iWin, TPoint(10,10), &iAnimBitmap1, &iAnimBitmap2, &iAnimBitmap1, 1, iFont));
iWin.SetVisible(ETrue);
}
void CTAnimWindow2::ConstructExtLD(CTWinBase &aParent, const TPoint &aPos, const TSize &aSize)
//
// Call ConstructL, SetExt and either of these fail destroy this and leave
//
{
TRAPD(err,ConstructL(aParent, aPos, aSize));
if (err!=KErrNone)
{
delete this;
User::Leave(err);
}
}
//
// End of CTAnimWindow class //
//
CTAnimWindowGroup::CTAnimWindowGroup(CTClient *aClient) : CTWindowGroup(aClient)
{
}
void CTAnimWindowGroup::CursorKeyL(TInt xMove,TInt yMove,TInt modifiers)
{
if (iCursorMode==0)
iCurWin->AdjustSizeL(xMove,yMove,modifiers);
else if (iCurWin->SubType()==69)
{
if (iCursorMode==1)
((CTAnimWindow1 *)iCurWin)->AdjustAnimRect(xMove,yMove,modifiers);
else
((CTAnimWindow1 *)iCurWin)->AdjustPolyRectL(xMove,yMove,modifiers);
}
}
void CTAnimWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &aTime)
{
if (aKey.iModifiers&EModifierCtrl)
{
TInt type=0;
switch(aKey.iCode)
{
case 1:
type=1;
break;
case 2:
type=2;
break;
}
if (type!=0)
{
TPoint pos;
TSize size;
pos.iX=iCurWin->Size().iWidth>>2;
pos.iY=iCurWin->Size().iHeight>>2;
size.iWidth=iCurWin->Size().iWidth>>1;
size.iHeight=iCurWin->Size().iHeight>>1;
SetCurrentWindow(((CTAnimClient *)iClient)->CreateTestWindowL(pos,size,iCurWin,type));
return;
}
}
if (aKey.iModifiers&EModifierFunc)
{
switch(aKey.iCode)
{
case 'x':
((CTAnimClient *)iClient)->ExitL();
break;
}
}
else switch(aKey.iCode)
{
case ' ':
iCursorMode=(iCursorMode+1)%3;
break;
case 8:
CTWin::Delete(iCurWin);
break;
case 9:
if (aKey.iModifiers&EModifierShift)
SetCurrentWindow(iCurWin->Prev());
else
SetCurrentWindow(iCurWin->Next());
break;
case 13:
if (iCurWin->SubType()==69)
((CTAnimWindow1 *)iCurWin)->ToggleMask();
break;
case EKeyLeftArrow:
CursorKeyL(-Xmove,0,aKey.iModifiers);
break;
case EKeyRightArrow:
CursorKeyL(Xmove,0,aKey.iModifiers);
break;
case EKeyUpArrow:
CursorKeyL(0,-Ymove,aKey.iModifiers);
break;
case EKeyDownArrow:
CursorKeyL(0,Ymove,aKey.iModifiers);
break;
default:
iCurWin->WinKeyL(aKey,aTime);
break;
}
}
//
CTAnimClient::CTAnimClient()
{
}
CTBaseWin *CTAnimClient::CreateTestWindowL(TPoint pos,TSize size,CTWinBase *parent, TInt type)
{
CTBaseWin *win;
if (type==1)
{
win=new(ELeave) CTAnimWindow1(iAnimDll);
win->ConstructExtLD(*parent,pos,size);
win->Activate();
}
else
{
win=new(ELeave) CTAnimWindow2(iAnimDll);
win->ConstructExtLD(*parent,pos,size);
}
win->AssignGC(*iGc);
return(win);
}
CTAnimClient::~CTAnimClient()
{
DestroyWindows();
iAnimDll.Close();
}
void CTAnimClient::ErrorTests()
{
RAnimDll animDll=RAnimDll(iWs);
if (animDll.Load(NONEXISTENT_DLL_NAME)!=KErrNotFound)
AnimPanic(EAnimPanicBadLoadFailed);
animDll.Close(); // Close should be harmless, but unnecassary
RAnimDll animDll2=RAnimDll(iWs);
if (animDll2.Load(NONEXISTENT_DLL_NAME)!=KErrNotFound)
AnimPanic(EAnimPanicBadLoadFailed);
}
void CTAnimClient::ConstructL()
{
CTClient::ConstructL();
iGroup=new(ELeave) CTAnimWindowGroup(this);
iGroup->ConstructL();
ErrorTests();
iAnimDll=RAnimDll(iWs);
User::LeaveIfError(iAnimDll.Load(ANIM_DLL_NAME));
CreateTestWindowL(TPoint(30,20),TSize(220,140),iGroup, 1);
CreateTestWindowL(TPoint(260,60),TSize(60,40),iGroup, 2);
iGroup->SetCurrentWindow(iGroup->Child());
}
void CTAnimClient::ExitL()
{
CActiveScheduler::Stop();
User::Leave(0); // Signals RunL not to do another Request()
}
GLDEF_C CTClient *CreateClientL()
{
return(new(ELeave) CTAnimClient());
}
GLDEF_C TInt E32Main()
{
return(TestLibStartUp(CreateClientL));
}