📄 smslistview.cpp
字号:
/*
* ============================================================================
* Name : CSMSListView from CAknView
* Part of : SMSDraft
* Copyright (c) 2003 Nokia. All rights reserved.
* ============================================================================
*/
// INCLUDE FILES
#include <aknviewappui.h>
#include <avkon.hrh>
#include <akntitle.h>
#include <aknmessagequerydialog.h>
#include <akncontext.h>
#include <msvids.h>
#include <stringloader.h>
#include <eikmenup.h>
#include <FairyLand.rsg>
#include <FairyLand.mbg>
#include "FairyLand.hrh"
#include "FairyLandAppUi.h"
#include "SMSListView.h"
#include "SMSListContainer.h"
// ================= MEMBER FUNCTIONS =======================
//CSMSListView* CSMSListView::NewL(MSMSNewObserver* apSMSNewOberver)
CSMSListView* CSMSListView::NewL(MSMSObserver* aObserver)
{
//CSMSListView* self = NewLC(apSMSNewOberver);
CSMSListView* self = NewLC(aObserver);
CleanupStack::Pop(self);
return self;
}
//CSMSListView* CSMSListView::NewLC(MSMSNewObserver* apSMSNewOberver)
CSMSListView* CSMSListView::NewLC(MSMSObserver* aObserver)
{
//CSMSListView* self = new (ELeave) CSMSListView(apSMSNewOberver);
CSMSListView* self = new (ELeave) CSMSListView(aObserver);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
// C++ default constructor can NOT contain any code, that
// might leave.
//
//CSMSListView::CSMSListView(MSMSNewObserver* apSMSNewOberver)
CSMSListView::CSMSListView(MSMSObserver* aObserver)
{
m_Observer=aObserver;
m_pMtmsEngine = NULL;
m_nBoxNum = 0;
m_nListMenuFlag=1;
/*m_pSMSNewOberver = apSMSNewOberver*/;
}
// EPOC default constructor can leave.
void CSMSListView::ConstructL()
{
m_pMtmsEngine = CMtmsEngine::NewL(*this);
m_Observer->SendEngine(m_pMtmsEngine);
BaseConstructL(R_SMSLIST_VIEW);
}
// Destructor
CSMSListView::~CSMSListView()
{
if (NULL != m_pMtmsEngine)
{
delete m_pMtmsEngine;
m_pMtmsEngine = NULL;
}
}
// ---------------------------------------------------------
// TUid CSMSListView::Id()
// Returns Id of the view.
// ---------------------------------------------------------
TUid CSMSListView::Id() const
{
return KViewId13;
}
// ---------------------------------------------------------
// CSMSListView::HandleCommandL(TInt aCommand)
// Handles commands
// ---------------------------------------------------------
void CSMSListView::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case EFairyLandCmdOpen:
{
if (m_nListMenuFlag==0)
{
m_Observer->SendSelectedIndex(iContainer->GetCurrentIndex());
AppUi()->ActivateLocalViewL(TUid::Uid(14),TUid::Uid(13),_L8("inbox"));//收件箱打开为只读
}
else
{
m_Observer->SendSelectedIndex(iContainer->GetCurrentIndex());
AppUi()->ActivateLocalViewL(TUid::Uid(14));
}
}
break;
case EFairyLandCmdWrite:
{
m_Observer->SendSelectedIndex(-1);//-1表示新建信息
AppUi()->ActivateLocalViewL(TUid::Uid(14));
}
break;
case EFairyLandReply:
{
m_Observer->SendSelectedIndex(iContainer->GetCurrentIndex());
AppUi()->ActivateLocalViewL(TUid::Uid(14),TUid::Uid(13),_L8("reply")); //。表示回复
}
break;
case EFairyLandDel:
{
TBuf<32> sTmpTitle;//define a descriptor for read resource of title
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_IM_DELETE_QUERY);
if (iContainer->MessageBoxByYesNO(sTmpTitle))
{
m_pMtmsEngine->DeleteMessageL(iContainer->GetCurrentIndex());
iContainer->SetEmptyListBox();
ShowDraftBoxL();
}
}
break;
case EFairyLandDetail:
{
ShowDetailDialog();
}
break;
case EFairyLandMoveToInBox:
{
m_pMtmsEngine->MoveToFolderL(iContainer->GetCurrentIndex(),KMsvGlobalInBoxIndexEntryId);
iContainer->SetEmptyListBox();
ShowDraftBoxL();
}
break;
case EFairyLandMoveToDraftBox:
{
m_pMtmsEngine->MoveToFolderL(iContainer->GetCurrentIndex(),KMsvDraftEntryId);
iContainer->SetEmptyListBox();
ShowDraftBoxL();
}
break;
case EFairyLandMoveToSentBox:
{
m_pMtmsEngine->MoveToFolderL(iContainer->GetCurrentIndex(),KMsvGlobalOutBoxIndexEntryId);
iContainer->SetEmptyListBox();
ShowDraftBoxL();
}
break;
case EFairyLandCmdHelp:
{
//switch to "HelpView", at one time, transfer this view's TUID for return back thie view
// //AppUi()->ActivateLocalViewL(TUid::Uid(7), this->Id(), _L8("help"));
}
break;
case EFairyLandBack:
{
AppUi()->ActivateLocalViewL(TUid::Uid(12));
}
break;
default:
{
AppUi()->HandleCommandL(aCommand);
break;
}
}
}
// ---------------------------------------------------------
// CSMSListView::HandleClientRectChange()
// Handles client rect change.
// ---------------------------------------------------------
void CSMSListView::HandleClientRectChange()
{
if (iContainer)
{
iContainer->SetRect(ClientRect());
}
}
// ---------------------------------------------------------
// CSMSListView::DoActivateL(...)
// Creates the Container class object.
// ---------------------------------------------------------
void CSMSListView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,
TUid aCustomMessageId,
const TDesC8& aCustomMessage)
{
// TBufC8* buf=&aCustomMessage;
iContainer = new (ELeave) CSMSListContainer;
iContainer->SetMopParent(this);
TRect rc;
rc.SetRect(ClientRect().iTl, TSize(176, 144));
iContainer->ConstructL(rc);
AppUi()->AddToStackL(*this, iContainer);
//set the icon and title of the status pane
//set path of *.mbm
TBuf<KMaxPath> pathMbm;
#ifdef __WINS__
pathMbm.Copy(_L("z:\\system\\apps\\fairyland\\fairyland.mbm"));
#else
CFairyLandAppUi* pApp = (CFairyLandAppUi*)CEikonEnv::Static()->AppUi();
pApp->GetAppPath(pathMbm);
pathMbm.Append(_L("fairyland.mbm"));
#endif
//get the pointer of status pane
CEikStatusPane* statusPane = StatusPane();
//set icon
//load icon from *.mbm
// CAknContextPane* contextPane = (CAknContextPane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidContext));
// CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL(pathMbm, EMbmMyhelloIcon_4);
// CFbsBitmap* bitmapMask = iEikonEnv->CreateBitmapL(pathMbm, EMbmMyhelloMask_4);
//contextPane->SetPicture(bitmap);
// contextPane->SetPicture(bitmap, bitmapMask);
//set title
//load chinese words
TBuf<32> sTmpTitle; //define a descriptor for read resource of title
TBuf8<2> Temp;
Temp.Copy(_L("1"));//收件箱
if (aCustomMessage.Compare(Temp)==0)
{
m_nBoxNum=1;
m_nListMenuFlag=0;
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_IN_BOX);
}
else
{
Temp.Copy(_L("2"));//草稿箱
if (aCustomMessage.Compare(Temp)==0)
{
m_nBoxNum=2;
m_nListMenuFlag=1;
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_DRAFT_BOX);
}
else
{
Temp.Copy(_L("3"));//发件箱
if (aCustomMessage.Compare(Temp)==0)
{
m_nBoxNum=3;
m_nListMenuFlag=3;
CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_SENT_BOX);
}
}
}
// CEikonEnv::Static()->ReadResource(sTmpTitle, R_QTN_DRAFT_BOX);
//get the pointer of titlepane
CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
//set chinese title
titlePane->SetTextL(sTmpTitle);
ShowDraftBoxL();
}
// ---------------------------------------------------------
// CSMSListView::DoDeactivate()
// Deletes the Container class object.
// ---------------------------------------------------------
void CSMSListView::DoDeactivate()
{
if (NULL != iContainer)
{
AppUi()->RemoveFromStack(iContainer);
delete iContainer;
iContainer = NULL;
}
}
void CSMSListView::HandleMessageSentL(TInt aError)
{
}
void CSMSListView::ShowDraftBoxL()
{
CDesCArrayFlat* arrayRead = new (ELeave) CDesCArrayFlat(10);
CDesCArrayFlat* arrayAddr = new (ELeave) CDesCArrayFlat(10);
CDesCArrayFlat* arrayMsgBody = new (ELeave) CDesCArrayFlat(10);
if (m_nBoxNum==1)
{
m_pMtmsEngine->GetFolderSMSMessageInformation(KMsvGlobalInBoxIndexEntryId,arrayRead,arrayAddr,arrayMsgBody);
}
else if (m_nBoxNum==2)
{
m_pMtmsEngine->GetFolderSMSMessageInformation(KMsvDraftEntryId,arrayRead,arrayAddr,arrayMsgBody);
}
else if (m_nBoxNum==3)
{
m_pMtmsEngine->GetFolderSMSMessageInformation(KMsvSentEntryId,arrayRead,arrayAddr,arrayMsgBody);
}
TInt nLen = 0;
TInt nNumber = 0;
TBuf<2> szNumber;
nLen = arrayRead->Count();
if (nLen > 0)
{
TInt i = 0;
for (i = 0; i < nLen; i++)
{
szNumber.Copy(arrayRead->MdcaPoint(i));
szNumber.Num(nNumber);
iContainer->AddSingleItemL(nNumber,arrayAddr->MdcaPoint(i),arrayMsgBody->MdcaPoint(i));//Indexes into a descriptor array.i is The position of the descriptor element within the array
}
}
else
{
m_nListMenuFlag=2;
}
arrayMsgBody->Reset();
delete arrayMsgBody;
arrayAddr->Reset();
delete arrayAddr;
arrayRead->Reset();
delete arrayRead;
}
void CSMSListView::ShowDetailDialog()
{
_LIT(KRetuen,"\n");
TInt nIndex = 0;
nIndex = iContainer->GetCurrentIndex();
TBuf<1024> szDetail;
CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog();
dlg->PrepareLC(R_MESSAGE_QUERY);
HBufC* pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_HEADING);
dlg->QueryHeading()->SetTextL(pTemp->Des());
CleanupStack::PopAndDestroy(pTemp);
pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_SENDER);
szDetail.Append(pTemp->Des());
CleanupStack::PopAndDestroy(pTemp);
TBuf<16> szSender;
m_pMtmsEngine->GetAddress(nIndex, szSender);
szDetail.Append(szSender);
szDetail.Append(KRetuen);
pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_THEME);
szDetail.Append(pTemp->Des());
CleanupStack::PopAndDestroy(pTemp);
TBuf<72> szContent;
m_pMtmsEngine->GetContent(nIndex, szContent);
szDetail.Append(szContent);
szDetail.Append(KRetuen);
pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_DATE);
szDetail.Append(pTemp->Des());
CleanupStack::PopAndDestroy(pTemp);
TBuf<16> szDate;
m_pMtmsEngine->GetDate(nIndex,szDate);
szDetail.Append(szDate);
pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_TIME);
szDetail.Append(pTemp->Des());
CleanupStack::PopAndDestroy(pTemp);
TBuf<16> szTime;
m_pMtmsEngine->GetTime(nIndex,szTime);
szDetail.Append(szTime);
pTemp = StringLoader::LoadLC(R_QTN_IM_DETAIL_TYPE);
szDetail.Append(pTemp->Des());
CleanupStack::PopAndDestroy(pTemp);
TBuf<16> szType;
m_pMtmsEngine->GetType(nIndex,szType);
szDetail.Append(szType);
dlg->SetMessageTextL(szDetail);
dlg->RunLD();
}
//菜单动态效果
void CSMSListView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
{
if(aResourceId == R_MH_SMSLIST_MENU)
{
//标志位:相当于显示或不显示菜单栏的开关
switch(m_nListMenuFlag)
{
case 1://草稿箱
{
aMenuPane->SetItemDimmed(EFairyLandCmdWrite, EFalse);
aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
aMenuPane->SetItemDimmed(EFairyLandCmdOpen, EFalse);
aMenuPane->SetItemDimmed(EFairyLandDel, EFalse);
aMenuPane->SetItemDimmed(EFairyLandDetail, EFalse);
aMenuPane->SetItemDimmed(EFairyLandMoveSMS, EFalse);
aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
break;
}
case 0://收件箱
{
aMenuPane->SetItemDimmed(EFairyLandCmdWrite, ETrue);
aMenuPane->SetItemDimmed(EFairyLandReply, EFalse);
aMenuPane->SetItemDimmed(EFairyLandCmdOpen, EFalse);
aMenuPane->SetItemDimmed(EFairyLandDel, EFalse);
aMenuPane->SetItemDimmed(EFairyLandDetail, EFalse);
aMenuPane->SetItemDimmed(EFairyLandMoveSMS, EFalse);
aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
break;
}
case 2://无信息时
{
aMenuPane->SetItemDimmed(EFairyLandCmdWrite, EFalse);
aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
aMenuPane->SetItemDimmed(EFairyLandCmdOpen, ETrue);
aMenuPane->SetItemDimmed(EFairyLandDel, ETrue);
aMenuPane->SetItemDimmed(EFairyLandDetail, ETrue);
aMenuPane->SetItemDimmed(EFairyLandMoveSMS, ETrue);
aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
break;
}
case 3://发件箱
{
aMenuPane->SetItemDimmed(EFairyLandCmdWrite, EFalse);
aMenuPane->SetItemDimmed(EFairyLandReply, ETrue);
aMenuPane->SetItemDimmed(EFairyLandCmdOpen, EFalse);
aMenuPane->SetItemDimmed(EFairyLandDel, EFalse);
aMenuPane->SetItemDimmed(EFairyLandDetail, EFalse);
aMenuPane->SetItemDimmed(EFairyLandMoveSMS, EFalse);
aMenuPane->SetItemDimmed(EFairyLandCmdHelp, EFalse);
break;
}
default:
{
break;
}
}
}
else if (aResourceId == R_MH_SMSLIST_SUB_MENU)
{
switch(m_nListMenuFlag)
{
case 0://收件箱
{
aMenuPane->SetItemDimmed(EFairyLandMoveToDraftBox, EFalse);
aMenuPane->SetItemDimmed(EFairyLandMoveToSentBox, EFalse);
aMenuPane->SetItemDimmed(EFairyLandMoveToInBox, ETrue);
break;
}
case 1://草稿箱
{
aMenuPane->SetItemDimmed(EFairyLandMoveToDraftBox, ETrue);
aMenuPane->SetItemDimmed(EFairyLandMoveToSentBox, EFalse);
aMenuPane->SetItemDimmed(EFairyLandMoveToInBox, EFalse);
break;
}
case 3://发件箱
{
aMenuPane->SetItemDimmed(EFairyLandMoveToDraftBox, EFalse);
aMenuPane->SetItemDimmed(EFairyLandMoveToSentBox, ETrue);
aMenuPane->SetItemDimmed(EFairyLandMoveToInBox, EFalse);
break;
}
default:
{
break;
}
}
}
else
return;
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -