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

📄 sabbermessageview.cpp

📁 Simple Jabber Client for Symbian Platform
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CSabberMessageView from SabberMessageView.h
*  Part of  : Sabber
*  Created  : 2004-12-9 by Xie Tian Lu
*  Implementation notes:
*     Initial content was generated by Series 60 AppWizard.
*  Version  : 0.1
*  Copyright: (c) Xie Tian Lu Http://sabber.jabberstudio.org/
* ============================================================================
*/

// INCLUDE FILES
#include  <aknviewappui.h>
#include  <eikbtgpc.h>
#include  <eikmenub.h>
#include  <avkon.hrh>
#include  <Sabber.rsg>
#include  "Sabber.hrh"
#include  "SabberMessageView.h"
#include  "SabberMessageContainer.h" 
#include  "MessageModel.h"
#include  "SabberAppUi.h"

#define M_RETRIVE_APPUI( ui )		CSabberAppUi* ##ui = ( CSabberAppUi* )AppUi()

// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CSabberMessageView::ConstructL(const TRect& aRect)
// EPOC two-phased constructor
// ---------------------------------------------------------
//
void CSabberMessageView::ConstructL()
    {
    BaseConstructL( R_SABBER_MESSAGE_VIEW );
	iModel = new CMessageModel();
	iModel->ConstructL();
	iBeToCompose	= EFalse;
	iBeToSwitchView = EFalse;
    }

// ---------------------------------------------------------
// CSabberMessageView::~CSabberMessageView()
// ?implementation_description
// ---------------------------------------------------------
//
CSabberMessageView::~CSabberMessageView()
    {
    if ( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        }
	else 
		{
		delete iModel;
		}

    delete iContainer;
    }

// ---------------------------------------------------------
// TUid CSabberMessageView::Id()
// ?implementation_description
// ---------------------------------------------------------
//
TUid CSabberMessageView::Id() const
    {
    return KView2Id;
    }

// ---------------------------------------------------------
// CSabberMessageView::HandleCommandL(TInt aCommand)
// ?implementation_description
// ---------------------------------------------------------
//
void CSabberMessageView::HandleCommandL(TInt aCommand)
    {   
	M_RETRIVE_APPUI( ui );

    switch ( aCommand )
        {
        case ECbaReply:
		case ECmdMsgReply:
            {
			if ( RetrieveReceiptor() ) {
				iBeToSwitchView = EFalse;
				ComposeMessage();
			}
            break;
            }

		case ECbaSend:
			if ( iContainer->GetTextEditorContent( iBody ) )
				ui->SendMsg( iBody, iDest );
			EndComposeMessage();
			break;

		case ECbaBack:
			EndComposeMessage();
			break;

		case ECmdMsgDetail:
			if ( iContainer->PopupViewer() ) {
				Cba()->SetCommandSetL( R_VIEWER_CBA );
				Cba()->DrawDeferred(); 
			}
			break;

		case ECbaViewerBack:
			iContainer->PopoffViewer();
			Cba()->SetCommandSetL( R_MESSAGE_CBA );
			Cba()->DrawDeferred(); 
			MenuBar()->SetMenuTitleResourceId( R_SABBER_MESSAGE_MENUBAR );
			break;

		case ECbaViewerReply:
			iContainer->PopoffViewer();
			Cba()->SetCommandSetL( R_MESSAGE_CBA );
			Cba()->DrawDeferred(); 
			MenuBar()->SetMenuTitleResourceId( R_SABBER_MESSAGE_MENUBAR );
			if ( RetrieveReceiptor() ) {
				iBeToSwitchView = EFalse;
				ComposeMessage();
			}
			break;

		case ECmdMsgDelete:
			break;

        case EAknSoftkeyBack:
            {
            AppUi()->HandleCommandL(EEikCmdExit);
            break;
            }
        default:
            {
            AppUi()->HandleCommandL( aCommand );
            break;
            }
        }
    }

// ---------------------------------------------------------
// CSabberMessageView::HandleClientRectChange()
// ---------------------------------------------------------
//
void CSabberMessageView::HandleClientRectChange()
    {
    if ( iContainer )
        {
        iContainer->SetRect( ClientRect() );
        }
    }

// ---------------------------------------------------------
// CSabberMessageView::DoActivateL(...)
// ?implementation_description
// ---------------------------------------------------------
//
void CSabberMessageView::DoActivateL(
   const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
   const TDesC8& /*aCustomMessage*/)
    {
    if (!iContainer)
        {
		M_RETRIVE_APPUI( ui );

		if ( iModel->NumberOfItems() == 0 )
		{
			TBuf< 32 >	stamp;
			ui->GetTimeStamp( stamp );

			CMessageItem* item;
			item = CMessageItem::CreateMessageItem( 
									"xietianlu@jabber.org",
									"you",
									"Hello, Welcome to Sabber!",
									ETrue );
			item->SetIconSet( ui->iIconSet );
			item->SetTimeStamp( stamp );
			iModel->AddItem( item );

			item = CMessageItem::CreateMessageItem( 
									"luoyizhou@jabber.org",
									"you",
									"Have fun on Sabber!",
									EFalse );
			item->SetIconSet( ui->iIconSet );
			item->SetTimeStamp( stamp );
			iModel->AddItem( item );
		}
		//iContainer->iMessageViewer->SetF

        iContainer = new (ELeave) CSabberMessageContainer;
        iContainer->SetMopParent(this);
		iContainer->SetListBoxFont( iFont );
		iContainer->SetListBoxModel( iModel );
		iContainer->SetAppUi( ui );
        iContainer->ConstructL( ClientRect() );
        }
   AppUi()->AddToStackL( *this, iContainer );
   iContainer->MakeVisible( ETrue );

   if ( iBeToCompose )
	   ComposeMessage();
   }

// ---------------------------------------------------------
// CSabberMessageView::HandleCommandL(TInt aCommand)
// ?implementation_description
// ---------------------------------------------------------
//
void CSabberMessageView::DoDeactivate()
    {
    if ( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        }
    
    iContainer->MakeVisible( EFalse );

    //delete iContainer;
    //iContainer = NULL;
    }

void CSabberMessageView::Update()
{
	if ( iContainer ) {
		iContainer->Update();
		iContainer->DrawNow();
	}
}

CMessageModel* CSabberMessageView::GetMessageModel()
{
	return iModel;
}

void CSabberMessageView::SetFont( CFont* aFont )
{
	iFont = aFont;
}

TBool CSabberMessageView::RetrieveReceiptor()
{
	iContainer->GetCurItemDest( iDest );
	if ( strstr( iDest, "@" ) )
		return ETrue;

	return EFalse;
}

void CSabberMessageView::SetReceiptor( char* jid )
{
	strcpy( iDest, jid );
}

void CSabberMessageView::PrepareComposing()
{
	iBeToCompose	= ETrue;
	iBeToSwitchView = ETrue;
}

void CSabberMessageView::ComposeMessage()
{
	iContainer->PopupEditorbox();			

	Cba()->SetCommandSetL( R_EDITOR_CBA );
	Cba()->DrawDeferred(); 
	iBeToCompose = EFalse;
}

void CSabberMessageView::EndComposeMessage()
{
	iContainer->PopoffEditorbox();			

	Cba()->SetCommandSetL( R_MESSAGE_CBA );
	Cba()->DrawDeferred(); 
	MenuBar()->SetMenuTitleResourceId( R_SABBER_MESSAGE_MENUBAR );

	if ( iBeToSwitchView ) {
		M_RETRIVE_APPUI( ui );
		iBeToSwitchView = EFalse;
		ui->ActivateView( 0 );
	}
}

// End of File

⌨️ 快捷键说明

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