亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ansphoneview.cpp

?? s60 接打電話代碼,很有學習價值的,可以移植到不同平臺
?? CPP
字號:
/**
*
* @brief Definition of CAnsPhoneView
*
* Copyright (c) EMCC Software Ltd 2003
* @version 1.0
*/
#include "AnsPhoneView.h"

#include <eiklabel.h>
#include <aknlists.h>
#include <akniconarray.h>
#include <akntitle.h>
#include <stringloader.h>
#include <barsread.h>
#include <AnsPhone.rsg>
#include <AnsPhone.mbg>
#include "AnsPhoneAppUi.h"
#include "AnsPhone.loc"

const TInt KMessageTextMaxLength	= 100;
const TInt KMessageTextTimeMaxLength = 50;

const TInt KDisplayMarginVertical		= 20;

const TInt KNumberIcons = 1;


_LIT(KMessageTextStart, "0\t");
_LIT(KDisplayTextNoNewMessages, "-");

_LIT(KMbmFile, "\\System\\apps\\AnsPhone\\AnsPhone.mbm");


CAnsPhoneView::CAnsPhoneView()
:iNumberNewMessages(0),
 iCanStop(EFalse),
 iState(EStopped),
 iPreviousState(EStopped),
 iMainState(EStopped)
	{
	}

CAnsPhoneView::~CAnsPhoneView()
	{
	delete iEngine;
	delete iDisplayStatus;
	delete iDisplayMessages;
	delete iMessagesList;
	}

CAnsPhoneView* CAnsPhoneView::NewL(const TRect& aRect)
	{
	CAnsPhoneView* self = new (ELeave) CAnsPhoneView();
	CleanupStack::PushL(self);
	self->ConstructL(aRect);
	CleanupStack::Pop(self);
	return self;
	}

void CAnsPhoneView::ConstructL(const TRect& aRect)
	{
	iEngine = CAnsPhoneEngine::NewL(*this);

	CreateWindowL();
	SetRect(aRect);

	TInt heightDisplays = (Rect().Height() - 3 * KDisplayMarginVertical) / 2;
	TInt widthControls = Rect().Width();

	iDisplayStatus = new (ELeave) CEikLabel();
	iDisplayStatus->SetContainerWindowL(*this);
	TRect rect = TRect(	TPoint(0, KDisplayMarginVertical), TSize(widthControls, heightDisplays));
	iDisplayStatus->SetRect(rect);
	iDisplayStatus->SetAlignment(EHCenterVCenter);

	HBufC* text = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_STOPPED);
	iDisplayStatus->SetTextL(*text);
	CleanupStack::PopAndDestroy(text);

    iDisplayStatus->SetFont(iEikonEnv->TitleFont());

	iDisplayMessages = new (ELeave) CEikLabel();
	iDisplayMessages->SetContainerWindowL(*this);
	rect = TRect(	TPoint(0, iDisplayStatus->Rect().Height() + 2 * KDisplayMarginVertical),
					TSize(widthControls, heightDisplays));
	iDisplayMessages->SetRect(rect);
	iDisplayMessages->SetAlignment(EHCenterVCenter);
	iDisplayMessages->SetTextL(KDisplayTextNoNewMessages);

    iDisplayMessages->SetFont(iEikonEnv->LegendFont());

	ActivateL();
	DrawDeferred();
	}

//////////////////////////////////////////////////////////////////////////////////////////
//	CCoeControl
//
//////////////////////////////////////////////////////////////////////////////////////////

void CAnsPhoneView::Draw(const TRect& /*aRect*/) const
	{
	CWindowGc& gc = SystemGc();
	gc.Clear(Rect());
	}

TInt CAnsPhoneView::CountComponentControls() const
	{
	if(iMessagesList)
		{
		return 1;
		}
	else
		{
		return 2;
		}
	}

CCoeControl* CAnsPhoneView::ComponentControl(TInt aIndex) const
	{
	if(iMessagesList)
		{
		return iMessagesList;
		}
	else
		{
		if(aIndex == 0)
			return iDisplayStatus;
		else
			return iDisplayMessages;
		}
	}

TKeyResponse CAnsPhoneView::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
// this is only used when the messages are on display;
// this is so that another menu can be displayed
	{
	if(!iMessagesList)
		return EKeyWasNotConsumed;
	else
		return iMessagesList->OfferKeyEventL(aKeyEvent, aType);
	}

//////////////////////////////////////////////////////////////////////////////////////////
//	MAnsPhoneEngineObserver
//
//////////////////////////////////////////////////////////////////////////////////////////

void CAnsPhoneView::HandlePlayMessageOverL()
// used for switching the menu back to the main one
	{
	iCanStop = EFalse;
	}

void CAnsPhoneView::HandleCallChangeL(const RCall::TStatus& aStatus)
// updates the view for a call change
	{
	STATIC_CAST(CAnsPhoneAppUi*, iCoeEnv->AppUi())->BringAppToFront();
	if(aStatus == RCall::EStatusConnected)
		{
		HBufC* text = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_ANSWERING);
		iDisplayStatus->SetTextL(*text);
		CleanupStack::PopAndDestroy(text);
		iState = EAnswering;
		}
	else
		{
		// hangingup: if the call has been hung up by the other person, whether they have recorded or not
		HBufC* text = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_RUNNING);
		iDisplayStatus->SetTextL(*text);
		CleanupStack::PopAndDestroy(text);
		iState = ERunning;
		}
	}

void CAnsPhoneView::HandleNewMessageL()
// updates the view for a new message coming in
	{
	iNumberNewMessages++;

	HBufC* statusText = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_RUNNING);
	iDisplayStatus->SetTextL(*statusText);
	iDisplayStatus->DrawDeferred();
	CleanupStack::PopAndDestroy(statusText );

	TBuf<KMessageTextMaxLength> buf;
	buf.AppendNum(iNumberNewMessages);

	HBufC* messagesText = NULL;
	if(iNumberNewMessages == 1)
		messagesText = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_NEWMESSAGE);
	else
		messagesText = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_NEWMESSAGES);
	buf.Append(*messagesText);
	CleanupStack::PopAndDestroy(messagesText);

	iDisplayMessages->SetTextL(buf);
	iDisplayMessages->DrawDeferred();
	}

//////////////////////////////////////////////////////////////////////////////////////////
//	MEikListBoxObserver
//
//////////////////////////////////////////////////////////////////////////////////////////

void CAnsPhoneView::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent /*aEventType*/)
	{
	}

//////////////////////////////////////////////////////////////////////////////////////////
//	CALL FUNCTIONS
//
//////////////////////////////////////////////////////////////////////////////////////////

void CAnsPhoneView::AnsweringStartL()
	{
	iEngine->AnsweringStartL();
	HBufC* text = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_RUNNING);
	iDisplayStatus->SetTextL(*text);
	CleanupStack::PopAndDestroy(text);
	iState = ERunning;
	}

void CAnsPhoneView::AnsweringStopL()
	{
	iEngine->AnsweringStop();
	HBufC* text = StringLoader::LoadLC(R_ANSPHONE_DISPLAY_STOPPED);
	iDisplayStatus->SetTextL(*text);
	CleanupStack::PopAndDestroy(text);
	iState = EStopped;
	}

void CAnsPhoneView::PlayMessageL()
	{
	if(iMessagesList)
		{
		// find out which message is to be played;
		TInt currentItem = iMessagesList->CurrentItemIndex();
		iEngine->PlayMessageL(ETrue, currentItem, EFalse);
		}
	else
		{
		iEngine->PlayMessageL(ETrue, 0, ETrue);
		}

	iPreviousState = iState;
	iState = ECanStop;
	}

void CAnsPhoneView::RecordMessageL()
	{
	iEngine->RecordMessageL(ETrue);
	iPreviousState = iState;
	iState = ECanStop;
	}

void CAnsPhoneView::Stop()
	{
	iEngine->Stop();
	iState = iPreviousState;
	}

void CAnsPhoneView::DialL()
	{
	// find out which message is to be played;
	TInt currentItem = iMessagesList->CurrentItemIndex();
	iEngine->DialNumberL(currentItem);
	}

void CAnsPhoneView::DeleteMessageL()
	{
	// find out which message is to be played;
	TInt currentItem = iMessagesList->CurrentItemIndex();
	iEngine->DeleteMessage(currentItem);

	CDesCArray* content = STATIC_CAST(CDesCArray*, iMessagesList->Model()->ItemTextArray());
	content->Delete(currentItem);
	iMessagesList->HandleItemRemovalL();
	}

/////////////////////////////////////////////////////////////////////////////////////////////////////
//	MESSAGES
//
/////////////////////////////////////////////////////////////////////////////////////////////////////

void CAnsPhoneView::ShowMessagesL()
	{
	// change the status pane title
	CAknTitlePane* titlePane = STATIC_CAST(CAknTitlePane*,
						STATIC_CAST(CAknAppUi*, iEikonEnv->EikAppUi())->StatusPane()->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));

	HBufC* text = StringLoader::LoadLC(R_ANSPHONE_TITLE_MESSAGES);
	titlePane->SetTextL(*text);
	CleanupStack::PopAndDestroy(text);

	if(iMessagesList)
		delete iMessagesList;

	iDisplayStatus->MakeVisible(EFalse);
	iDisplayMessages->MakeVisible(EFalse);

	// construct the list
	iMessagesList = new (ELeave) CAknDoubleGraphicStyleListBox();
	iMessagesList->SetContainerWindowL(*this);
	TResourceReader reader;
	iEikonEnv->CreateResourceReaderLC(reader, R_ANSPHONE_LISTBOX_MESSAGES);	// PUSH
	iMessagesList->ConstructFromResourceL(reader);
	CleanupStack::PopAndDestroy();														// reader
	iMessagesList->SetListBoxObserver(this);
	iMessagesList->CreateScrollBarFrameL();
	iMessagesList->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
	TRect rect = TRect(	TPoint(0, 0), TSize(Rect().Width(), Rect().Height()));
	iMessagesList->SetRect(rect);

	iMessagesList->ItemDrawer()->ColumnData()->SetAlignmentL(CGraphicsContext::ECenter);

	// Create an array of icons, reading them from the file
	CArrayPtr<CGulIcon>* icons = new(ELeave) CAknIconArray(KNumberIcons);
	CleanupStack::PushL(icons);
	icons->AppendL(iEikonEnv->CreateIconL(KMbmFile, EMbmAnsphoneMessicon, EMbmAnsphoneMessiconmask));
	iMessagesList->Model()->SetOwnershipType(ELbmOwnsItemArray);
	iMessagesList->ItemDrawer()->ColumnData()->SetIconArray(icons); // passing ownership of icons
	CleanupStack::Pop(icons);

	// populate the list
	CDesCArray* content = STATIC_CAST(CDesCArray*, iMessagesList->Model()->ItemTextArray());

	// the format of the text inserted in each line is "0\t<phone number><tab character><time>")
	const CArrayFixSeg<CAnsPhoneEngine::TMessage>& messages = iEngine->MessageList();
	TInt numberMessages = messages.Count();
	for(TInt b = 0; b < numberMessages; b++)
		{
		const CAnsPhoneEngine::TMessage& message = messages.At(b);
		TBuf<KMessageTextMaxLength> buf;
		buf.Append(KMessageTextStart);

		TBuf<KNumberMaxLength> numberBuf;
		TInt index = 0;
		iEngine->TrimIndex(message.iNumber, numberBuf, index);
		buf.Append(numberBuf);
		buf.Append(CEditableText::ETabCharacter);
		_LIT(KMessageTextTimeFormat, "%:0%H%:1%T %*E%*D%*X%*N%Y %1 %2 %3");
		TBuf<KMessageTextTimeMaxLength> time;
		message.iTime.FormatL(time, KMessageTextTimeFormat);
		buf.Append(time);

		content->AppendL(buf);
		}

    iMessagesList->HandleItemAdditionL();

    iMessagesList->ActivateL();
    iMessagesList->DrawDeferred();

	iMainState = iState;
	iState = EMessages;
	}

void CAnsPhoneView::BackL()
	{
	// change the status pane title
	CAknTitlePane* titlePane = STATIC_CAST(CAknTitlePane*,
						STATIC_CAST(CAknAppUi*, iEikonEnv->EikAppUi())->StatusPane()->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));

	HBufC* text = StringLoader::LoadLC(R_ANSPHONE_TITLE_APP);
	titlePane->SetTextL(*text);
	CleanupStack::PopAndDestroy(text);

	delete iMessagesList;
	iMessagesList = NULL;

	iDisplayStatus->MakeVisible(ETrue);
	iDisplayMessages->MakeVisible(ETrue);

	iNumberNewMessages = 0;
	iDisplayMessages->SetTextL(KDisplayTextNoNewMessages);

	iState = iMainState;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频亚洲一区| 色婷婷精品久久二区二区蜜臂av | 中文字幕日韩一区| 欧美大片在线观看一区二区| 日韩欧美在线网站| 国产suv精品一区二区三区 | 日韩精品电影在线| 精品av久久707| 久久成人av少妇免费| 日本va欧美va瓶| 免费人成在线不卡| 香蕉成人伊视频在线观看| 国产精品久久久久三级| 久久九九久精品国产免费直播| 91精品欧美久久久久久动漫| 日韩欧美精品三级| 日韩欧美一区二区久久婷婷| 精品欧美一区二区三区精品久久| av在线不卡观看免费观看| 国产成人aaa| 9l国产精品久久久久麻豆| 国产伦精一区二区三区| 在线亚洲免费视频| 欧美绝品在线观看成人午夜影视| 在线中文字幕一区| 日韩高清不卡一区二区三区| 欧美激情一区二区三区全黄| 色播五月激情综合网| 欧美日韩一区二区三区四区五区 | 色综合天天视频在线观看 | 日韩欧美电影在线| 久久久91精品国产一区二区三区| 国产亚洲一二三区| 国产精品免费网站在线观看| 一区二区欧美精品| 天堂一区二区在线| 国产在线国偷精品免费看| 国产91清纯白嫩初高中在线观看| 国产激情视频一区二区在线观看| 97国产一区二区| 欧美日韩精品欧美日韩精品一| 欧美三级日韩三级| 日韩一区二区麻豆国产| 国产亚洲欧美日韩日本| 综合久久一区二区三区| 91精品国产综合久久香蕉麻豆| 91精品国产综合久久精品麻豆| 日韩精品一区二区三区三区免费 | 精品国产精品一区二区夜夜嗨| 欧美精品一区二区三区蜜桃| 亚洲少妇最新在线视频| 亚洲成人av电影在线| 久久超碰97中文字幕| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产成人午夜99999| 色激情天天射综合网| 日韩欧美国产精品一区| 亚洲黄一区二区三区| 中文字幕不卡的av| 亚洲大片精品永久免费| 国产精品88av| 日本二三区不卡| 欧美中文字幕一区二区三区 | 亚洲va国产天堂va久久en| 国产在线播放一区| 欧美中文字幕一区二区三区亚洲| 欧美一区二区精美| 亚洲精品菠萝久久久久久久| 久久精品国产999大香线蕉| 欧美在线观看18| 久久视频一区二区| 亚洲一区二区三区自拍| youjizz久久| 欧美一区二区免费视频| 亚洲一级片在线观看| 国产91精品一区二区| 制服丝袜激情欧洲亚洲| 亚洲男女一区二区三区| 国产在线播放一区| 欧美一级精品在线| 亚洲精选免费视频| 国产精品综合在线视频| 欧美刺激脚交jootjob| 亚洲激情在线播放| 91在线观看视频| 久久免费国产精品| 日韩精品一级中文字幕精品视频免费观看| 福利视频网站一区二区三区| 制服丝袜日韩国产| 国产精品狼人久久影院观看方式| 美女视频网站久久| 美女性感视频久久| 欧美人妖巨大在线| 洋洋成人永久网站入口| 国产suv精品一区二区三区| 亚洲精品在线免费观看视频| 视频在线观看一区二区三区| 欧美日韩一区小说| 亚洲精品日产精品乱码不卡| 粉嫩av亚洲一区二区图片| 久久精品视频一区二区| 捆绑调教一区二区三区| 精品久久久网站| 欧美96一区二区免费视频| 这里只有精品视频在线观看| 亚洲电影你懂得| 色综合天天综合在线视频| 亚洲精品在线免费观看视频| 丝袜亚洲另类欧美| 日本电影欧美片| 樱花草国产18久久久久| 成人av动漫网站| 136国产福利精品导航| 粉嫩久久99精品久久久久久夜| 欧美刺激午夜性久久久久久久| 日韩激情一二三区| 欧美精品一二三| 日本sm残虐另类| 日韩一区二区免费在线观看| 精品一区免费av| www国产精品av| 国产精品1区二区.| 国产人妖乱国产精品人妖| 激情综合网最新| 国产精品久久久久久福利一牛影视| 国产精品1区二区.| 亚洲色图欧洲色图婷婷| 色成年激情久久综合| 日本成人中文字幕| 欧美一区二区成人| 丝袜美腿高跟呻吟高潮一区| 欧美老女人第四色| 蜜桃av噜噜一区二区三区小说| 91精品国产色综合久久久蜜香臀| 蜜臀久久99精品久久久画质超高清| 日韩精品在线看片z| 久久se精品一区精品二区| 国产精品久久久久久久第一福利 | 日韩一级片在线播放| 国产成人精品1024| 最新高清无码专区| 欧美丰满少妇xxxxx高潮对白| 日韩黄色小视频| 337p日本欧洲亚洲大胆色噜噜| 成人中文字幕电影| 亚洲精品免费播放| 欧美videofree性高清杂交| 国产精品主播直播| 中文字幕精品—区二区四季| 欧美日韩精品免费| 精品在线一区二区三区| 伊人婷婷欧美激情| 91精品婷婷国产综合久久 | 欧美一区国产二区| 国产精品夜夜嗨| 亚洲女人****多毛耸耸8| 欧美四级电影网| 日韩电影在线一区| 中文字幕中文字幕在线一区| 欧美日韩一卡二卡三卡| 黑人巨大精品欧美一区| 亚洲图片你懂的| 亚洲精品一区二区三区99| 91美女福利视频| 日韩国产欧美在线视频| 成人免费在线视频| 欧美一区二区三区不卡| 一本一道波多野结衣一区二区| 美女免费视频一区二区| 亚洲免费色视频| 久久久久国产精品人| 97久久超碰国产精品| 国产曰批免费观看久久久| 亚洲一区在线播放| 国产精品成人网| 日韩视频免费观看高清完整版| 91久久精品国产91性色tv| 国内欧美视频一区二区| 中文天堂在线一区| 日本高清免费不卡视频| 黄一区二区三区| 亚洲狠狠爱一区二区三区| 久久伊99综合婷婷久久伊| 欧美三级电影精品| 国产91丝袜在线播放0| 日韩高清在线一区| 一区二区三区四区在线播放| 久久精品男人的天堂| 精品久久久三级丝袜| 欧美日韩www| 欧美午夜视频网站| 99国产精品国产精品毛片| 国产一区二区三区黄视频 | 91精品中文字幕一区二区三区| 99久久er热在这里只有精品15| 国产成人免费视频精品含羞草妖精| 日韩中文字幕区一区有砖一区| 亚洲一区二区在线视频| 亚洲天堂网中文字| 精品免费一区二区三区|