📄 smsdisplayview.cpp
字号:
/* Copyright (c) 2007, Nokia. All rights reserved */
#include <gulicon.h>
#include <eikseced.h>
#include <eikccpu.h>
#include <coemain.h>
#include <aknnotewrappers.h>
#include <eikspane.h>
#include <akntitle.h>
#include <akncontext.h> //CAknContextPane
#include <MSVIDS.H>
#include "Assistant.rsg"
#include "SMSDisplayView.h"
#include "SMSDisplayContainer.h"
#include "AssistantAppUi.h"
#include "Assistant.hrh"
CSMSDisplayView* CSMSDisplayView::NewL()
{
CSMSDisplayView* self = NewLC();
CleanupStack::Pop(self);
return self;
}
CSMSDisplayView* CSMSDisplayView::NewLC()
{
CSMSDisplayView* self = new (ELeave) CSMSDisplayView();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
void CSMSDisplayView::ConstructL()
{
m_pMtmEngine = CMtmEngine::NewL(*this);
BaseConstructL(R_ASSISTANT_MESSAGE_DISPLAY);
}
CSMSDisplayView::CSMSDisplayView()
{
m_pAppContainer = NULL;
m_MessageAmount = 0;
}
CSMSDisplayView::~CSMSDisplayView()
{
MEMORY_FREE(m_pMtmEngine);
}
TUid CSMSDisplayView::Id() const
{
return TUid::Uid(8);
}
void CSMSDisplayView::HandleCommandL(TInt aCommand)
{
TInt nIndex = m_pAppContainer->GetIndex();
HBufC* mobile = HBufC::NewLC(15);
HBufC* content = HBufC::NewLC(100);
TBuf<64> sTmpTitle;
TBuf<32> sTmpTitles;
switch (aCommand)
{
case EAssistantOpen:
{
m_pMtmEngine->GetMessageAddressL((*m_pIdArray)[nIndex],mobile->Des());
m_pMtmEngine->GetMessageL((*m_pIdArray)[nIndex],content->Des());
m_pMessageDataTransmit->SetMobile(mobile->Des());
m_pMessageDataTransmit->SetContent(content->Des());
m_pMessageDataTransmit->SetStatus(m_Status); //把获取到的当前箱子的状态传给MessageView
m_pMessageDataTransmit->SetMessageId((*m_pIdArray)[nIndex]); //把当前选中的短信的ID传给MessageView
AppUi()->ActivateLocalViewL(TUid::Uid(9));
}
break;
case EAssistantWrite:
{
m_Status = EAssistantStatusNew;
m_pMessageDataTransmit->SetStatus(m_Status);
AppUi()->ActivateLocalViewL(TUid::Uid(9));
}
break;
case EAssistantDelete:
{
CAknNoteDialog* note = new (ELeave) CAknNoteDialog;
note->PrepareLC(R_DELETE_MESSAGE_NOTE);
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_ASSISTANT_DELETEMESSAGE);
note->SetTextL(sTmpTitle);
if(note->RunLD())
{
m_pMtmEngine->DeleteMessageL(nIndex); //通过引擎删除
m_pAppContainer->DelInforFromList(nIndex); //在listbox中删除
m_MessageAmount = m_pIdArray->Count(); //从新读取数组里短信的条数
}
}
break;
case EAssistantExit:
{
AppUi()->HandleCommandL(aCommand);
}
break;
case EAssistantReply:
{
m_Status = EAssistantStatusNew;
//获取当前信息的手机号码
m_pMtmEngine->GetMessageAddressL((*m_pIdArray)[nIndex],mobile->Des());
m_pMessageDataTransmit->SetMobile(mobile->Des());
AppUi()->ActivateLocalViewL(TUid::Uid(9));
}
break;
case EAssistantSend:
{
CEikonEnv::Static()->ReadResource(sTmpTitle,R_QTN_ASSISTANT_SENDNOW);
CEikonEnv::Static()->ReadResource(sTmpTitles,R_QTN_ASSISTANT_PAUSE);
m_pAppContainer->DelAllInforFromList();
for (TInt i=0; i<m_pIdArray->Count(); i++)
{
mobile->Des().Zero();
content->Des().Zero();
m_pMtmEngine->GetMessageAddressL((*m_pIdArray)[i],mobile->Des());
if (i==nIndex)
{
content->Des().Copy(sTmpTitle);
}
else
{
content->Des().Copy(sTmpTitles);
}
m_pAppContainer->AddInfoToList(mobile->Des(),content->Des());
}
mobile->Des().Zero();
content->Des().Zero();
m_pMtmEngine->GetMessageAddressL((*m_pIdArray)[nIndex],mobile->Des());
m_pMtmEngine->GetMessageL((*m_pIdArray)[nIndex],content->Des());
m_pMtmEngine->CreateSMSMessageL(mobile->Des(),content->Des());//获取手机号、内容 并发送信息
if(m_pMtmEngine->ValidateCreatedSMS())
{
m_pMtmEngine->SendSMSL();
}
AppUi()->ActivateLocalViewL(TUid::Uid(7));
m_pAppContainer->DelInforFromList(nIndex); //在listbox中删除
}
break;
case EAssistantMove:
{
m_pMtmEngine->MoveToFolderL((*m_pIdArray)[nIndex],KMsvDraftEntryId);
m_pAppContainer->DelInforFromList(nIndex);
m_pIdArray->Remove(nIndex);
}
break;
case EAssistantDeleteAll:
{
//删除框
CAknNoteDialog* note = new (ELeave) CAknNoteDialog;
note->PrepareLC(R_DELETE_MESSAGE_NOTE);
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_ASSISTANT_DELETEALLMESSAGE);
note->SetTextL(sTmpTitle);
if(note->RunLD()) // RUNLD() 这个函数 判断选择的是 “是” 还是 “否”
{
for(int i=0; i<nIndex; i++)
{
m_pMtmEngine->DeleteMessageL(i);
}
m_pAppContainer->DelAllInforFromList();
m_MessageAmount = m_pIdArray->Count();
}
}
break;
case EAssistantBack:
AppUi()->ActivateLocalViewL(TUid::Uid(7));
break;
}
CleanupStack::PopAndDestroy(2);
}
void CSMSDisplayView::HandleClientRectChange()
{
if(m_pAppContainer)
{
m_pAppContainer->SetRect(ClientRect());
}
}
void CSMSDisplayView::DoActivateL(const TVwsViewId&, TUid, const TDesC8&)
{
m_pAppContainer = new( ELeave ) CSMSDisplayContainer();
m_pAppContainer->SetMopParent(this);
TRect rc;
rc.SetRect(ClientRect().iTl, TSize(176,144));
m_pAppContainer->ConstructL( rc,this );
AppUi()->AddToStackL( *this, m_pAppContainer );
CEikStatusPane* sp=iEikonEnv->AppUiFactory()->StatusPane();
//Set View icon
CAssistantAppUi* pApp = (CAssistantAppUi*)CEikonEnv::Static()->AppUi();
CFbsBitmap* pIcon = pApp->LoadGraphicsL1(1);
CAknContextPane* contextPane = (CAknContextPane*) sp->ControlL(TUid::Uid(EEikStatusPaneUidContext));
contextPane->SetPicture(pIcon);
//Set View Title
TBuf<32> sTmpTitle;
TMsvId boxId;
if(m_Status == EAssistantStatusSendBox)
{
boxId = KMsvSentEntryId;
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_ASSISTANT_SENDBOX);
}
else if(m_Status == EAssistantStatusInBox)
{
boxId = KMsvGlobalInBoxIndexEntryId;
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_ASSISTANT_INBOX );
}
else if(m_Status == EAssistantStatusOutBox)
{
boxId = KMsvGlobalOutBoxIndexEntryId;
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_ASSISTANT_OUTBOX);
}
else if(m_Status == EAssistantStatusDraft)
{
boxId = KMsvDraftEntryId;
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_ASSISTANT_DRAFT);
}
CAknTitlePane* tp=(CAknTitlePane*)sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
tp->SetTextL(sTmpTitle);
CDesCArrayFlat* mobile = new(ELeave) CDesCArrayFlat(10);
CleanupStack::PushL(mobile);
CDesCArrayFlat* content = new(ELeave) CDesCArrayFlat(10);
CleanupStack::PushL(content);
CEikonEnv::Static()->ReadResource(sTmpTitle,R_QTN_ASSISTANT_PAUSE);
m_pMtmEngine->GetFolderSMSMessageInformation(boxId,mobile,content);
if (m_Status == EAssistantStatusOutBox)
{
content->Reset(); //把传递过来的短信内容删除
for (TInt j = 0; j<mobile->Count();j++)
{
content->AppendL(sTmpTitle); //重新添加内容为“发送暂缓”
}
}
CEikonEnv::Static()->ReadResource(sTmpTitle,R_QTN_ASSISTANT_PAUSE);
for(TInt i = 0; i<mobile->Count();i++)
{
if( (*mobile)[i].Length() != 0 || (*content)[i].Length() != 0 ) //判断获得的短信内容或手机号有一个不为空就显示
{
m_pAppContainer->AddInfoToList((*mobile)[i],(*content)[i]);
}
}
m_MessageAmount = mobile->Count(); //获取短信的条数
m_pIdArray = m_pMtmEngine->GetMessageIds();
CleanupStack::PopAndDestroy(2);
}
void CSMSDisplayView::DoDeactivate()
{
if(m_pAppContainer)
{
AppUi()->RemoveFromStack( m_pAppContainer );
delete m_pAppContainer;
}
}
void CSMSDisplayView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
{
if(aResourceId != R_ASSISTANT_MESSAGE_DISPLAY_MENU)
return ;
if(m_Status == EAssistantStatusDraft)
{
HideMenuIfNULL(aMenuPane);
aMenuPane->SetItemDimmed(EAssistantReply,ETrue);
aMenuPane->SetItemDimmed(EAssistantDeleteAll,ETrue);
aMenuPane->SetItemDimmed(EAssistantSend,ETrue);
aMenuPane->SetItemDimmed(EAssistantMove,ETrue);
}
else if(m_Status == EAssistantStatusOutBox)
{
HideMenuIfNULL(aMenuPane);
aMenuPane->SetItemDimmed(EAssistantOpen,ETrue);
aMenuPane->SetItemDimmed(EAssistantReply,ETrue);
aMenuPane->SetItemDimmed(EAssistantDeleteAll,ETrue);
}
else if(m_Status == EAssistantStatusInBox)
{
HideMenuIfNULL(aMenuPane);
aMenuPane->SetItemDimmed(EAssistantSend,ETrue);
}
else if(m_Status == EAssistantStatusSendBox)
{
HideMenuIfNULL(aMenuPane);
aMenuPane->SetItemDimmed(EAssistantReply,ETrue);
aMenuPane->SetItemDimmed(EAssistantSend,ETrue);
aMenuPane->SetItemDimmed(EAssistantDeleteAll,ETrue);
}
}
void CSMSDisplayView::SetMtmEnginePtr(CMtmEngine* aPtr)
{
m_pMtmEngine = aPtr;
}
void CSMSDisplayView::SetMessageDataTransmit(MMessageDataTransmit* aPtr)
{
m_pMessageDataTransmit = aPtr;
}
void CSMSDisplayView::SetStatus(TInt aStatus)
{
m_Status = aStatus;
}
void CSMSDisplayView::HideMenuIfNULL(CEikMenuPane* aMenuPane)
{
if( m_MessageAmount == 0 )
{
aMenuPane->SetItemDimmed(EAssistantOpen,ETrue);
aMenuPane->SetItemDimmed(EAssistantReply,ETrue);
aMenuPane->SetItemDimmed(EAssistantDelete,ETrue);
aMenuPane->SetItemDimmed(EAssistantDeleteAll,ETrue);
aMenuPane->SetItemDimmed(EAssistantSend,ETrue);
aMenuPane->SetItemDimmed(EAssistantMove,ETrue);
}
}
void CSMSDisplayView::HandleMessageSentL(TInt aError)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -