⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bookengine.cpp

📁 自制symbian通讯录引擎
💻 CPP
字号:
#include <cpbkcontactengine.h>				//PbkEng.lib
#include <tpbkcontactitemfield.h> 
#include <cpbkcontactitem.h> 
#include <CNTFLDST.H>

#include "BookEngine.h"

#define MEMORY_FREE(p) if(p){delete p; p=NULL;}
/*****************************************************************
*********************** CQBookEngine ******************************
*****************************************************************/
CQBookEngine* CQBookEngine::NewL()
{
	CQBookEngine* self = CQBookEngine::NewLC();
	CleanupStack::Pop();
	return self;
}

CQBookEngine* CQBookEngine::NewLC()
{
	CQBookEngine* self = new(ELeave) CQBookEngine;
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
}

CQBookEngine::CQBookEngine()
{
	m_pPbkContactEngine = NULL;
}

void CQBookEngine::ConstructL()
{
	m_pPbkContactEngine = CPbkContactEngine::NewL();
}

CQBookEngine::~CQBookEngine()
{
	MEMORY_FREE(m_pPbkContactEngine);
}

void CQBookEngine::AddBookL(RPointerArray<CQBookInfo>& aBookInfo)
{
 	TInt i = 0;
	for(i = 0; i<aBookInfo.Count(); i++)
	{
		CQBookInfo* pBookInfo = static_cast<CQBookInfo*>(aBookInfo[i]);

		CPbkContactItem* pContactItem = m_pPbkContactEngine->CreateEmptyContactL();
		CleanupStack::PushL(pContactItem);
		TPbkContactItemField* pField = NULL;
		//lastName
		pField = pContactItem->FindField(EPbkFieldIdLastName);
		if(pField && (pBookInfo->GetLastName()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetLastName()->Des()); 
		}
		//firstName
		pField = pContactItem->FindField(EPbkFieldIdFirstName);
		if(pField && (pBookInfo->GetFirstName()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetFirstName()->Des()); 
		}
		//telephone		
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberGeneral);
		if(pField && (pBookInfo->GetTelephone()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetTelephone()->Des()); 
		}
		//hometelephone
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberHome);
		if(pField && (pBookInfo->GetHomeTelephone()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetHomeTelephone()->Des()); 
		}
		//businesstelephone
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberWork);
		if(pField && (pBookInfo->GetBusinessTelephone()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetBusinessTelephone()->Des()); 
		}
		//homemobile
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberMobile);
		if(pField && (pBookInfo->GetHomeMobileNumber()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetHomeMobileNumber()->Des()); 
		}
		//添加条目
		TContactItemId contactId = m_pPbkContactEngine->AddNewContactL(*pContactItem);
		//设置条目ID
		pBookInfo->SetItemID(contactId);
		CleanupStack::PopAndDestroy(pContactItem);

	}
}

void CQBookEngine::GetBookL(RPointerArray<CQBookInfo>& aBookInfo)
{
	TInt i = 0;
	_LIT(KEmpty, "");
	TBuf<128>	sTempBuf;
	CQBookInfo*	pBookInfo	= NULL;
	CContactIdArray* pArrayOfID = m_pPbkContactEngine->FindLC(KEmpty);
	for(i = 0; i<pArrayOfID->Count(); i++)
	{
		pBookInfo = CQBookInfo::NewL();
		CPbkContactItem* pContactItem = m_pPbkContactEngine->ReadContactLC((*pArrayOfID)[i]);
		TPbkContactItemField* pField = NULL;
		pBookInfo->SetItemID((*pArrayOfID)[i]);
		CleanupStack::PushL(pContactItem);
		//lastName
		pField = pContactItem->FindField(EPbkFieldIdLastName);
		sTempBuf.Zero();
		if (pField)
		{
			pField->GetTextL(sTempBuf);
			pBookInfo->SetLastName(sTempBuf);
		}
		//firstName
		pField = pContactItem->FindField(EPbkFieldIdFirstName);
		sTempBuf.Zero();
		if (pField)
		{
			pField->GetTextL(sTempBuf);
			pBookInfo->SetFirstName(sTempBuf);
		}
		//telephone	
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberGeneral);
		sTempBuf.Zero();
		if (pField)
		{
			pField->GetTextL(sTempBuf);
			pBookInfo->SetTelephone(sTempBuf);
		}
		//hometelephone
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberHome);
		sTempBuf.Zero();
		if (pField)
		{
			pField->GetTextL(sTempBuf);
			pBookInfo->SetHomeTelephone(sTempBuf);
		}
		//businesstelephone
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberWork);
		sTempBuf.Zero();
		if (pField)
		{
			pField->GetTextL(sTempBuf);
			pBookInfo->SetBusinessTelephone(sTempBuf);
		}
		//homemobile
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberMobile);
		sTempBuf.Zero();
		if (pField)
		{
			pField->GetTextL(sTempBuf);
			pBookInfo->SetHomeMobileNumber(sTempBuf);
		}
		CleanupStack::PopAndDestroy(pField);
		aBookInfo.Append(pBookInfo);
		CleanupStack::PopAndDestroy(pContactItem);
	}
	CleanupStack::PopAndDestroy(pArrayOfID);
}

void CQBookEngine::ModifyBookL(RPointerArray<CQBookInfo>& aBookInfo)
{
	TInt i = 0;
	_LIT(KEmpty, "");
	TBuf<128>	sTempBuf;
	CContactIdArray* pArrayOfID = m_pPbkContactEngine->FindLC(KEmpty);
	for(i = 0; i<pArrayOfID->Count(); i++)
	{
		CPbkContactItem*  pContactItem = m_pPbkContactEngine->ReadContactLC((*pArrayOfID)[i]) ;
		if (pContactItem == NULL)
		{
			continue;
		}
		else
		{
			CleanupStack::PopAndDestroy(pContactItem);
			pContactItem = m_pPbkContactEngine->OpenContactLCX((*pArrayOfID)[i]);
		} 
		CQBookInfo* pBookInfo = static_cast<CQBookInfo*>(aBookInfo[i]);
		//lastName
		
		TPbkContactItemField* pField = pContactItem->FindField(EPbkFieldIdLastName);
		if(pField && (pBookInfo->GetLastName()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetLastName()->Des()); 
		}
		//firstName
		pField = pContactItem->FindField(EPbkFieldIdFirstName);
		if(pField && (pBookInfo->GetFirstName()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetFirstName()->Des()); 
		}
		//telephone		
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberGeneral);
		if(pField && (pBookInfo->GetTelephone()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetTelephone()->Des()); 
		}
		//hometelephone
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberHome);
		if(pField && (pBookInfo->GetHomeTelephone()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetHomeTelephone()->Des()); 
		}
		//businesstelephone
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberWork);
		if(pField && (pBookInfo->GetBusinessTelephone()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetBusinessTelephone()->Des()); 
		}
		//homemobile
		pField = pContactItem->FindField(EPbkFieldIdPhoneNumberMobile);
		if(pField && (pBookInfo->GetHomeMobileNumber()))
		{
			pField->TextStorage()->SetTextL(pBookInfo->GetHomeMobileNumber()->Des()); 
		}
		m_pPbkContactEngine->CommitContactL(*pContactItem);
		CleanupStack::PopAndDestroy(2);
	}
	CleanupStack::PopAndDestroy(pArrayOfID);	
}	

TInt CQBookEngine::GetCountL()
{
	_LIT(KEmpty, "");

	CContactIdArray* pArrayOfID = m_pPbkContactEngine->FindLC(KEmpty);
	TInt nCount = pArrayOfID->Count();
	CleanupStack::PopAndDestroy();
	
	return nCount;
}

void CQBookEngine::DeleteBookByIdL(TInt aContactId)
{
	m_pPbkContactEngine->DeleteContactL(aContactId);
}

void CQBookEngine::DeleteAllBookL()
{
 	_LIT(KEmpty, "");
 	CContactIdArray* pArrayOfID = m_pPbkContactEngine->FindLC(KEmpty);
	m_pPbkContactEngine->DeleteContactsL(*pArrayOfID);
 	CleanupStack::PopAndDestroy();
}

TBool CQBookEngine::IsGroupL(TInt aContactId)
{
	CContactGroup* pCntGroup = m_pPbkContactEngine->ReadContactGroupL(aContactId);
	if(pCntGroup)
		return ETrue;
	return EFalse;
}

/*****************************************************************
*********************** CQGroupInfo ******************************
*****************************************************************/
CQGroupInfo* CQGroupInfo::NewL()
{
	CQGroupInfo* self = CQGroupInfo::NewLC();
	CleanupStack::Pop();
	return self;
}

CQGroupInfo* CQGroupInfo::NewLC()
{
	CQGroupInfo* self = new(ELeave) CQGroupInfo;
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
}

CQGroupInfo::CQGroupInfo()
{
	m_pStrGroupName	= NULL;
	m_nGroupID		= -1;
}

void CQGroupInfo::ConstructL()
{
}

CQGroupInfo::~CQGroupInfo()
{
	MEMORY_FREE(m_pStrGroupName);
	m_arrBookID.ResetAndDestroy();
}

/*****************************************************************
*********************** CQBookInfo ******************************
*****************************************************************/
CQBookInfo* CQBookInfo::NewL()
{
	CQBookInfo* self = CQBookInfo::NewLC();
	CleanupStack::Pop();
	return self;
}

CQBookInfo* CQBookInfo::NewLC()
{
	CQBookInfo* self = new(ELeave) CQBookInfo;
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
}

CQBookInfo::CQBookInfo()
{
	m_nItem_ID				= -1;
	m_pStrLastName			= NULL;
	m_pStrFirstName			= NULL;
	m_pStrTelephone			= NULL;
	m_pStrHomeTelephone		= NULL;
	m_pStrBusinessTelephone	= NULL;
	m_pStrHomeMobile		= NULL;
	m_pStrModifyTime		= NULL;
	m_pStrModifyDate		= NULL;
}

void CQBookInfo::ConstructL()
{
}

CQBookInfo::~CQBookInfo()
{
	MEMORY_FREE(m_pStrLastName);
	MEMORY_FREE(m_pStrFirstName);
	MEMORY_FREE(m_pStrTelephone);
	MEMORY_FREE(m_pStrHomeTelephone);
	MEMORY_FREE(m_pStrBusinessTelephone);
	MEMORY_FREE(m_pStrHomeMobile);
	MEMORY_FREE(m_pStrModifyTime);
	MEMORY_FREE(m_pStrModifyDate);
}

void CQBookInfo::SetLastName(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrLastName);
	if(aBuf.Length() > 0)
	{
		m_pStrLastName = HBufC::NewLC(aBuf.Length());
		m_pStrLastName->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}

void CQBookInfo::SetFirstName(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrFirstName);
	if(aBuf.Length() > 0)
	{
		m_pStrFirstName = HBufC::NewLC(aBuf.Length());
		m_pStrFirstName->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}

void CQBookInfo::SetTelephone(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrTelephone);
	if(aBuf.Length() > 0)
	{
		m_pStrTelephone = HBufC::NewLC(aBuf.Length());
		m_pStrTelephone->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}

void CQBookInfo::SetHomeTelephone(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrHomeTelephone);
	if(aBuf.Length() > 0)
	{
		m_pStrHomeTelephone = HBufC::NewLC(aBuf.Length());
		m_pStrHomeTelephone->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}

//m_sBusinessTelephone
void CQBookInfo::SetBusinessTelephone(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrBusinessTelephone);
	if(aBuf.Length() > 0)
	{
		m_pStrBusinessTelephone = HBufC::NewLC(aBuf.Length());
		m_pStrBusinessTelephone->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}

//m_sHomeMobile
void CQBookInfo::SetHomeMobileNumber(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrHomeMobile);
	if(aBuf.Length() > 0)
	{
		m_pStrHomeMobile = HBufC::NewLC(aBuf.Length());
		m_pStrHomeMobile->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}
//m_sModifyTime
void CQBookInfo::SetModifyTime(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrModifyTime);
	if(aBuf.Length() > 0)
	{
		m_pStrModifyTime = HBufC::NewLC(aBuf.Length());
		m_pStrModifyTime->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}

//m_sModifyTime
void CQBookInfo::SetModifyDate(const TDesC& aBuf)
{
	MEMORY_FREE(m_pStrModifyDate);
	if(aBuf.Length() > 0)
	{
		m_pStrModifyDate = HBufC::NewLC(aBuf.Length());
		m_pStrModifyDate->Des().Copy(aBuf);
		CleanupStack::Pop();
	}	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -