📄 aknexgridcontainerasmenu.cpp
字号:
/* Copyright (c) 2004, Nokia. All rights reserved */
// INCLUDE FILES
#include <AknGrid.h>
#include <akntitle.h>
#include <AknQueryDialog.h>
#include <AknExGrid.rsg> // Dialog
#include "AknExGridContainerAsMenu.h"
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CAknExGridContainerAsMenu* CAknExGridContainerAsMenu::NewL(
const TRect& aRect )
{
CAknExGridContainerAsMenu* self = NewLC( aRect );
CleanupStack::Pop( self );
return self;
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CAknExGridContainerAsMenu* CAknExGridContainerAsMenu::NewLC(
const TRect& aRect )
{
CAknExGridContainerAsMenu* self =
new ( ELeave ) CAknExGridContainerAsMenu();
CleanupStack::PushL( self );
self->ConstructL( aRect );
return self;
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::CAknExGridContainerAsMenu()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CAknExGridContainerAsMenu::CAknExGridContainerAsMenu()
: iLabel( NULL ), iToDoLabel( NULL )
{
// No implementation required
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsGMS::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CAknExGridContainerAsMenu::ConstructL( const TRect& aRect )
{
CreateWindowL();
// Create labels
TBuf< KLengthOfLabelString > label;
iLabel = new ( ELeave ) CEikLabel;
iLabel->SetContainerWindowL( *this );
iCoeEnv->ReadResource( label, R_EXGR_LABEL_VIEW_AS_MENU );
iLabel->SetTextL( label );
TBuf< KLengthOfToDoLabelString > dolabel;
iToDoLabel = new ( ELeave ) CEikLabel;
iToDoLabel->SetContainerWindowL( *this );
iCoeEnv->ReadResource( dolabel, R_EXGR_DOLABEL_VIEW_AS_MENU );
iToDoLabel->SetTextL( dolabel );
iTestNumber = 0;
// Read and set title
iTitles = iCoeEnv->ReadDesCArrayResourceL( R_EXGR_TITLE_MENU );
CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
CAknTitlePane* titlePane = static_cast<CAknTitlePane*>
( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
titlePane->SetTextL( ( *iTitles )[EMenuTest1] );
// Set initial parameters for the grid
iVerticalOrientation = EFalse;
iTopToBottom = ETrue;
iLeftToRight = ETrue;
iNumOfColumns = KNumOfColumnsInMenu;
iNumOfRows = KNumOfRowsInMenu;
iNumOfItems = KInitialNumOfItemsInMenu;
iContentType = EContainGraphic;
iVerticalScrollingType = CAknGridView::EScrollIncrementLineAndLoops;
iHorizontalScrollingType = CAknGridView::EScrollIncrementLineAndLoops;
SetRect( aRect );
ActivateL();
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::~CAknExGridContainerAsMenu()
// Destructor.
// -----------------------------------------------------------------------------
//
CAknExGridContainerAsMenu::~CAknExGridContainerAsMenu()
{
delete iLabel;
delete iToDoLabel;
delete iTitles;
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::ShowGridInMenuL()
// Creates a grid in the menu and shows it.
// -----------------------------------------------------------------------------
//
void CAknExGridContainerAsMenu::ShowGridInMenuL()
{
iGrid = new ( ELeave ) CAknGrid;
CAknPopupList* popupList = CAknPopupList::NewL( iGrid,
R_AVKON_SOFTKEYS_SELECT_BACK );
CleanupStack::PushL( popupList );
iGrid->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
// Adjust the size of cells to the number of columns.
iSizeOfItems.iWidth = KMenuGridViewWidth / iNumOfColumns;
iSizeOfItems.iHeight = KMenuGridViewHeight / iNumOfRows;
SetGridLayoutL();
CreateGridResourceL();
// Add title
TBuf< KLengthOfTitle > title;
iCoeEnv->ReadResource( title, R_EXGR_TEXT_MENUGRID_TITLE );
popupList->SetTitleL( title );
TInt popupOk = popupList->ExecuteLD();
CleanupStack::Pop(); // popupList
if ( popupOk )
{
CheckIndex();
}
delete iGrid;
iGrid = NULL;
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::SizeChanged()
// Called by framework when the view size is changed.
// -----------------------------------------------------------------------------
//
void CAknExGridContainerAsMenu::SizeChanged()
{
iLabel->SetExtent( TPoint( KMainLabelX,KMainLabelY ),
iLabel->MinimumSize() );
iToDoLabel->SetExtent( TPoint( KToDoLabelX,KToDoLabelY ),
iToDoLabel->MinimumSize() );
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::CountComponentControls()
// Returns the number of components owned by this container.
// -----------------------------------------------------------------------------
//
TInt CAknExGridContainerAsMenu::CountComponentControls() const
{
// return number of controls inside this container
return KNumberOfComponentMenu;
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::ComponentControl()
// Returns the pointer to the specified control.
// -----------------------------------------------------------------------------
//
CCoeControl* CAknExGridContainerAsMenu::ComponentControl( TInt aIndex ) const
{
switch ( aIndex )
{
case ELabel:
return iLabel;
case EDoLabel:
return iToDoLabel;
default:
return NULL;
}
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::Draw()
// Draws this container to the screen.
// -----------------------------------------------------------------------------
//
void CAknExGridContainerAsMenu::Draw( const TRect& aRect ) const
{
CWindowGc& gc = SystemGc();
gc.SetPenStyle( CGraphicsContext::ENullPen );
gc.SetBrushColor( KRgbDarkCyan );
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.DrawRect( aRect );
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::HandleControlEventL()
// Handles an event of type aEventType reported
// by the control aControl to this observer.
// -----------------------------------------------------------------------------
//
void CAknExGridContainerAsMenu::HandleControlEventL(
CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/ )
{
// No implementation required
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::DetermineChangeSizeL()
// Show a dialog to change size.
// -----------------------------------------------------------------------------
//
void CAknExGridContainerAsMenu::DetermineChangeSizeL()
{
TInt numberOfColumns = NumberOfColumns();
TInt numberOfRows = NumberOfRows();
CAknMultiLineDataQueryDialog* dlg =
CAknMultiLineDataQueryDialog::NewL( numberOfColumns, numberOfRows );
if( dlg->ExecuteLD( R_EXGR_DIALOG_CHANGE_SIZE ) == EAknSoftkeyOk )
{
SetNumberOfColumns( numberOfColumns );
SetNumberOfRows( numberOfRows );
iSizeOfItems.iWidth = KMenuGridViewWidth / iNumOfColumns;
iSizeOfItems.iHeight = KMenuGridViewHeight / iNumOfRows;
SetGridLayoutL();
// If item size changes, we need to alter the item style
ApplySelGridGraphicStyleL();
}
}
// -----------------------------------------------------------------------------
// CAknExGridContainerAsMenu::AutoTestL()
// Runs different tests.
// -----------------------------------------------------------------------------
//
TBool CAknExGridContainerAsMenu::AutoTestL()
{
CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
CAknTitlePane* titlePane = static_cast<CAknTitlePane*>
( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
iTestNumber++;
switch( iTestNumber )
{
case EMenuTest1:
titlePane->SetTextL( ( *iTitles )[EMenuTest1] );
break;
case EMenuTest2:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest2] );
TBuf< KLengthOfAboutString > aboutString;
iCoeEnv->ReadResource( aboutString, R_EXGR_TEXT_ABOUT_MENU );
iEikonEnv->AlertWin( aboutString );
break;
}
case EMenuTest3:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest3] );
ShowGridInMenuL();
break;
}
case EMenuTest4:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest4] );
SetNumberOfItems( 45 );
ShowGridInMenuL();
break;
}
case EMenuTest5:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest5] );
SetNumberOfItems( 2 );
ShowGridInMenuL();
break;
}
case EMenuTest6:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest6] );
SetNumberOfItems( 27 );
SetNumberOfColumns( 3 );
SetNumberOfRows( 3 );
iSizeOfItems.iWidth = KMenuGridViewWidth / iNumOfColumns;
iSizeOfItems.iHeight = KMenuGridViewHeight / iNumOfRows;
SetGridLayoutL();
ShowGridInMenuL();
break;
}
case EMenuTest7:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest7] );
SetNumberOfColumns( 9 );
SetNumberOfRows( 5 );
iSizeOfItems.iWidth = KMenuGridViewWidth / iNumOfColumns;
iSizeOfItems.iHeight = KMenuGridViewHeight / iNumOfRows;
SetGridLayoutL();
ShowGridInMenuL();
break;
}
case EMenuTest8:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest8] );
SetNumberOfColumns( 9 );
SetNumberOfRows( 3 );
iSizeOfItems.iWidth = KMenuGridViewWidth / iNumOfColumns;
iSizeOfItems.iHeight = KMenuGridViewHeight / iNumOfRows;
SetGridLayoutL();
ShowGridInMenuL();
break;
}
case EMenuTest9:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest9] );
SetNumberOfItems( 10 );
SetNumberOfColumns( 4 );
SetNumberOfRows( 3 );
iVerticalOrientation = ETrue;
iTopToBottom = EFalse;
iLeftToRight = EFalse;
SetGridLayoutL();
ShowGridInMenuL();
break;
}
case EMenuTest10:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest10] );
SetNumberOfItems( 27 );
SetNumberOfColumns( 9 );
SetNumberOfRows( 3 );
iVerticalOrientation = EFalse;
iTopToBottom = ETrue;
iLeftToRight = ETrue;
SetVerticalScrollingTypeL(
CAknGridView::EScrollIncrementLineAndLoops );
SetHorizontalScrollingTypeL(
CAknGridView::EScrollIncrementLineAndLoops );
ShowGridInMenuL();
break;
}
case EMenuTest11:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest11] );
SetVerticalScrollingTypeL(
CAknGridView::EScrollIncrementLineAndStops );
SetHorizontalScrollingTypeL(
CAknGridView::EScrollIncrementLineAndStops );
ShowGridInMenuL();
break;
}
case EMenuTest12:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest12] );
SetVerticalScrollingTypeL( CAknGridView::EScrollFollowsGrid );
SetHorizontalScrollingTypeL( CAknGridView::EScrollFollowsGrid );
ShowGridInMenuL();
break;
}
case EMenuTest13:
{
titlePane->SetTextL( ( *iTitles )[EMenuTest13] );
SetVerticalScrollingTypeL( CAknGridView::EScrollStops );
SetHorizontalScrollingTypeL( CAknGridView::EScrollStops );
ShowGridInMenuL();
break;
}
default:
return ETrue;
}
return EFalse;
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -