imfriendlistcontainer.cpp

来自「国内著名嵌入式培训机构内部资料,内含一些实例代码,包括技术专题书籍」· C++ 代码 · 共 252 行

CPP
252
字号
/*
 ============================================================================
 Author	  : hou maoqing
 Version	 : 1.0
 Copyright   : Copyright (c) Hou maoqing 2008
 Mail	: houmqing@163.com
 ============================================================================
 */

#include "ImFriendListContainer.h"

#include <akniconarray.h> // CAknIcon
#include <aknlists.h> // CAknSingleStyleListBox
#include <barsread.h> // TResource Reader
#include <e32def.h> // STATIC_CAST
#include <eikclbd.h> // CColumnListBoxData
#include <ImClientIcon.mbg>
#include <ImClientExam.rsg>

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

// ---------------------------------------------------------
// CImFriendListContainer::ConstructL(const TRect& aRect)
// EPOC two phased constructor
// ---------------------------------------------------------
//
void CImFriendListContainer::ConstructL(const TRect& aRect)
    {
    CreateWindowL();

    CreateListL();
	LoadListIconsL();
	LoadListItemsL();

	// Set the windows size
	SetRect(aRect);
	ActivateL();
    }

// Destructor
CImFriendListContainer::~CImFriendListContainer()
    {
    delete iMainItemsListBox;
    }

// ---------------------------------------------------------
// CImFriendListContainer::SizeChanged()
// Called by framework when the view size is changed
// ---------------------------------------------------------
//
void CImFriendListContainer::SizeChanged()
    {
    TRect rect=Rect();
    iMainItemsListBox->SetExtent (rect.iTl, rect.Size());
    }

// ---------------------------------------------------------
// CImFriendListContainer::CountComponentControls() const
// ---------------------------------------------------------
//
TInt CImFriendListContainer::CountComponentControls() const
    {
    return 1; // return nbr of controls inside this container
    }

// ---------------------------------------------------------
// CImFriendListContainer::ComponentControl(TInt aIndex) const
// ---------------------------------------------------------
//
CCoeControl* CImFriendListContainer::ComponentControl(TInt aIndex) const
    {
    switch ( aIndex )
        {
        case 0:
            return iMainItemsListBox;
        default:
            return NULL;
        }
    }

// ---------------------------------------------------------
// CImFriendListContainer::Draw(const TRect& aRect) const
// ---------------------------------------------------------
//
void CImFriendListContainer::Draw(const TRect& aRect) const
    {
    CWindowGc& gc = SystemGc();
    
    // example code...
    gc.SetPenStyle( CGraphicsContext::ENullPen );
    gc.SetBrushColor( KRgbGray );
    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
    gc.DrawRect( aRect );
    }

