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

📄 gridcontainer.cpp

📁 symbian 2rd 备忘录
💻 CPP
字号:

#include <gulicon.h>
#include <aknutils.h>    // definition of AKN_LAF_COLOR()
#include <avkon.hrh>
#include <akntitle.h>
#include <aknnotewrappers.h>
#include <aknlists.h>
#include <barsread.h>
#include "GridView.h"
#include <akniconarray.h>
#include "Assistant.hrh"
#include "GridView.h"
#include <Assistant.rsg>
#include "AssistantAppUi.h"
#include "GridContainer.h"
#include "common.h"
#include "assistant.hrh"
#include <akngrid.h>    	//for Grid
#include <e32base.h>		//for CArrayPtr
#include <AknIconArray.h>	//for CAknIconArray
#include <AknLists.h>		//for AknListBoxLayouts

//////////////////////////////////////////////////////////////////////////

CGridContainer::CGridContainer()
{
// 	iX = 0;
// 	iY = 0;
// 	CAssistantAppUi* pApp = (CAssistantAppUi*)CEikonEnv::Static()->AppUi();
// 	
// 	for(TInt i=18; i<27; i++)
// 	{
// 		m_Array.Append(pApp->LoadGraphicsL1(i));
// 	}
	m_pGrid = NULL;
}

// EPOC default constructor can leave.
void CGridContainer::ConstructL(const TRect& aRect/*,CGridView* aView*/)
{
    CreateWindowL();

	/*m_pView = aView;*/
	//---begin-for-Grid----------------------
	m_pGrid = new( ELeave ) CAknGrid;	//创建一个Grid控制器实例/对象
	m_pGrid->SetContainerWindowL( *this );	//设置Grid所在的容器:把这个Grid放到容器中
	m_pGrid->ConstructL( this, EAknListBoxSelectionGrid );	//第二阶段构造
	m_pGrid->SetEmptyGridTextL(_L("empty"));	//设置Grid默认文本:当Grid的Text未设置时,显示默认字符串
	
	// set layout.
	m_pGrid->SetRect(aRect.Size());	//设置Grid的矩形显示区域
	
	// set initial params for the grid.
	
	m_pGridType = EAknExGridSelectionGrid;	//设置Grid的类型
	
	//Sets the orientation of the grid,either vertical or horizontal.
	iVerticalOrientation	= EFalse;	//排列方向:垂直方向为假,则是水平方向
	iTopToBottom			= ETrue;	//排列方式:从上倒下为真
	iLeftToRight			= ETrue;	//排列顺序:从左到有为真
	//the size of the primary dimension of the grid. 
	iNumOfColumns			= 3;	//列数
	iNumOfRows				= 3;	//行数
	iNumOfItems				= 9;	//项的总个数
	//the ordering of the data.
	iContentType			= EContainGraphic;	//内容类型:包含图片
	
	iVerticalScrollingType = CAknGridView::EScrollIncrementLineAndLoops;
	iHorizontalScrollingType = CAknGridView::EScrollIncrementLineAndLoops;
	iSizeOfItems.iWidth = ( aRect.iBr.iX - aRect.iTl.iX ) / iNumOfColumns;
	iSizeOfItems.iHeight = ( aRect.iBr.iY - aRect.iTl.iY ) / iNumOfRows;
	
	//Sets the orientation of the grid, either vertical or horizontal, the ordering of the data and the size of the primary dimension of the grid.
	m_pGrid->SetLayoutL( iVerticalOrientation, iLeftToRight, iTopToBottom, 
		iNumOfColumns, iNumOfRows, iSizeOfItems );
	
	//设置水平移动方向:当焦点水平移动到最右边时,是否自动移动到最左边
	m_pGrid->SetPrimaryScrollingType( iHorizontalScrollingType );
	
	//设置垂直移动方向:当焦点垂直移动到最下方时,是否自动移动到最上边
	m_pGrid->SetSecondaryScrollingType( iVerticalScrollingType );	
	
	//load data 
	LoadGraphicsL();
	AddDataL();
	iInstantsCreated = ETrue;
	
	// activate the grid
	m_pGrid->SetCurrentDataIndex(0);	//设置当前光标焦点位置
	m_pGrid->MakeVisible( ETrue );	//设置可见性
	m_pGrid->SetFocus( ETrue );	//设置焦点
	m_pGrid->ActivateL();	//激活Grid
	m_pGrid->DrawNow();	//画Grid
	//---end-for-Grid-------------------------

    SetRect( aRect );
    ActivateL();
}

// destructor
CGridContainer::~CGridContainer()
{
	// 	for (TInt i=0; i<m_Array.Count();i++)
	// 	{
	// 		MEM_FREE(m_Array[i]);
	// 	}
	// 	m_Array.Reset();
	MEMORY_FREE(m_pGrid);
}

void CGridContainer::SizeChanged()
{
}

// ---------------------------------------------------------
// CGridContainer::CountComponentControls() const
// return the number of controls
// ---------------------------------------------------------
//
TInt CGridContainer::CountComponentControls() const
{
	// return number of controls inside this container
	return 1; 
}

// ---------------------------------------------------------
// CGridContainer::ComponentControl(TInt aIndex) const
// return the pointer to specified control.
// ---------------------------------------------------------
//
CCoeControl* CGridContainer::ComponentControl( TInt /*aIndex*/ ) const
{
//	return NULL;
	return m_pGrid;
}

// ---------------------------------------------------------
// CGridContainer::Draw(const TRect& aRect) const
// handle the message when client region must be redrawn.
// ---------------------------------------------------------
//
void CGridContainer::Draw( const TRect& aRect) const
{
	CWindowGc& gc = SystemGc();
	gc.SetPenStyle(CGraphicsContext::ENullPen);
    gc.SetBrushColor(KRgbWhite);
    gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
    gc.DrawRect(aRect);
	gc.SetPenStyle(CGraphicsContext::ESolidPen);
	gc.SetPenColor(KRgbGray);
// 	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
// 	gc.SetBrushColor(KRgbWhite);
// 	gc.DrawRect(Rect());
// 
// 
// 	TRect aRect;
// 	aRect.SetRect(1+iX*58,1+iY*46,58+iX*58,50+iY*46);  
// 	gc.SetBrushColor(KRgbWhite);
// 	gc.DrawRect(aRect);
// 	
// 	TInt number = 0;
// 	TBuf<32> sBuf;
// 	for(TInt i=0; i<3; i++)
// 	{
// 		for(TInt j=0; j<3; j++)
// 		{
// 			aRect.SetRect(10+58*j,2+48*i,48+58*j,36+48*i);
// 			gc.DrawBitmap(aRect, m_Array[number]);
// 
// 			//添加文字
// 			const CFont* iFontTemp = iEikonEnv->LegendFont();
// 			gc.UseFont(iFontTemp);
// 			switch(number)
// 			{
// 			case 0:
// 				{				
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_EDIT);
// 					gc.DrawText(sBuf, TPoint(12+58*j,48+48*i));		
// 					break;
// 				}
// 			case 1:
// 				{
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_MESSAGE);	
// 					gc.DrawText(sBuf, TPoint(18+58*j,48+48*i));			
// 					break;
// 				}
// 			case 2:
// 				{					
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_BOOK);	
// 					gc.DrawText(sBuf, TPoint(12+58*j,48+48*i));			
// 					break;
// 				}
// 			case 3:
// 				{				
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_MOBILE);	
// 					gc.DrawText(sBuf, TPoint(13+58*j,45+48*i));				
// 					break;
// 				}
// 			case 4:
// 				{				
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_FAVOR);	
// 					gc.DrawText(sBuf, TPoint(13+58*j,45+48*i));				
// 					break;
// 				}
// 			case 5:
// 				{				
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_TOOLS);	
// 					gc.DrawText(sBuf, TPoint(13+58*j,45+48*i));				
// 					break;
// 				}
// 			case 6:
// 				{				
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_USER);	
// 					gc.DrawText(sBuf, TPoint(13+58*j,45+48*i));				
// 					break;
// 				}
// 			case 7:
// 				{				
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_SET);	
// 					gc.DrawText(sBuf, TPoint(13+58*j,45+48*i));				
// 					break;
// 				}
// 			case 8:
// 				{					
// 					CEikonEnv::Static()->ReadResource(sBuf, R_QTN_ASSISTANT_WEB);	
// 					gc.DrawText(sBuf, TPoint(7+58*j,45+48*i));
// 					break;			
// 				}
// 				
// 			}
// 			if(number < 8)
// 			{
// 				number++;
// 			}
// 		}
// 	}

}

// ---------------------------------------------------------
// CAknExGridContainer::OfferKeyEventL(
//           const TKeyEvent& aKeyEvent, TEventCode aType )
// Handles the key events.
// ---------------------------------------------------------
//
TKeyResponse CGridContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType )
{
/*	if(aKeyEvent.iCode == EKeyDownArrow && aType == EEventKey)
	{
		
		if(iY != 2)
		{
			iY += 1;
		}
		else if(iX == 0 && iY == 2 || iX == 1)
		{
			iY = 0;
			iX += 1;
		}
		else
		{
			iY = 0;
			iX = 0;
		}
		DrawNow();
		return EKeyWasConsumed;
	}
	else if(aKeyEvent.iCode == EKeyUpArrow && aType == EEventKey)
	{
		if(iY != 0)
		{
			iY -= 1;
		}
		else if(iY == 0 && iX == 1 || iX == 2)
		{
			iY = 2;
			iX -= 1;
		}
		else
		{
			iY = 2;
			iX = 2;
		}
		DrawNow();
		return EKeyWasConsumed;
	}
	else if(aKeyEvent.iCode == EKeyLeftArrow && aType == EEventKey)
	{
		if(iX != 0)
		{
			iX -= 1;
		}
		else if(iX == 0 && iY == 1 || iY == 2)
		{
			iY-=1;
			iX = 2;
		}
		else
		{
			iY =2;
			iX =2;
		}
		DrawNow();
		return EKeyWasConsumed;
	}
	else if(aKeyEvent.iCode == EKeyRightArrow && aType == EEventKey)
	{
		if(iX != 2)
		{
			iX += 1;
		}
		else if(iX == 2 && iY == 0 || iY ==1)
		{
			iY+=1;
			iX = 0;
		}
		else
		{
			iY=0;
			iX=0;
		}
		DrawNow();
		return EKeyWasConsumed;
	}
	else if(aKeyEvent.iCode == 0XF845 && aType == EEventKey)
	{
		m_pView->HandleCommandL(EAssistantOpen);
		return EKeyWasConsumed;
	}
return EKeyWasConsumed;*/
	if(NULL != m_pGrid)
	{
		return m_pGrid->OfferKeyEventL(aKeyEvent, aType);
	}
	else
	{
		return EKeyWasNotConsumed;
	}
	
	return EKeyWasNotConsumed;
}



TInt CGridContainer::GetIndex( )
{
	return  m_pGrid->CurrentItemIndex();
//	return (iY*3+iX);
}

void CGridContainer::LoadGraphicsL()
{
	CAssistantAppUi* pApp = (CAssistantAppUi*)CEikonEnv::Static()->AppUi();

    CArrayPtr< CGulIcon >* icons = new(ELeave) CAknIconArray(iNumOfItems);
    CleanupStack::PushL( icons );

    // Create icon bitmap and mask.
    if ( m_pGridType == EAknExGridSelectionGrid )
	{
		icons->AppendL(pApp->LoadGraphicsL(0));
		icons->AppendL(pApp->LoadGraphicsL(1));
		icons->AppendL(pApp->LoadGraphicsL(2));
		icons->AppendL(pApp->LoadGraphicsL(3));
		icons->AppendL(pApp->LoadGraphicsL(4));
		icons->AppendL(pApp->LoadGraphicsL(5));
		icons->AppendL(pApp->LoadGraphicsL(6));
		icons->AppendL(pApp->LoadGraphicsL(7));
		icons->AppendL(pApp->LoadGraphicsL(8));
	}

    // Set icon array.
    m_pGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );
    CleanupStack::Pop(); // icons array
}

