createmesview.cpp
来自「symbian 3nd 实现短信息收发」· C++ 代码 · 共 394 行
CPP
394 行
/*
* ============================================================================
* Name : CCreateMesView from CAknView
* Part of : CreateMes
* Copyright (c) 2003 Nokia. All rights reserved.
* ============================================================================
*/
// INCLUDE FILES
#include <aknviewappui.h>
#include <avkon.hrh>
#include <akntitle.h>
#include <FrMes.rsg>
#include "FrMes.hrh"
#include "CreateMesView.h"
#include "CreateMesContainer.h"
#include "MessageView.h"
#include "SelectCardview.h"
#include "HelpView.h"
#include "MessageView.h"
#include "FrMesAppUi.h"
#include "MessageDB.h"
#include "aknnotewrappers.h"
#include "msvids.h"
#include "eikmenup.h"
#include "MainInterfaceView.h"
#include "BookEngine.h"
// ================= MEMBER FUNCTIONS =======================
// C++ default constructor can NOT contain any code, that
// might leave.
//
CCreateMesView* CCreateMesView::NewL()
{
CCreateMesView* self = NewLC();
CleanupStack::Pop(self);
return self;
}
CCreateMesView* CCreateMesView::NewLC()
{
CCreateMesView* self = new (ELeave) CCreateMesView;
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CCreateMesView::CCreateMesView()
{
m_BookIndex = -1;
m_CardIndex = -1;
}
// EPOC default constructor can leave.
void CCreateMesView::ConstructL()
{
m_szPhone = NULL;
m_pName = NULL;
m_pContent = NULL;
BaseConstructL(R_CREATEMES_VIEW);
}
// Destructor
CCreateMesView::~CCreateMesView()
{
if (iContainer)
{
AppUi()->RemoveFromStack(iContainer);
}
delete iContainer;
if(m_szPhone)
{
delete m_szPhone;
m_szPhone = NULL;
}
if(m_pContent)
{
delete m_pContent;
m_pContent = NULL;
}
if(m_pName)
{
delete m_pName;
m_pName = NULL;
}
}
// ---------------------------------------------------------
// TUid CCreateMesView::Id()
// Returns Id of the view.
// ---------------------------------------------------------
TUid CCreateMesView::Id() const
{
return KCreateMesViewId;
}
// ---------------------------------------------------------
// CCreateMesView::HandleCommandL(TInt aCommand)
// Handles commands
// ---------------------------------------------------------
void CCreateMesView::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case EFrMesCmdSendMes:
{
SendMesL();
}
break;
case EFrMesCmdSelectCard:
{
iContainer->GetInputL(m_pName,m_pContent);
AppUi()->ActivateLocalViewL(KSelectViewId);
}
break;
case EFrMesCmdMessageHelp:
{
CFrMesAppUi* pApp = (CFrMesAppUi*)CEikonEnv::Static()->AppUi();
pApp->KPreViewID = KCreateMesViewId;
AppUi()->ActivateLocalViewL(KHelpViewId);
}
break;
case EAknSoftkeyReturn:
{
SaveMesToBook();
CFrMesAppUi* pApp = (CFrMesAppUi*)CEikonEnv::Static()->AppUi();
if (pApp->KPreViewID == KMainInterfaceViewId)
{
AppUi()->ActivateLocalViewL(KMessageViewId);
}
else
{
AppUi()->ActivateLocalViewL(pApp->KPreViewID);
}
}
break;
default:
break;
}
}
// ---------------------------------------------------------
// CCreateMesView::HandleClientRectChange()
// Handles client rect change.
// ---------------------------------------------------------
void CCreateMesView::HandleClientRectChange()
{
if (iContainer)
{
iContainer->SetRect(ClientRect());
}
}
// ---------------------------------------------------------
// CCreateMesView::DoActivateL(...)
// Creates the Container class object.
// ---------------------------------------------------------
void CCreateMesView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,
TUid /*aCustomCreateMesId*/,
const TDesC8& /*aCustomCreateMes*/)
{
iContainer = new (ELeave) CCreateMesContainer;
iContainer->SetMopParent(this);
TRect rc;
rc.SetRect(ClientRect().iTl, TSize(176, 144));
iContainer->ConstructL(rc);
AppUi()->AddToStackL(*this, iContainer);
//modify title by shanyunlong 2008-07-04
TBuf<32> sTmpTitle;
CEikStatusPane* statusPane = StatusPane();
CEikonEnv::Static()->ReadResource(sTmpTitle,R_FRMES_VIEW_TITLE_CREATEMES);
CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
titlePane->SetTextL(sTmpTitle);
//set Edit content
CFrMesAppUi* pApp = (CFrMesAppUi*)CEikonEnv::Static()->AppUi();
TMessageDBStruct* tempMessage;
if(pApp->KPreViewID == KBookMesViewId && m_BookIndex != -1)
{
CArrayFixFlat<TInt32>* tempArray = pApp->m_pMessageDB->
GetMessageArray(KMsvDraftEntryId);
tempMessage = (TMessageDBStruct*)tempArray->At(m_BookIndex);
iContainer->SetTextL(&tempMessage->imobile,&tempMessage->imessage);
}
else if(pApp->KPreViewID == KReceiveViewId)
{
iContainer->SetTextL(m_szPhone,&_L(""));
}
else
{
SetEditText();
}
}
// ---------------------------------------------------------
// CCreateMesView::DoDeactivate()
// Deletes the Container class object.
// ---------------------------------------------------------
void CCreateMesView::DoDeactivate()
{
if (iContainer)
{
AppUi()->RemoveFromStack(iContainer);
}
delete iContainer;
iContainer = NULL;
}
void CCreateMesView::NotifyMessageInvalidL()
{
_LIT(message,"no send!");
CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
informationNote->ExecuteLD(message);
}
void CCreateMesView::SendMesL()
{
TBuf<16> sTmpName;
TBuf<70> sTmpContent;
iContainer->GetInput(sTmpName,sTmpContent);
CFrMesAppUi* pApp = (CFrMesAppUi*)CEikonEnv::Static()->AppUi();
CMtmsEngine * m_pEngine = pApp->m_pMessageDB->GetMtmsEnginePoint();
TBuf<48> sTmpMobile;
pApp->iBookEngine->GetMobileNumberByName(sTmpName,sTmpMobile);
if(pApp->KPreViewID == KBookMesViewId && m_BookIndex != -1)//如果来自草稿箱打开信息
{
//TInt nCount = pApp->m_pMessageDB->GetMessageArray(KMsvDraftEntryId)->Count();
m_pEngine->DeleteMessageL(m_BookIndex);
pApp->m_pMessageDB->DelMessage(KMsvDraftEntryId,m_BookIndex);
m_BookIndex = -1;
}
if(!sTmpMobile.Length())
{
TMsvId messageId = m_pEngine->CreateSMSMessageL(sTmpName,sTmpContent);
}
else
{
TMsvId messageId = m_pEngine->CreateSMSMessageL(sTmpMobile,sTmpContent);
}
// TInt nCount = pApp->m_pMessageDB->GetMessageArray(KMsvDraftEntryId)->Count();
// if(nCount)//如果已生成过草稿箱数组,则添加新消息到数组
// {
// pApp->m_pMessageDB->AddMessageL(KMsvDraftEntryId,sTmpName,sTmpContent);
// }
if (!m_pEngine->ValidateCreatedSMS())//信息合法性检测
{
NotifyMessageInvalidL();
}
else
{
// m_pEngine->MoveToFolderL(messageId,KMsvGlobalOutBoxIndexEntryId);//移到发件箱
m_pEngine->SendSMSL();
}
}
void CCreateMesView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
{
if(aResourceId != R_FRMES_CREATEMES_MENU) return;
aMenuPane->SetItemDimmed(EFrMesCmdSendMes, EFalse);
aMenuPane->SetItemDimmed(EFrMesCmdSelectCard, EFalse);
aMenuPane->SetItemDimmed(EFrMesCmdMessageHelp, EFalse);
TBuf<16> sTmpName;
TBuf<70> sTmpContent;
iContainer->GetInput(sTmpName,sTmpContent);
if(!sTmpName.Length())
{
aMenuPane->SetItemDimmed(EFrMesCmdSendMes, ETrue);
}
}
//from ReceiveMesView_MSendTel
void CCreateMesView::SendTel(TDes * aphone)
{
m_szPhone = aphone;
}
//from BookMesView_MSendBookIndex
void CCreateMesView::SendBookIndex(TInt aIndex)
{
m_BookIndex = aIndex;
}
void CCreateMesView::SaveMesToBook()
{
CFrMesAppUi* pApp = (CFrMesAppUi*)CEikonEnv::Static()->AppUi();
CArrayFixFlat<TInt32>* tempArray = pApp->m_pMessageDB->
GetMessageArray(KMsvDraftEntryId);
TBuf<16> sTmpName;
TBuf<70> sTmpContent;
iContainer->GetInput(sTmpName,sTmpContent);
if(sTmpName.Length() != 0 || sTmpContent.Length() != 0)//如果电话或内容有一个不为空
{
CMtmsEngine * m_pEngine = pApp->m_pMessageDB->GetMtmsEnginePoint();
if(pApp->KPreViewID == KBookMesViewId && m_BookIndex != -1)//如果来自草稿箱打开信息
{
TMessageDBStruct* tempMessage = (TMessageDBStruct*)tempArray->At(m_BookIndex);
if(sTmpName.Compare(tempMessage->imobile) ||
sTmpContent.Compare(tempMessage->imessage))//如果电话或内容有一个进行了更改
{
CAknQueryDialog* pdialog = CAknQueryDialog::NewL( CAknQueryDialog::ENoTone );
TBool aResult=pdialog->ExecuteLD( R_QTN_SAVETOBOOK_DIALOG );
if (aResult)//如果用户选择保存草稿 先删除原来已有草稿 再保存
{
m_pEngine->DeleteMessageL(m_BookIndex);
pApp->m_pMessageDB->DelMessage(KMsvDraftEntryId,m_BookIndex);
m_pEngine->CreateSMSMessageL(sTmpName,sTmpContent);
pApp->m_pMessageDB->AddMessageL(KMsvDraftEntryId,sTmpName,sTmpContent);
}
}
}
else
{
CAknQueryDialog* pdialog = CAknQueryDialog::NewL( CAknQueryDialog::ENoTone );
TBool aResult=pdialog->ExecuteLD( R_QTN_SAVETOBOOK_DIALOG );
if (aResult)//如果用户选择保存草稿,直接保存
{
m_pEngine->CreateSMSMessageL(sTmpName,sTmpContent);
if(tempArray->Count())
{
pApp->m_pMessageDB->AddMessageL(KMsvDraftEntryId,sTmpName,sTmpContent);
}
}
}
}
m_BookIndex = -1;
}
void CCreateMesView::SendCardSelect(TInt aIndex)
{
m_CardIndex = aIndex;
}
void CCreateMesView::SetEditText()
{
if(m_CardIndex != -1)
{
HBufC* aFamName = NULL;
HBufC* aFirName = NULL;
TBuf<32> sTmp;
CFrMesAppUi* pApp = (CFrMesAppUi*)CEikonEnv::Static()->AppUi();
aFamName = pApp->iPhoneBookArray->At(m_CardIndex)->GetLastName();
aFirName = pApp->iPhoneBookArray->At(m_CardIndex)->GetFirstName();
sTmp.Append(*aFamName);
sTmp.Append(*aFirName);
iContainer->SetTextL(&sTmp,m_pContent);
m_CardIndex = -1;
}
else
{
iContainer->SetTextL(m_pName,m_pContent);
if(m_pName)
{
delete m_pName;
m_pName = NULL;
}
if(m_pContent)
{
delete m_pContent;
m_pContent = NULL;
}
}
}
// End of File
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?