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 + -
显示快捷键?