📄 gridcontainer.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 + -