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

📄 aknexgridcontainerasmenu.cpp

📁 symbian 格子的生成和使用源代码 让你明白九宫格生成原理 适合游戏开发
💻 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 + -