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

📄 smsdisplayview.cpp

📁 symbian 2rd 备忘录
💻 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 + -