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

📄 appui.cpp

📁 在symbian下用Visual C++开发的网络络天室的程序
💻 CPP
字号:
// appui.cpp
//
// Copyright (c) 2000 Symbian Ltd.  All rights reserved.
//

#include "gdp.h"

#include "appui.h"
#include "controller.h"
#include "appview.h"

#include <eikenv.h>
#include <eikbutb.h>
#include <eiktbar.h>
#include <eikdialg.h>
#include <eikedwin.h>
#include <eikfnlab.h>
#include <eikchlst.h>

#include <qiknumbereditor.h>


// for use with r_game_gdp_protocols
TInt GDPProtocolIDToChoiceList(TUid aProtocol);
TUid ChoiceListToGDPProtocol(TInt aIndex);

/*
	CGameSendDialog
*/

class CGameSendDialog : public CEikDialog
	{
public:
	CGameSendDialog(CGameController* aController);
private:
	// from CEikDialog
	void PreLayoutDynInitL(); // initialization
	TBool OkToExitL(TInt aKeycode); // termination
private:
	CGameController* iController;
	};

CGameSendDialog::CGameSendDialog(CGameController* aController)
	: iController(aController)
	{
	}

void CGameSendDialog::PreLayoutDynInitL() // initialization
	{
	static_cast<CEikEdwin*>(Control(EGameControlIdSendText))->SetTextL(&(iController->iEngine->LastSent()));
	}

TBool CGameSendDialog::OkToExitL(TInt /* aKeycode */) // termination
	{
	CEikEdwin* edwin=STATIC_CAST(CEikEdwin*, Control(EGameControlIdSendText));
	HBufC* string=edwin->GetTextInHBufL();
	if (!string)
		string=_L("").AllocL();
	CleanupStack::PushL(string);
	iController->CmdSendMessageL(*string);
	CleanupStack::PopAndDestroy(); // string
	return ETrue;
	}

/*
	CGameInitiateDialog
*/

class CGameInitiateDialog : public CEikDialog
	{
public:
	CGameInitiateDialog(CGameController* aController);
private:
	// from CEikDialog
	void PreLayoutDynInitL(); // initialization
	TBool OkToExitL(TInt aKeycode); // termination
private:
	CGameController* iController;
	};

CGameInitiateDialog::CGameInitiateDialog(CGameController* aController)
	: iController(aController)
	{
	}

void CGameInitiateDialog::PreLayoutDynInitL() // initialization
	{
	_LIT(KBlank,"");
	static_cast<CEikEdwin*>(Control(EGameControlIdOtherAddress))->SetTextL(&KBlank);
	}

TBool CGameInitiateDialog::OkToExitL(TInt /* aKeycode */) // termination
	{
	// reset controller if necessary
	if (!iController->iRgcp->IsBlank())
		iController->Reset();
	// get other address
	CEikEdwin* edwin=STATIC_CAST(CEikEdwin*, Control(EGameControlIdOtherAddress));
	HBufC* address=edwin->GetTextInHBufL();
	if (!address)
		address=_L("").AllocL();
	CleanupStack::PushL(address);
	// get controller to handle set up
	iController->InitiateL(*address);
	iEikonEnv->InfoMsg(R_GAME_HAVE_INITIATED);
	// clean up and return
	CleanupStack::PopAndDestroy(); // address
	return ETrue;
	}

/*
	CGameSetMeDialog
*/

class CGameSetMeDialog : public CEikDialog
	{
public:
	CGameSetMeDialog(CGameController* aController);
private:
	// from CEikDialog
	void PreLayoutDynInitL(); // initialization
	TBool OkToExitL(TInt aKeycode); // termination

private:
	CGameController* iController;
	};

CGameSetMeDialog::CGameSetMeDialog(CGameController* aController)
	: iController(aController)
	{
	}

void CGameSetMeDialog::PreLayoutDynInitL() // initialization
	{
	TInt cursor = GDPProtocolIDToChoiceList(iController->iRgcp->Gsdp().GetGdpProtocol());
 	static_cast<CEikChoiceListBase*>(Control(EGameControlIdProtocol))->SetCurrentItem(cursor);
  	}

TBool CGameSetMeDialog::OkToExitL(TInt /* aKeycode */) // termination
	{
	// reset controller if necessary
	if (!iController->iRgcp->IsBlank())
		iController->Reset();
	// get protocol
	TInt cursor = static_cast<CEikChoiceListBase*>(Control(EGameControlIdProtocol))->CurrentItem() + 1;
	// get controller to handle set up
	iController->SetupMeL(ChoiceListToGDPProtocol(cursor));
	iEikonEnv->InfoMsg(R_GAME_HAVE_SETME);
	// clean up and return
	return ETrue;
	}

// ordering in these two functions must match resource file
TInt GDPProtocolIDToChoiceList(TUid aProtocol)
	{
	if (aProtocol == KGdpLoopbackUid) return 0;
	else if (aProtocol == KGdpBTUid) return 1;
	else if (aProtocol == KGdpSmsUid) return 2;
	else return 0;
	}

TUid ChoiceListToGDPProtocol(TInt aIndex)
	{
	switch (aIndex)
		{
	case 1: return KGdpLoopbackUid;
	case 2: return KGdpBTUid;
	case 3: return KGdpSmsUid;
	default: return KGdpLoopbackUid;
		}
	}

/*
	CGameDisplaySettingsDialog
*/

class CGameDisplaySettingsDialog : public CEikDialog
	{
public:
	CGameDisplaySettingsDialog(CGameController* aController);
private:
	// from CEikDialog
	void PreLayoutDynInitL(); // initialization
private:
	CGameController* iController;
	};

CGameDisplaySettingsDialog::CGameDisplaySettingsDialog(CGameController* aController)
	: iController(aController)
	{
	}

void CGameDisplaySettingsDialog::PreLayoutDynInitL() // initialization
	{
	static_cast<CEikChoiceListBase*>(Control(EGameControlIdState))->SetCurrentItem(iController->iRgcp->State());
	static_cast<CEikChoiceListBase*>(Control(EGameControlIdProtocol))->SetCurrentItem(GDPProtocolIDToChoiceList(iController->iRgcp->Gsdp().GetGdpProtocol()));

	TBuf<10> port;
	port.AppendNum(TUint(iController->iRgcp->Gsdp().GetMyPort()));
 	static_cast<CEikEdwin*>(Control(EGameControlIdMyPort))->SetTextL(&port);

	port.Zero();
	port.AppendNum(TUint(iController->iRgcp->Gsdp().GetOtherPort()));
	static_cast<CEikEdwin*>(Control(EGameControlIdOtherPort))->SetTextL(&port);

	TBuf<KMaxGsdpAddress> address;
	iController->GetOtherAddress(address);
	static_cast<CEikEdwin*>(Control(EGameControlIdOtherAddress))->SetTextL(&address);
	}

/*
	CGameAppUi
*/

void CGameAppUi::ConstructL()
    {
    BaseConstructL();
	// construct comms interfaces and controller for player 1
	iController=new(ELeave) CGameController;
	iController->ConstructL(STATIC_CAST(CGameDocument*, Document())->iEngine, STATIC_CAST(CGameDocument*, Document())->iRgcp, this);
	iController->Reset();
    }

CGameAppUi::~CGameAppUi()
	{
	delete iController;
	}

void CGameAppUi::HandleCommandL(TInt aCommand)
	{
	switch (aCommand)
		{
	case EGameCmdSend:
		CmdSendL();
		break;
	case EGameCmdResend:
		CmdResend();
		break;
	case EGameCmdReceive:
		CmdReceiveL();
		break;
	case EGameCmdDisplaySettings:
		CmdDisplaySettingsL();
		break;
	case EGameCmdReset:
		CmdResetL();
		break;
	case EGameCmdSetMe:
		CmdSetMeL();
		break;
	case EGameCmdInitiate:
		CmdInitiateL();
		break;
	case EGameCmdListen:
		CmdListenL();
		break;
	case EEikCmdExit: 
		SaveL();
		Exit();
		break;
		}
	}

void CGameAppUi::CmdSetMeL()
	{
	// user-friendly checks
	if (!iController->iRgcp->IsBlank() && !iEikonEnv->QueryWinL(R_GAME_CONFIRM_SETME))
		return;
	// do it
	CEikDialog* dialog=new(ELeave) CGameSetMeDialog(iController);
	dialog->ExecuteLD(R_GAME_SET_ME_DIALOG);
	}

void CGameAppUi::CmdDisplaySettingsL()
	{
	CEikDialog* dialog=new(ELeave) CGameDisplaySettingsDialog(iController);
	dialog->ExecuteLD(R_GAME_DISPLAY_SETTINGS_DIALOG);
	}

void CGameAppUi::CmdListenL()
	{
	// user-friendly checks
	if (!iController->iRgcp->IsBlank() && !iEikonEnv->QueryWinL(R_GAME_CONFIRM_LISTEN))
		return;
	// do it
	iController->Reset();
	iController->Listen();
	iEikonEnv->InfoMsg(R_GAME_AM_LISTENING);
	}

void CGameAppUi::CmdInitiateL()
	{
	// user-friendly checks
	if (!iController->iRgcp->IsBlank() && !iEikonEnv->QueryWinL(R_GAME_CONFIRM_INITIATE))
		return;
	// do it
	CEikDialog* dialog=new(ELeave) CGameInitiateDialog(iController);
	dialog->ExecuteLD(R_GAME_INITIATE_DIALOG);
	}

void CGameAppUi::CmdResetL()
	{
	// user-friendly checks and messages
	if (iController->iRgcp->IsBlank())
		iEikonEnv->LeaveWithInfoMsg(R_GAME_ALREADY_RESET);
	if (!iEikonEnv->QueryWinL(R_GAME_CONFIRM_RESET))
		return;
	// ok, do it
	iController->Reset();
	iEikonEnv->InfoMsg(R_GAME_HAVE_RESET);
	}

void CGameAppUi::CmdSendL()
	{
	// user-friendly check
	if (!iController->iRgcp->IsBound())
		iEikonEnv->LeaveWithInfoMsg(R_GAME_CANT_SEND);
	if (!iController->iRgcp->IsRequesting())
		iEikonEnv->LeaveWithInfoMsg(R_GAME_NOT_YOUR_TURN);
	// do it
	CEikDialog* dialog=new(ELeave) CGameSendDialog(iController);
	dialog->ExecuteLD(R_GAME_SEND_DIALOG);
	}

void CGameAppUi::CmdResend()
	{
	// user-friendly check
	if (!iController->iRgcp->IsWaiting() && !iController->iRgcp->IsInitiating())
		iEikonEnv->LeaveWithInfoMsg(R_GAME_NOTHING_TO_RESEND);
	iController->iRgcp->Resend();
	iEikonEnv->InfoMsg(R_GAME_RESENT);
	}

void CGameAppUi::CmdReceiveL()
	{
	iEikonEnv->InfoMsg(R_GAME_RECEIVE_NOT_IMPLEMENTED);
	}

// file-based app framework

TBool CGameAppUi::ProcessCommandParametersL(TApaCommand aCommand, TFileName& aDocumentName, const TDesC& /*aTail*/)
	{
	return CEikAppUi::ProcessCommandParametersL(aCommand, aDocumentName);
	}

void CGameAppUi::HandleModelChangeL()
	{
	iController->SetEngineL(STATIC_CAST(CGameDocument*, Document())->iEngine);
	iController->SetRgcpL(STATIC_CAST(CGameDocument*, Document())->iRgcp);
	iEikonEnv->UpdateTaskNameL();
/*
	CEikFileNameLabel* filenameLabel=
		STATIC_CAST(CEikFileNameLabel*,
			iToolBar->ControlById(EGameControlIdFileNameLabel));
	filenameLabel->UpdateL();
	filenameLabel->DrawNow();
*/
	}

/*
	CGameDocument
*/

CGameDocument::CGameDocument(CEikApplication& aApp)
		: CEikDocument(aApp)
	{
	}

void CGameDocument::ConstructL()
	{
	iEngine=new(ELeave) CGameEngine;
	iRgcp=new(ELeave) CRgcpSession;
	iRgcp->ConstructL(KUidExample.iUid);
	}

CGameDocument::~CGameDocument()
	{
	delete iRgcp;
	delete iEngine;
	}

CEikAppUi* CGameDocument::CreateAppUiL()
	{
    return new(ELeave) CGameAppUi;
	}

void CGameDocument::NewDocumentL()
	{
	iEngine->Reset();
	iRgcp->Terminate();
	}

void CGameDocument::RestoreL(const CStreamStore& aStore,const CStreamDictionary& aStreamDict)
	{
	// new engine initialized from store
	CGameEngine* engine=new(ELeave) CGameEngine;
	CleanupStack::PushL(engine);
	TStreamId id=aStreamDict.At(KUidExample);
	engine->RestoreL(aStore, id);
	// new RGCP session initialized from store
	CRgcpSession* rgcp=new(ELeave) CRgcpSession;
	CleanupStack::PushL(rgcp);
	rgcp->ConstructL(KUidExample.iUid);
	id=aStreamDict.At(KUidRgcp);
	rgcp->RestoreL(aStore, id);
	// tidy up and set new values
	CleanupStack::Pop(2); // rgcp, engine
	delete iEngine;
	iEngine=engine;
	delete iRgcp;
	iRgcp=rgcp;
	}

void CGameDocument::StoreL(CStreamStore& aStore,CStreamDictionary& aStreamDict) const
	{
	TStreamId id=iEngine->StoreL(aStore);
	aStreamDict.AssignL(KUidExample,id);
	id=iRgcp->StoreL(aStore);
	aStreamDict.AssignL(KUidRgcp,id);
	}

/*
	CGameApplication
*/

TUid CGameApplication::AppDllUid() const
	{
	TUid uid;
	uid.iUid = 0x10005408;;
	return uid;
	}

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 + -