📄 m3uiqsendview.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 + -