⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appui.cpp

📁 《SymbianOSC手机应用开发》源码
💻 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 + -