diff -r 6205fd287e8a -r 1abc632eb502 menufw/menufwui/mmwidgets/src/mmgridview.cpp --- a/menufw/menufwui/mmwidgets/src/mmgridview.cpp Thu Mar 18 14:45:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,314 +0,0 @@ -/* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#include - -#include "mmgridview.h" -#include "mmgrid.h" -#include "mmlistboxitemdrawer.h" -#ifdef RD_UI_TRANSITION_EFFECTS_LIST -#include -#include -#endif - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMmGridView::CMmGridView() : - iLastCurMove( ECursorFirstItem ), iOldIndex( KErrNotFound ) - { - // No implementation required - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMmGridView::~CMmGridView() - { - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMmGridView* CMmGridView::NewLC() - { - CMmGridView* self = new (ELeave)CMmGridView(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CMmGridView* CMmGridView::NewL() - { - CMmGridView* self = CMmGridView::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMmGridView::ConstructL() - { - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TPoint CMmGridView::ItemPos( TInt aItemIndex ) const - { - if ( aItemIndex < 0 ) - { - // let avkon handle the insane cases - return CAknGridView::ItemPos( aItemIndex ); - } - - if ( AknLayoutUtils::LayoutMirrored() ) - { - const TInt colNum = NumberOfColsInView(); - TInt itemCol = aItemIndex % colNum; - TInt mirroredItemCol = colNum - itemCol - 1; - aItemIndex = aItemIndex - itemCol + mirroredItemCol; - } - - // return CAknGridView::ItemPos( aItemIndex ); - return CorrectItemPos( aItemIndex ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TPoint CMmGridView::CorrectItemPos( TInt aItemIndex ) const - { - // it the assertion below fails, review this implementation to make sure that - // primary vertical case is handled correctly - ASSERT( !IsPrimaryVertical() ); - - ASSERT( aItemIndex >= 0 ); - const TInt colNum = NumberOfColsInView(); - TInt itemRow = aItemIndex / colNum; - TInt itemCol = aItemIndex % colNum; - - TInt topItemRow = TopItemIndex() / colNum; -// __ASSERT_DEBUG( TopItemIndex() % colNum == 0, User::Invariant() ); - - // it is safe to assume that size between items is (0, 0) because we - // explicitly set such value in CMmGrid::DoSetupLayoutL - const TSize sizeBetweenItems( 0, 0 ); - - TPoint itemPos( - iViewRect.iTl.iX + itemCol * - ( ColumnWidth() + sizeBetweenItems.iWidth ), - iViewRect.iTl.iY + (itemRow - topItemRow) * - ( iItemHeight + sizeBetweenItems.iHeight ) + iVerticalOffset ); - - return itemPos; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TBool CMmGridView::XYPosToItemIndex( TPoint aPosition, TInt& aItemIndex ) const - { - if ( AknLayoutUtils::LayoutMirrored() ) - { - aPosition.iX = iViewRect.Width() - ( aPosition.iX - iViewRect.iTl.iX ); - } - return CAknGridView::XYPosToItemIndex( aPosition, aItemIndex ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -CWindowGc* CMmGridView::Gc() - { - return iGc; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMmGridView::MoveCursorL( TCursorMovement aCursorMovement, - TSelectionMode aSelectionMode ) - { -#ifdef RD_UI_TRANSITION_EFFECTS_LIST - iLastCurMove = aCursorMovement; - iOldIndex = iCurrentItemIndex; -#endif // RD_UI_TRANSITION_EFFECTS_LIST - - CAknGridView::MoveCursorL( aCursorMovement, aSelectionMode ); - -#ifdef RD_UI_TRANSITION_EFFECTS_LIST - iLastCurMove = ECursorFirstItem; - iOldIndex = KErrNotFound; -#endif // RD_UI_TRANSITION_EFFECTS_LIST - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMmGridView::UpdateSelectionL( TSelectionMode aSelectionMode ) - { -#ifdef RD_UI_TRANSITION_EFFECTS_LIST - if ( AknLayoutUtils::LayoutMirrored() ) - { - MAknListBoxTfxInternal* api = CAknListLoader::TfxApiInternal( Gc() ); - TInt row( 0 ); - TInt col( 0 ); - TInt newRow( 0 ); - TInt newCol( 0 ); - LogicalPosFromListBoxIndex( iOldIndex, row, col ); - LogicalPosFromListBoxIndex( iCurrentItemIndex, newRow, newCol ); - if ( api ) - { - if ( iLastCurMove == CAknGridView::ECursorNextColumn ) - { - if ( newCol < col || newRow != row ) - api->SetMoveType( MAknListBoxTfxInternal::EListNoMovement ); - } - else if ( iLastCurMove == CAknGridView::ECursorPreviousColumn ) - { - if ( newCol > col || newRow != row ) - api->SetMoveType( MAknListBoxTfxInternal::EListNoMovement ); - } - } - } -#endif // RD_UI_TRANSITION_EFFECTS_LIST - - CAknGridView::UpdateSelectionL( aSelectionMode ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMmGridView::Draw(const TRect* aClipRect) const - { - const_cast( this )->UpdateItemHeightAndWidth(); - DoDraw( aClipRect ); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMmGridView::DoDraw(const TRect* aClipRect) const - { - CMmListBoxItemDrawer* itemDrawer = static_cast< CMmListBoxItemDrawer*> ( ItemDrawer() ); - TBool drawingInitiated(EFalse); - if ( CAknEnv::Static()->TransparencyEnabled() && - iWin && iWin->GetDrawRect() == TRect::EUninitialized ) - { - TRect a; - if (!aClipRect || *aClipRect == TRect(0,0,0,0) ) - { - a = ViewRect(); - aClipRect = &a; - } - - drawingInitiated=ETrue; - iWin->Invalidate( *aClipRect ); - iWin->BeginRedraw( *aClipRect ); - } - CAknGridView::Draw( aClipRect ); - - if ( aClipRect ) - { - TRect rect(*aClipRect); - TInt lastItemInView = (iModel->NumberOfItems() <= BottomItemIndex() ) - ? iModel->NumberOfItems()-1 : BottomItemIndex(); - rect.iTl.iY = ItemPos( lastItemInView ).iY + ItemSize( lastItemInView ).iHeight; -// iGc->SetClippingRect( rect ); -// removed to prevent non-redraw drawing. Was present to prevent out of view drawing when effects are on. -// could be removed because effects were disabled at some point in edit mode to enhance performance. - itemDrawer->DrawFloatingItems( rect ); -// iGc->CancelClippingRect(); - } - -// if (aClipRect) -// { -// const_cast< CMmGridView* >(this)->Gc()->DrawRect(*aClipRect); -// } - - if ( CAknEnv::Static()->TransparencyEnabled() && - iWin && drawingInitiated ) - { - drawingInitiated = EFalse; - iWin->EndRedraw( ); - } - - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt CMmGridView::VerticalItemOffset() const - { - return iVerticalOffset; - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMmGridView::SetItemHeight(TInt aItemHeight) - { - // we need to update the iItemHeight member in grid also (there are two different item height value holders - in grid and here in grid view) - CMmListBoxItemDrawer* itemDrawer = - STATIC_CAST( CMmListBoxItemDrawer*, ItemDrawer() ); - static_cast(itemDrawer->Widget())->SetItemHeight( aItemHeight ); - - CAknGridView::SetItemHeight(aItemHeight); - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void CMmGridView::UpdateItemHeightAndWidth() - { - if ( iModel && iModel->NumberOfItems() ) - { - CMmListBoxItemDrawer* itemDrawer = - STATIC_CAST( CMmListBoxItemDrawer*, ItemDrawer() ); - TSize size = itemDrawer->GetItemSize( 0, EFalse ); - if ( itemDrawer->ItemCellSize() != size ) - { - const_cast( this )->SetItemHeight( size.iHeight ); - const_cast( this )->SetColumnWidth( size.iWidth ); - } - } - } - -//End of file