// ---------------------------------------------------------
// CImFriendListContainer::HandleControlEventL(
//     CCoeControl* aControl,TCoeEvent aEventType)
// ---------------------------------------------------------
//
void CImFriendListContainer::HandleControlEventL(
    CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
    {
    
    }

TKeyResponse CImFriendListContainer::OfferKeyEventL( 
            const TKeyEvent& aKeyEvent, TEventCode aType )
    {
    if (iMainItemsListBox)
    		return iMainItemsListBox->OfferKeyEventL (aKeyEvent, aType);
	else
		return EKeyWasNotConsumed;
    }

void CImFriendListContainer::CreateListL()
	{
	// 创建列表实例
	iMainItemsListBox = new (ELeave) CAknSingleGraphicStyleListBox;
	iMainItemsListBox->SetContainerWindowL(*this);
	
	// 从资源构造列表
	TResourceReader reader;
	CEikonEnv::Static()->CreateResourceReaderLC(reader, R_LISTBOX_CHAT_RECORD);
	iMainItemsListBox->ConstructFromResourceL(reader);
	CleanupStack::PopAndDestroy(); // reader
	
	// 给列表创建滚动条
	iMainItemsListBox->CreateScrollBarFrameL();
	iMainItemsListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
		CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
	}

void CImFriendListContainer::LoadListIconsL()
	{
	// Get the name of the file containing the icons
	TFileName fnIconFileName;
	fnIconFileName.Append(_L("\\resource\\apps\\ImClientIcon.mbm"));
	
	// Create an array of icons, reading them from the file
	CArrayPtr<CGulIcon>* icons = new(ELeave) CAknIconArray(2);
	CleanupStack::PushL(icons);
	icons->AppendL(iEikonEnv->CreateIconL(fnIconFileName, EMbmImclienticonOffline, EMbmImclienticonOffline_mask));
	icons->AppendL(iEikonEnv->CreateIconL(fnIconFileName, EMbmImclienticonOnline, EMbmImclienticonOnline_mask));
	CleanupStack::Pop(icons);
	
	iMainItemsListBox->ItemDrawer()->ColumnData()->SetIconArray(icons); // passing ownership of icons

	}

void CImFriendListContainer::LoadListItemsL()
	{
	CTextListBoxModel* model = iMainItemsListBox->Model();  // not taking ownership
	model->SetOwnershipType (ELbmOwnsItemArray);
	CDesCArray* mainItemsArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
	
	//装入列表项
	/*TBuf<32> bufItem;
	
	bufItem.Append(_L("0\tFirst Item"));
	mainItemsArray->AppendL (bufItem);
	
	bufItem.Zero();
	bufItem.Append(_L("1\tSecond Item"));
	mainItemsArray->AppendL (bufItem);*/
	}

void CImFriendListContainer::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aListBoxEvent)
	{
	
	// if the Select Key has been pressed
	if ((aListBoxEvent == MEikListBoxObserver::EEventEnterKeyPressed) ||
		(aListBoxEvent == MEikListBoxObserver::EEventItemClicked))
		{
			
		}
	}

void CImFriendListContainer::AddFriendItemL(const TDesC& desAcc,int bStatus)
	{
	if(bStatus>1)
		return;
	
	if (iMainItemsListBox)
		{
		CTextListBoxModel* model = iMainItemsListBox->Model();
		CDesCArray* itemArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
		
		TInt nCurItem = iMainItemsListBox->CurrentItemIndex();
		
		TBuf<32> bufItem;
		bufItem.AppendFormat(_L("%d\t%S"),bStatus,&desAcc);
		itemArray->AppendL (bufItem);
		
		iMainItemsListBox->HandleItemAdditionL();
		}
	}

void CImFriendListContainer::ModifyFriendItemL(int nIndex,const TDesC& desAcc,int bStatus)
	{
	if(bStatus>1)
		return;
	
	if (iMainItemsListBox)
		{
		CTextListBoxModel* model = iMainItemsListBox->Model();
		CDesCArray* itemArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
		itemArray->Delete(nIndex);
		
		TBuf<32> bufItem;
		bufItem.AppendFormat(_L("%d\t%S"),bStatus,&desAcc);
		itemArray->InsertL(nIndex,bufItem);
		
		iMainItemsListBox->HandleItemAdditionL();
		}
	}

int CImFriendListContainer::GetSelectedFriendIndex()
	{
	TInt nCurItem=-1;
	
	if (iMainItemsListBox)
		{
		nCurItem = iMainItemsListBox->CurrentItemIndex();
		}
	return nCurItem;
	}

int CImFriendListContainer::DeleteSelectedL()
	{
	TInt nCurItem=-1;
	
	if (iMainItemsListBox)
		{
		CTextListBoxModel* model = iMainItemsListBox->Model();
		
		if (model->NumberOfItems() > 0)
			{
			CDesCArray* itemArray = STATIC_CAST(CDesCArray*, model->ItemTextArray());
			
			nCurItem = iMainItemsListBox->CurrentItemIndex();
			itemArray->Delete(nCurItem);
			
			AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
					iMainItemsListBox,nCurItem,ETrue);
			}
		}
	return nCurItem;
	}

// End of File  

⌨️ 快捷键说明

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