diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrgui/mrfieldbuildercommon/src/cmrgrid.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/mrfieldbuildercommon/src/cmrgrid.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -0,0 +1,323 @@ +/* +* Copyright (c) 2009 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: MR grid impl. +* +*/ + +#include "cmrgrid.h" + +#include "nmrbitmapmanager.h" +#include "nmrlayoutmanager.h" +#include "esmrhelper.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// DEBUG +#include "emailtrace.h" + +namespace { // codescanner::namespace + +//CONSTANTS +const TInt KColumns( 3 ); +const TInt KRows( 2 ); + +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMRGrid::CMRGrid() +// --------------------------------------------------------------------------- +// +CMRGrid::CMRGrid() + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// CMRGrid::NewL +// --------------------------------------------------------------------------- +// +TBool CMRGrid::ExecuteL( TInt& aSelectedOption ) + { + FUNC_LOG; + + CMRGrid* self = new( ELeave )CMRGrid(); + CleanupStack::PushL ( self ); + TBool ret = self->ShowGridL( aSelectedOption ); + CleanupStack::PopAndDestroy( self ); + + return ret; + } + +// --------------------------------------------------------------------------- +// CMRGrid::~CMRGrid +// --------------------------------------------------------------------------- +// +CMRGrid::~CMRGrid( ) + { + FUNC_LOG; + delete iGrid; + } + +// --------------------------------------------------------------------------- +// CMRGrid::AddGridIconsL +// --------------------------------------------------------------------------- +// +void CMRGrid::AddGridIconsL() + { + FUNC_LOG; + + CArrayPtr* iconArray = new( ELeave ) CAknIconArray( 1 ); + CleanupStack::PushL( iconArray ); + + /* + * 1. Item: Image + */ + CFbsBitmap* imageBitmap = NULL; + CFbsBitmap* imageBitmapMask = NULL; + GetSkinBasedBitmapLC( NMRBitmapManager::EMRBitmapAttachmentTypeImage, + imageBitmap, + imageBitmapMask, + TSize( 100, 100 ) ); + + CGulIcon* imageIcon = CGulIcon::NewL( imageBitmap, imageBitmapMask ); + CleanupStack::Pop( 2 ); // imageBitmap, imageBitmapMask + CleanupStack::PushL( imageIcon ); + iconArray->AppendL( imageIcon ); + CleanupStack::Pop( imageIcon ); + + /* + * 2. Item: Video clip + */ + CFbsBitmap* videoClipBitmap = NULL; + CFbsBitmap* videoClipBitmapMask = NULL; + GetSkinBasedBitmapLC( NMRBitmapManager::EMRBitmapAttachmentTypeVideo, + videoClipBitmap, + videoClipBitmapMask, + TSize( 100, 100 ) ); + + CGulIcon* videoClipIcon = CGulIcon::NewL( videoClipBitmap, videoClipBitmapMask ); + CleanupStack::Pop( 2 ); // videoClipBitmap, videoClipBitmapMask + CleanupStack::PushL( videoClipIcon ); + iconArray->AppendL( videoClipIcon ); + CleanupStack::Pop( videoClipIcon ); + + /* + * 3. Item: Sound clip + */ + CFbsBitmap* soundClipBitmap = NULL; + CFbsBitmap* soundClipBitmapMask = NULL; + GetSkinBasedBitmapLC( NMRBitmapManager::EMRBitmapAttachmentTypeMusic, + soundClipBitmap, + soundClipBitmapMask, + TSize( 100, 100 ) ); + + CGulIcon* soundClipIcon = CGulIcon::NewL( soundClipBitmap, soundClipBitmapMask ); + CleanupStack::Pop( 2 ); // soundClipBitmap, soundClipBitmapMask + CleanupStack::PushL( soundClipIcon ); + iconArray->AppendL( soundClipIcon ); + CleanupStack::Pop( soundClipIcon ); + + /* + * 4. Item: Note + */ + CFbsBitmap* noteBitmap = NULL; + CFbsBitmap* noteBitmapMask = NULL; + GetSkinBasedBitmapLC( NMRBitmapManager::EMRBitmapAttachmentTypeNote, + noteBitmap, + noteBitmapMask, + TSize( 100, 100 ) ); + + CGulIcon* noteIcon = CGulIcon::NewL( noteBitmap, noteBitmapMask ); + CleanupStack::Pop( 2 ); // noteBitmap, noteBitmapMask + CleanupStack::PushL( noteIcon ); + iconArray->AppendL( noteIcon ); + CleanupStack::Pop( noteIcon ); + + /* + * 5. Item: Other + */ + CFbsBitmap* otherBitmap = NULL; + CFbsBitmap* otherBitmapMask = NULL; + GetSkinBasedBitmapLC( NMRBitmapManager::EMRBitmapAttachmentTypeOther, + otherBitmap, + otherBitmapMask, + TSize( 100, 100 ) ); + + CGulIcon* otherIcon = CGulIcon::NewL( otherBitmap, otherBitmapMask ); + CleanupStack::Pop( 2 ); // otherBitmap, otherBitmapMask + CleanupStack::PushL( otherIcon ); + iconArray->AppendL( otherIcon ); + CleanupStack::Pop( otherIcon ); + + iGrid->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); + + CleanupStack::Pop( iconArray ); + iGrid->HandleItemAdditionL(); + } + +// --------------------------------------------------------------------------- +// CMRGrid::ShowGridL +// --------------------------------------------------------------------------- +// +TBool CMRGrid::ShowGridL( TInt& aSelectedOption ) + { + FUNC_LOG; + TRect mainPaneRect( 0, 0, 0, 0 ); + AknLayoutUtils::LayoutMetricsRect( + AknLayoutUtils::EMainPane, mainPaneRect ); + + TAknLayoutRect gridLayoutRect = + NMRLayoutManager::GetLayoutRect( + mainPaneRect, + NMRLayoutManager::EMRLayoutAttachmentSelectionGrid ); + + TRect gridRect( gridLayoutRect.Rect() ); + + TAknLayoutRect cellLayoutRect = + NMRLayoutManager::GetLayoutRect( + gridRect, + NMRLayoutManager::EMRLayoutAttachmentSelectionGridCell ); + + TRect cellRect( cellLayoutRect.Rect() ); + cellRect.Move( -gridRect.iTl); + + iGrid = new( ELeave ) CAknGrid; + CAknPopupList* gridList = CAknPopupList::NewL( + iGrid, R_AVKON_SOFTKEYS_SELECT_BACK ); + CleanupStack::PushL( gridList ); + + // Load query heading + HBufC* buf( StringLoader::LoadLC( + R_QTN_MEET_REQ_QUERY_HEADING_SELECT_ATTACHMENT_TYPE ) ); + gridList->SetTitleL( *buf ); + CleanupStack::PopAndDestroy( buf ); + + iGrid->ConstructL( gridList, EAknListBoxMenuGrid ); + iGrid->SetLayoutL( + EFalse, ETrue, ETrue, KColumns, KRows, cellRect.Size() ); + iGrid->SetPrimaryScrollingType( + CAknGridView::EScrollIncrementLineAndLoops ); + iGrid->SetSecondaryScrollingType( + CAknGridView::EScrollIncrementLineAndLoops ); + + iGrid->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EOff ); + + CDesCArray *gridItemArray = static_cast( + iGrid->Model()->ItemTextArray() ); + + // The order of the items should be in line with + // CMRAttachmentUi::ResolveAttachmentTypeL switch case items. + // TODO: update texts to be read from resource + HBufC* textImage = StringLoader::LoadLC( + R_QTN_MEET_REQ_ATTACHMENT_TYPE_IMAGE ); + gridItemArray->AppendL( _L("0\tImage") /*textImage*/ ); + CleanupStack::PopAndDestroy( textImage ); + + HBufC* textVideo = StringLoader::LoadLC( + R_QTN_MEET_REQ_ATTACHMENT_TYPE_VIDEO ); + gridItemArray->AppendL( _L("1\tVideo clip") /*textVideo*/ ); + CleanupStack::PopAndDestroy( textVideo ); + + HBufC* textSound = StringLoader::LoadLC( + R_QTN_MEET_REQ_ATTACHMENT_TYPE_SOUNDCLIP ); + gridItemArray->AppendL( _L("2\tSound clip") /*textSound*/ ); + CleanupStack::PopAndDestroy( textSound ); + + HBufC* textNote = StringLoader::LoadLC( + R_QTN_MEET_REQ_ATTACHMENT_TYPE_NOTE ); + gridItemArray->AppendL( _L("3\tNote") /*textNote*/ ); + CleanupStack::PopAndDestroy( textNote ); + + HBufC* textOther = StringLoader::LoadLC( + R_QTN_MEET_REQ_ATTACHMENT_TYPE_NOTE ); + gridItemArray->AppendL( _L("4\tOther") /*textOther*/ ); + CleanupStack::PopAndDestroy( textOther ); + + iGrid->HandleItemAdditionL(); + + AddGridIconsL(); + + TAknLayoutRect graphicLayoutRect = + NMRLayoutManager::GetLayoutRect( + cellRect, + NMRLayoutManager:: + EMRLayoutAttachmentSelectionGridCellGraphic ); + + TRect graphicRect( graphicLayoutRect.Rect() ); + + // Setup grid graphics + AknListBoxLayouts::SetupFormGfxCell( + *iGrid, iGrid->ItemDrawer(), + 0 /*Column index*/, + graphicRect.iTl.iX /*Left pos*/, + graphicRect.iTl.iY /*Top pos*/, + 0 /*unused*/, + 0 /*unused*/, + graphicRect.Width() /*Icon width*/, + graphicRect.Height() /*Icon height*/, + graphicRect.iTl /*Start pos*/, + graphicRect.iBr /*End pos*/ ); + + TAknLayoutText gridTextLayout( + NMRLayoutManager::GetLayoutText( + cellRect, + NMRLayoutManager:: + EMRTextLayoutAttachmentSelectionGridCellText ) ); + + TRect textRect( gridTextLayout.TextRect() ); + + // Calculate the text baseline + TInt baseLine( cellRect.iBr.iY - ( cellRect.iBr.iY - textRect.iBr.iY ) ); + // Reduce font's descent -> Baseline calculated + baseLine -= gridTextLayout.Font()->DescentInPixels(); + + // Setup grid texts + AknListBoxLayouts::SetupFormTextCell( + *iGrid, iGrid->ItemDrawer(), + 1 /*Column index*/, + gridTextLayout.Font() /*Font type*/, + gridTextLayout.Color().Value() /*color*/, + 0 /*Left margin*/, + 0 /*unused*/, + baseLine/*Baseline*/, + 0 /*Text width*/, + gridTextLayout.Align() /*Text alignment*/, + textRect.iTl /*Start pos*/, + textRect.iBr /*End pos*/); + + TBool popupOk = gridList->ExecuteLD(); + aSelectedOption = iGrid->CurrentDataIndex(); + CleanupStack::Pop( gridList ); + + return popupOk; + } + +//EOF