📄 appui.cpp
字号:
// appui.cpp
//
// Copyright (c) 2000 Symbian Ltd. All rights reserved.
//
#include "appui.h"
#include "controller.h"
#include "view.h"
#include "tp-ships-uids.h"
#include <eikenv.h>
#include <eikmenup.h>
//
// CGameAppUi
//
void CGameAppUi::ConstructL()
{
BaseConstructL();
iController=static_cast<CGameDocument*>(Document())->iController;
// sound effects
iSoundEffects=new(ELeave) CSoundEffects;
iSoundEffects->ConstructL();
// view data object
iFleetViewData = new (ELeave) CFleetViewData(*iSoundEffects,
*iController, ClientRect());
iFleetViewData->ConstructL();
// construct P1 opposition fleet view
iP1OppFleetView=COppFleetView::NewL(*iFleetViewData,
iController->Engine().iP1OppFleet, ETrue);
// construct P1 own fleet view
iP1MyFleetView=CMyFleetView::NewL(*iFleetViewData,
iController->Engine().iP1MyFleet, ETrue);
// construct P1 opposition fleet view
iP2OppFleetView=COppFleetView::NewL(*iFleetViewData,
iController->Engine().iP2OppFleet, EFalse);
// construct P1 own fleet view
iP2MyFleetView=CMyFleetView::NewL(*iFleetViewData,
iController->Engine().iP2MyFleet, EFalse);
// construct hider view
iHiderView=new(ELeave) CHiderView;
iHiderView->ConstructL(ClientRect());
RegisterViewL(*iHiderView);
AddToStackL(*iHiderView, iHiderView);
SetDefaultViewL(*iP1OppFleetView);
}
CGameAppUi::~CGameAppUi()
{
// remove opposition fleet view
delete iP1OppFleetView;
delete iP2OppFleetView;
delete iP1MyFleetView;
delete iP2MyFleetView;
// remove hider view
RemoveFromStack(iHiderView);
DeregisterView(*iHiderView);
delete iHiderView;
delete iFleetViewData;
delete iSoundEffects;
}
void CGameAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
// TwoShips menu
case EGameCmdStart:
CmdStartL();
break;
case EEikCmdExit:
SaveL();
Exit();
break;
// View menu
case EGameCmdMyFleet:
if (iController->Engine().IsMyTurn())
ActivateViewL(TVwsViewId(KUidTpShips,KP2MyViewUID));
else
ActivateViewL(TVwsViewId(KUidTpShips,KP1MyViewUID));
break;
case EGameCmdOppFleet:
if (iController->Engine().IsMyTurn())
ActivateViewL(TVwsViewId(KUidTpShips,KP1OppViewUID));
else
ActivateViewL(TVwsViewId(KUidTpShips,KP2OppViewUID));
break;
case EEikCmdZoomIn:
CmdZoomInL();
break;
case EEikCmdZoomOut:
CmdZoomOutL();
break;
case EGameCmdHider:
CmdHideL();
break;
}
}
void CGameAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
{
if (aResourceId != R_GAME_VIEW_MENU) return;
// toggle menu item dimming on view displayed
TBool view = ((iActiveView == iP1MyFleetView)||(iActiveView == iP2MyFleetView));
aMenuPane->SetItemDimmed(EGameCmdMyFleet,view);
view = ((iActiveView == iP1OppFleetView)||(iActiveView == iP2OppFleetView));
aMenuPane->SetItemDimmed(EGameCmdOppFleet,view);
// if hider view is active, can't zoom or hide
if (iActiveView == NULL)
{
aMenuPane->SetItemDimmed(EEikCmdZoomOut,ETrue);
aMenuPane->SetItemDimmed(EEikCmdZoomIn,ETrue);
aMenuPane->SetItemDimmed(EGameCmdHider,ETrue);
}
}
void CGameAppUi::CmdStartL()
{
// user-friendly check
if (!iEikonEnv->QueryWinL(R_GAME_QUERY_ABANDON))
return;
iController->Reset();
iP1OppFleetView->DrawTilesNow();
}
void CGameAppUi::CmdZoomInL()
{
iController->ZoomInL();
}
void CGameAppUi::CmdZoomOutL()
{
iController->ZoomOutL();
}
void CGameAppUi::CmdHideL()
{
ActivateViewL(TVwsViewId(KUidTpShips,KHiderViewUID));
iActiveView = NULL;
// toggle player turn
if (iController->Engine().IsMyTurn())
iController->Engine().SetSecondPlayer();
else
iController->Engine().SetFirstPlayer();
}
//
// CGameDocument
//
CGameDocument::CGameDocument(CEikApplication& aApp)
: CEikDocument(aApp)
{
}
void CGameDocument::ConstructL()
{
iController=CGameController::NewL();
}
CGameDocument::~CGameDocument()
{
delete iController;
}
CEikAppUi* CGameDocument::CreateAppUiL()
{
return new(ELeave) CGameAppUi;
}
void CGameDocument::NewDocumentL()
{
iController->Reset();
}
void CGameDocument::RestoreL(const CStreamStore& aStore,const CStreamDictionary& aStreamDict)
{
// new controller initialized from store
TStreamId id=aStreamDict.At(KUidTpShips);
iController->RestoreL(aStore, id);
}
void CGameDocument::StoreL(CStreamStore& aStore,CStreamDictionary& aStreamDict) const
{
TStreamId id=iController->StoreL(aStore);
aStreamDict.AssignL(KUidTpShips,id);
}
/*
CGameApplication
*/
TUid CGameApplication::AppDllUid() const
{
return KUidTpShips;
}
CApaDocument* CGameApplication::CreateDocumentL()
{
CGameDocument* doc=new(ELeave) CGameDocument(*this);
CleanupStack::PushL(doc);
doc->ConstructL();
CleanupStack::Pop();
return doc;
}
// DLL interface stuff
EXPORT_C CApaApplication* NewApplication()
{
return new CGameApplication;
}
GLDEF_C TInt E32Dll(TDllReason)
{
return KErrNone;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -