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

📄 m3uiqsendview.cpp

📁 symbian uiq 例子代码,功能包括文件断点续传、编辑通讯录、后台短信回复等
💻 CPP
字号:
/*
 * Copyright (c) 2007,苏州丰达
 * All rights reserved.
 * 版权所有(C)2007-2008 苏州丰达 
 * 公司地址:中国,江苏省苏州市 
 * 网址:http://www.
 *
 * 文件名称:CM3UIQ2AppUi.cpp
 * 摘 要:
 *
 * 产品版本:彩视 1.0
 *
 * 作 者:司治国
 * 创建日期:2008.1.22
 * 负责人:xxxxx
 *
 * 修改者:司治国
 * 修改日期:2008.1.17
 *
 * 编译器或环境等描述:uiqsdk2.1
 * 适用于VC2003+symbian 7.x的环境开发。
 *
 **/
#include <m3upload.mbg>
#include <cntdef.h>
#include <cntdb.h>

#include "M3UIQ2.hrh"
#include "M3UIQSendView.h"
#include "M3UIQ2Appui.h"
#include "RLog.h"

/**
 *	二步构造
 *  @param aTect 显示区域
 *  @param aPath 文件路径
 *  @Return 发送视图的指针
 **/
CM3UIQSendView * CM3UIQSendView::NewL(const TRect &aRect, TDesC* aPath)
{
	CM3UIQSendView *self = CM3UIQSendView::NewLC(aRect, aPath);
	CleanupStack::Pop(self);
	return (self);
}

/**
 *	二步构造
 *  @param aTect 显示区域
 *  @param aPath 文件路径
 *  @Return 发送视图的指针
 **/
CM3UIQSendView * CM3UIQSendView::NewLC(const TRect &aRect, TDesC* aPath)
{
	CM3UIQSendView *self = new (ELeave) CM3UIQSendView();
	CleanupStack::PushL(self);
	self->ConstructL(aRect, aPath);
	return (self);
}

/**
 *	默认构造
 **/
CM3UIQSendView::CM3UIQSendView()
{
}

/**
 *	构造
 *  @param aTect 显示区域
 *  @param aPath 文件路径
 **/
void CM3UIQSendView::ConstructL(const TRect &aRect, TDesC* aPath)
{
	CreateWindowL();
	iFilePath = NULL;
	if (aPath)
	{
		iFilePath = aPath->AllocL();
	}
	//组件数组
	iControls = new CArrayPtrFlat<CCoeControl>(1);  // Initialize array
	//接受者地址栏
	iReceiver = new(ELeave) CEikEdwin();    
	CleanupStack::PushL(iReceiver);
	iReceiver->ConstructL(0, 20, 0, 20);
	iReceiver->SetContainerWindowL(*this);
	iReceiver->SetObserver(this);
	iReceiver->CreateScrollBarFrameL(); //创建滚动条
	// 设置垂直滚动条自动可见
	iReceiver->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
	TCoeInputCapabilities input(TCoeInputCapabilities::EDialableCharacters);
	iReceiver->SetInputCapabilitiesL(input);
	TInt width = aRect.Size().iWidth;
	TInt height = aRect.Size().iHeight;
	iReceiver->SetExtent(TPoint(width/4 + 2, 2), TSize(width/4*3 -4, 40));
	CleanupStack::Pop();//editor
	iControls->AppendL(iReceiver);

	iLabelImage = new(ELeave) CEikImage();
	CleanupStack::PushL(iLabelImage);
	//iLabelButton->SetTextL(_L("Contact"));
	iLabelImage->SetContainerWindowL(*this);
	iLabelImage->SetObserver(this);
	TInt labelWidth = aRect.Size().iWidth;
	TInt labelHeight = aRect.Size().iHeight;
	iLabelImage->SetExtent(TPoint(width/4 - 30, 10), TSize(20, 20));
	//iLabelButton->setb
 	_LIT(KMultiBitmapFilename, "\\system\\apps\\m3uiq2\\m3upload.mbm");
 	CFbsBitmap *iCpBitmap = iEikonEnv->CreateBitmapL(KMultiBitmapFilename, EMbmM3uploadConnect);
 	iLabelImage->SetBitmap(iCpBitmap);
	CleanupStack::Pop();//button
	iControls->AppendL(iLabelImage);

	//发送内容
	iContent = new(ELeave) CEikEdwin();    
	CleanupStack::PushL(iContent);
	iContent->ConstructL(0, 20, 0, 20);
	iContent->SetContainerWindowL(*this);
	iContent->SetObserver(this);
	iContent->CreateScrollBarFrameL(); //创建滚动条
	// 设置垂直滚动条自动可见
	iContent->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
	width = aRect.Size().iWidth;
	height = aRect.Size().iHeight;
	iContent->SetExtent(TPoint(width/4 + 2, 45), TSize(width/4*3 -4, 120));
	CleanupStack::Pop();//editor
	iControls->AppendL(iContent);	
	iFocusedControl = iReceiver;
	//设置显示区域
	SetRect(aRect);
	MakeVisible(EFalse);
	SetComponentsToInheritVisibility();
	ActivateL();
}

/**
 *	析构函数
 **/
CM3UIQSendView::~CM3UIQSendView()
{
	iControls->ResetAndDestroy();   // Destroy controls in array
	delete iControls;
	iFocusedControl = NULL;
	iReceiver = NULL;
	iContent = NULL;
	iLabelImage = NULL;
	if (iFilePath)
	{
		delete iFilePath;
		iFilePath = NULL;
	}	
	delete iFocusedControl;	
	if (iArray)
	{
		iArray->ResetAndDestroy();
		delete iArray;
		iArray = NULL;
	}
}

/**
 *	返回视图的id
 *  @Return TVwsViewId
 **/
TVwsViewId CM3UIQSendView::ViewId() const
{
	return TVwsViewId(KUidM3UIQ2, ViewUid());
}

/**
 *	返回视图Uid
 *  @Return 视图Uid
 **/
TUid CM3UIQSendView::ViewUid() const
{
	return TUid::Uid(EMySendAsViewId);
}

/**
 *	激活视图
 *  @param const aPrevViewId 前一个视图的UID
 *  @param aCustomMessageId 消息类型
 *  @param aCustomMessage 消息内容
 **/
void CM3UIQSendView::ViewActivatedL( const TVwsViewId &aPrevViewId, TUid aCustomMessageId, const TDesC8 &aCustomMessage )
{
	//ActivateL();
	MEikAppUiFactory *factory = iEikonEnv->AppUiFactory();
	factory->MenuBar()->ChangeMenuBarL(0, R_M3UIQ2_MENUBAR3, ETrue);	
	CM3UIQ2AppUi *iAppUi = STATIC_CAST(CM3UIQ2AppUi *, iEikonEnv->EikAppUi());
	iAppUi->SetToolbarL(R_BAPP_MTORAGE_TOOLBAR);
	MakeVisible(ETrue);
	if (iReceiver->Text())
	{
		iReceiver->SetTextL(NULL);
	}
	if (iContent->Text())
	{
		iContent->SetTextL(NULL);
	}
}

/**
 *	隐藏视图
 **/
void CM3UIQSendView::ViewDeactivated()
{
	MakeVisible(EFalse);
}

/**
 *	绘制
 *  @param aRect 显示区域
 **/
void CM3UIQSendView::Draw( const TRect&  aRect ) const
{
	// Window graphics context
	CWindowGc &gc = SystemGc();
	// Start with a clear screen
	gc.Clear();
	TRect drawRect = Rect();
	// Use the title font supplied by the UI
	const CFont *fontUsed = iEikonEnv->TitleFont();
	gc.UseFont(fontUsed);
	//绘制接受者
	TInt baselineOffset = 20; 
	TBuf<32> item;
	//CEikonEnv::Static()->ReadResource(item, R_STR_RECEIVE);
	//gc.DrawText(item, drawRect, baselineOffset, CGraphicsContext::ELeft, 0);
	//绘制内容
	baselineOffset = 60;
	CEikonEnv::Static()->ReadResource(item, R_STR_CONTENT);
	gc.DrawText(item, drawRect, baselineOffset, CGraphicsContext::ELeft, 0);
	// 释放字体
	gc.DiscardFont();
}

/**
 *	设置文件
 *  @param aFilePath 文件路径
 **/
void CM3UIQSendView::SetFile(TDesC* aFilePath)
{
	if (iFilePath)
	{
		delete iFilePath;
		iFilePath = NULL;
	}	
	if(aFilePath)
	{
		iFilePath = aFilePath->AllocL();
	}
}

/**
 *	处理编辑框事件
 **/
void CM3UIQSendView::HandleEdwinEventL(CEikEdwin* aEdwin,TEdwinEvent aEventType)
{
	TInt m = 10;
}

/**
 *	返回组件个数
 *  @Return 组件个数
 **/
TInt CM3UIQSendView::CountComponentControls() const
{
	return iControls->Count();
}

/**
 *	返回组件
 *  @param aIndex 组件索引
 **/
CCoeControl * CM3UIQSendView::ComponentControl( TInt aIndex ) const
{
	if (aIndex < iControls->Count())
	{
		return iControls->At(aIndex);
	}
	else
	{
		return NULL;
	}
}

/**
 *	处理组件事件
 *  @param aControl 当前组件
 *  @param aEventType 事件类型
 **/
void CM3UIQSendView::HandleControlEventL( CCoeControl *aControl, TCoeEvent aEventType )
{

	switch (aEventType)
	{
	case EEventRequestFocus:
		//调用系统通讯录
		if (aControl == iLabelImage)
		{
			ConnectDlg();
			break;
		}
		//control is about to gain focus
		if (iFocusedControl != aControl)
		{
			// swap of focus to new control
			if (iFocusedControl)
			{
				iFocusedControl->SetFocus(EFalse, EDrawNow);
			}
			iFocusedControl = aControl;
			iFocusedControl->SetFocus(ETrue, EDrawNow);
		}	
		break;
	case EEventPrepareFocusTransition:
		if (iFocusedControl)
		{
			iFocusedControl->PrepareForFocusLossL();
		}
		break;
	case EEventStateChanged:
		ReportEventL(MCoeControlObserver::EEventStateChanged);
		//content
		break;
	default:
		break;
	}
}

/**
 *	焦点改变
 *  @param aDrawNow 当前编辑组件
 **/
void CM3UIQSendView::FocusChanged( TDrawNow aDrawNow )
{
	if (iFocusedControl)
	{
		if (iFocusedControl == iLabelImage)
		{
			iFocusedControl->SetFocus(EFalse, aDrawNow);
			return;
		}
		iFocusedControl->SetFocus(IsFocused(), aDrawNow);
	}
}

/**
 *	焦点丢失
 **/
void CM3UIQSendView::PrepareForFocusLossL()
{
	if (iFocusedControl)
	{
		iFocusedControl->PrepareForFocusLossL();
	}
}

/**
 *	按键事件
 *  @param aKeyEvent 按键类型
 *  @param aType 事件类型
 **/
TKeyResponse CM3UIQSendView::OfferKeyEventL( const TKeyEvent &aKeyEvent, TEventCode aType )
{
	if (iFocusedControl)
	{
		return iFocusedControl->OfferKeyEventL(aKeyEvent, aType);
	}
	return EKeyWasNotConsumed;
}

/*
 *	设置发送类型
 */
void CM3UIQSendView::SetType( TInt aType )
{
	iType = aType;
}

/*
*	得到发送类型
*/
TInt CM3UIQSendView::SendType()
{
	return iType;
}

/**
 *	得到接受者
 **/
TDesC* CM3UIQSendView::Receiver()
{
	HBufC* people = HBufC::NewL(256);
	TPtr temp = people->Des();
	iReceiver->GetText(temp);
	if (temp.Length() == 0)
	{
		delete people;
		people = NULL;
		return NULL;
	}
	return people;
}

/**
 *	得到内容
 **/
TDesC* CM3UIQSendView::Content()
{
	HBufC* msg = HBufC::NewL(512);
	TPtr temp = msg->Des();
	iContent->GetText(temp);
	if (temp.Length() == 0)
	{
		delete msg;
		msg = NULL;
		return NULL;
	}
	return msg;
}

/**
 *	得到文件
 *  @param aFilePath 文件路径
 **/
TDesC* CM3UIQSendView::GetFile()
{
	return iFilePath;
}

/*
 *	调用联系人对话框
 */
void CM3UIQSendView::ConnectDlg()
{
	CContactDatabase::TContactViewFilter filter = CContactDatabase::ESmsable;
	iArray = new(ELeave) CArrayPtrFlat<CContacuiReturnData>(2);
	if (CContactUiListDialog::RunDlgLD(*iArray, filter))
	{
		TBuf<256> connect;
		TDesC* aRec = Receiver();
		if (aRec)
		{
			connect.Append(*aRec);
			connect.Append(';');
			delete aRec;
			aRec = NULL;
		}
		TInt count = iArray->Count();
		CContactDatabase* iContactDB = CContactDatabase::OpenL();
		for (TInt i = 0; i < count; i++)
		{
 			CContacuiReturnData* data = iArray->At(i);
 			TContactItemId id = data->Id();			
 			CContactItem* contactItem = iContactDB->ReadContactL(id);
 			TInt MyIndex = contactItem->CardFields().FindNext(KUidContactFieldPhoneNumber,MyIndex+1);
 			TInt cmsNum = contactItem->CardFields().FindNext(KUidContactFieldSms,cmsNum+1);
 			if (MyIndex != KErrNotFound)
 			{
 				// Read values here
 				TBuf<50>  tempPhone = contactItem->CardFields()[MyIndex].TextStorage()->Text();
 				if (i != 0)
 				{
					connect.Append(';');
 				}
				connect.Append(tempPhone);
 			}
 			else if (cmsNum != KErrNotFound)
 			{
 				TBuf<50>  tempPhone = contactItem->CardFields()[MyIndex].TextStorage()->Text();
				if (i != 0)
				{
					connect.Append(';');
				}
				connect.Append(tempPhone);
 			}
 			else
 			{
 				iEikonEnv->InfoWinL(_L("Waring"), _L("Please select phone number!"));
				delete contactItem;
				contactItem = NULL;
 				break;
 			}
			delete contactItem;
			contactItem = NULL;
		}
		delete iContactDB;
		iContactDB = NULL;
		TDesC* txt = connect.AllocL();
		iReceiver->SetTextL(txt);
		delete txt;
		txt = NULL;
	}
}

//end file


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -