meetingrequest/mrgui/mrfieldbuildercommon/src/cmrgrid.cpp
branchRCL_3
changeset 33 da5135c61bad
child 24 b5fbb9b25d57
--- /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 <stringloader.h>
+#include <akniconarray.h>
+#include <akngrid.h>
+#include <akngridm.h>
+#include <aknlists.h>
+#include <aknutils.h>
+#include <aknpopup.h>
+#include <avkon.hrh>
+#include <e32base.h>
+#include <gulicon.h>
+#include <aknlayout2scalabledef.h> 
+#include <esmrgui.mbg>
+#include <esmrgui.rsg>
+#include <data_caging_path_literals.hrh>
+
+// 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<CGulIcon>* 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<CDesCArray*>( 
+            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