//Set Data for the Grid.
void CGridContainer::AddDataL()
{
    MDesCArray* array = m_pGrid->Model()->ItemTextArray();
    CDesCArray* cArray = ( CDesCArray* )array;

	TBuf<32> sBuf;
//SMS
	sBuf.Copy(_L("0\t"));
	TBuf<32> sTmpTitle0;
	CEikonEnv::Static()->ReadResource(sTmpTitle0, R_QTN_RB_GRID_ICON_1);
	sBuf.Append(sTmpTitle0);
	cArray->AppendL(sBuf);
//PHB
	sBuf.Copy(_L("1\t"));
	TBuf<32> sTmpTitle1;
	CEikonEnv::Static()->ReadResource(sTmpTitle1, R_QTN_RB_GRID_ICON_2);
	sBuf.Append(sTmpTitle1);
	cArray->AppendL(sBuf);
//Account
	sBuf.Copy(_L("2\t"));
	TBuf<32> sTmpTitle2;
	CEikonEnv::Static()->ReadResource(sTmpTitle2, R_QTN_RB_GRID_ICON_3);
	sBuf.Append(sTmpTitle2);
	cArray->AppendL(sBuf);
//SMS
	sBuf.Copy(_L("3\t"));
	TBuf<32> sTmpTitle3;
	CEikonEnv::Static()->ReadResource(sTmpTitle3, R_QTN_RB_GRID_ICON_4);
	sBuf.Append(sTmpTitle3);
	cArray->AppendL(sBuf);
//PHB
	sBuf.Copy(_L("4\t"));
	TBuf<32> sTmpTitle4;
	CEikonEnv::Static()->ReadResource(sTmpTitle4, R_QTN_RB_GRID_ICON_5);
	sBuf.Append(sTmpTitle4);
	cArray->AppendL(sBuf);
//Account
	sBuf.Copy(_L("5\t"));
	TBuf<32> sTmpTitle5;
	CEikonEnv::Static()->ReadResource(sTmpTitle5, R_QTN_RB_GRID_ICON_6);
	sBuf.Append(sTmpTitle5);
	cArray->AppendL(sBuf);
//SMS
	sBuf.Copy(_L("6\t"));
	TBuf<32> sTmpTitle6;
	CEikonEnv::Static()->ReadResource(sTmpTitle6, R_QTN_RB_GRID_ICON_7);
	sBuf.Append(sTmpTitle6);
	cArray->AppendL(sBuf);
//PHB
	sBuf.Copy(_L("7\t"));
	TBuf<32> sTmpTitle7;
	CEikonEnv::Static()->ReadResource(sTmpTitle7, R_QTN_RB_GRID_ICON_8);
	sBuf.Append(sTmpTitle7);
	cArray->AppendL(sBuf);
//Account
	sBuf.Copy(_L("8\t"));
	TBuf<32> sTmpTitle8;
	CEikonEnv::Static()->ReadResource(sTmpTitle8, R_QTN_RB_GRID_ICON_9);
	sBuf.Append(sTmpTitle8);
	cArray->AppendL(sBuf);

	//const CFont* fontText = ApacPlain12();
    m_pGrid->HandleItemAdditionL();
    ApplySelGridGraphicStyleL();
}

void CGridContainer::ApplySelGridGraphicStyleL()
{
    if (!m_pGrid) 
	{
        return;
	}
	
	//Setup text foreground and background colours to default
    AknListBoxLayouts::SetupStandardGrid( *m_pGrid );
	
	//获取中文字体
	const CFont* fontText = ApacPlain12();
	//
	TInt nX = (m_pGrid->ColumnWidth() - 24) / 2;
	TInt nY = (m_pGrid->ItemHeight() - 24 - fontText->HeightInPixels()) / 2;
	
	//Setup a single graphics cell of list item.
    AknListBoxLayouts::SetupFormGfxCell( 
		*m_pGrid, 
		m_pGrid->ItemDrawer(),
		0, 
		nX, 
		nY, 
		0, 
		0,  
		24, 
		24, 
		TPoint( nX, nY ), 
		TPoint( 24+nX, 24+nY) );
	
	//Setup a single text cell of list item.
	// layout of text.
	//This has flicker for settings.
// 	AknListBoxLayouts::SetupFormTextCell( 
// 		*m_pGrid, 
// 		m_pGrid->ItemDrawer(),
// 		1, 
// 		fontText, 
// 		215, 
// 		0, 
// 		0, 
// 		24+nY+fontText->HeightInPixels(),
// 		m_pGrid->ColumnWidth(), 
// 		CGraphicsContext::ECenter,
// 		TPoint( 0, 24+nY), 
// 		TPoint( m_pGrid->ColumnWidth(), m_pGrid->ItemHeight()) );

	//This is for removing flicker for settings.
	AknListBoxLayouts::SetupFormAntiFlickerTextCell( 
		*m_pGrid, 
		m_pGrid->ItemDrawer(),
		1, 
		fontText, 
		215, 
		0, 
		0, 
		24+nY+fontText->HeightInPixels(),
		m_pGrid->ColumnWidth(), 
		CGraphicsContext::ECenter,
		TPoint( 0, 24+nY), 
		TPoint( m_pGrid->ColumnWidth(), m_pGrid->ItemHeight()) );

    DrawNow();
}
// End of File  

⌨️ 快捷键说明

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