meetingrequest/mrgui/src/cesmrlayoutmgr.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:39:21 +0200
changeset 0 8466d47a6819
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007-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:  ESMR checkbox component for es mr gui (editor)
*
*/


#include "emailtrace.h"
#include "cesmrlayoutmgr.h"

#include <e32base.h>
#include <e32cmn.h>
#include <gdi.h>
#include <fbs.h>
#include <coemain.h>
#include <eikenv.h>
#include <gulfont.h>
#include <avkon.hrh>
#include <AknUtils.h>
#include <AknFontSpecification.h>
#include <AknLayoutFont.h>
#include <AvkonInternalCRKeys.h>
#include <centralrepository.h>
#include <AknsConstants.h>
#include <aknsconstants.hrh>
#include <AknsUtils.h>
#include <aknappui.h>
#include <data_caging_path_literals.hrh>
#include <esmrgui.mbg>

#include "mesmrfontsizeobserver.h"
#include "esmrhelper.h"

// Unnamed namespace for local definitions
namespace {

// icon margins
const TInt KIconTopMarginSmallFont = 0;
const TInt KIconTopMarginNormalFont = 1;
const TInt KIconTopMarginLargeFont = 3;

/** Enumeration for font sizes */
enum TESMRFontSize
    {
    EESMRFontSmall = 21,
    EESMRFontNormal = 23,
    EESMRFontLarge = 26
    };

/** Enumeration for text top margin*/
enum TESMRTextTopMargin
    {
    EESMRTextTopMarginSmall = 2,
    EESMRTextTopMarginNormal = 2,
    EESMRTextTopMarginLarge = 3
    };

// Field heights
const TInt KRegularFieldHeightSmallFont(20);
const TInt KRegularFieldHeightNormalFont(22);
const TInt KRegularFieldHeightLargeFont(25);
const TInt KTitlePaneHeight(26);

// Basic margins
const TInt KBasicTopMargin( 3 );
const TInt KBasicBottomMargin( 3 );
const TInt KBasicLeftMargin( 9 );
const TInt KBasicTightMargin( 3 );

// Response area related
#define KResponseAreaAnswerTextSize TSize( 180, 25 )
#define KResponseAreaTopicTextSizePortrait TSize( 212, 25 )
#define KResponseAreaTopicTextSizeLandscape TSize( 280, 25 )
#define KResponseAreaAnswerTextPositionSmallFont TPoint( 27, 3 )
#define KResponseAreaAnswerTextPositionNormalFont TPoint( 27, 3 )
#define KResponseAreaAnswerTextPositionLargeFont TPoint( 27, 5 )
#define KResponseAreaAnswerIconPositionSmallFont TPoint( 8, 3 )
#define KResponseAreaAnswerIconPositionNormalFont TPoint( 8, 5 )
#define KResponseAreaAnswerIconPositionLargeFont TPoint( 8, 7 )
#define KResponseAreaAnswerTextPositionSmallFontMirrored TPoint( 46, 3 )
#define KResponseAreaAnswerTextPositionNormalFontMirrored TPoint( 46, 3 )
#define KResponseAreaAnswerTextPositionLargeFontMirrored TPoint( 46, 5 )

#define KResponseAreaAnswerTextPositionSmallFontMirroredLandscape TPoint( 127, 3 )
#define KResponseAreaAnswerTextPositionNormalFontMirroredLandscape TPoint( 127, 3 )
#define KResponseAreaAnswerTextPositionLargeFontMirroredLandscape TPoint( 127, 5 )
#define KResponseAreaAnswerIconPositionSmallFontMirroredLandscape TPoint( 280, 3 )
#define KResponseAreaAnswerIconPositionNormalFontMirroredLandscape TPoint( 280, 5 )
#define KResponseAreaAnswerIconPositionLargeFontMirroredLandscape TPoint( 280, 7 )


#define KResponseAreaAnswerIconPositionSmallFontMirrored TPoint( 194, 3 )
#define KResponseAreaAnswerIconPositionNormalFontMirrored TPoint( 194, 5 )
#define KResponseAreaAnswerIconPositionLargeFontMirrored TPoint( 194, 7 )

#define KConflictPopupPositionPortrait TPoint(30,150)
#define KConflictPopupPositionLandscape TPoint(30,100)

const TInt KResponseAreaAnserItemHeightSmallFont(20);
const TInt KResponseAreaAnserItemHeightNormalFont(22);
const TInt KResponseAreaAnserItemHeightLargeFont(26);

// Organizer field related
const TInt KOrganizerTextWidth(150);

// Color id:s KViewerAreaTextColorID
const TInt KViewerAreaTextColorID( EAknsCIQsnTextColorsCG6 );
const TInt KViewerAreaHighlightedTextColorID( EAknsCIQsnHighlightColorsCG2 );
const TInt KNormalTextColorID( EAknsCIQsnTextColorsCG26 );
const TInt KNormalHighLightedTextColorID( EAknsCIQsnTextColorsCG24 );
const TInt KTitleAreaTextColorID( EAknsCIQsnTextColorsCG2 );
const TInt KNormalTextBgColorID( EAknsCIFsOtherColorsCG12 );
const TInt KListAreaTextColorID( EAknsCIQsnTextColorsCG6 );
const TInt KListAreaBgColorID( EAknsCIFsOtherColorsCG13 );
const TInt KFieldBorderColorID( EAknsCIFsOtherColorsCG14 );


#define KDefaultListAreaBgColor TRgb( 0xffffff );
#define KDefaultBorderColor TRgb( 0x000000 );
#define KDefaultTextColor TRgb( 0x000000 );
#define KDefaultNormalTextBgColor TRgb( 0xe8e8e8 );

// Text side margin in basic field (editor & viewer )
const TInt KTextSideMargin( 5 );

TESMRFontSize MapFontSettingToFontSize(
        TInt& aCurrentFontSetting )
    {
    TESMRFontSize fontSize( EESMRFontNormal );

    if ( EAknUiZoomSmall == aCurrentFontSetting )
        {
        fontSize = EESMRFontSmall;
        }
    else if ( EAknUiZoomLarge == aCurrentFontSetting )
        {
        fontSize = EESMRFontLarge;
        }
    return fontSize;
    }

TBool FindFieldSizeInfoById(
        const CESMRLayoutManager::SFieldSize& aLhs,
        const CESMRLayoutManager::SFieldSize& aRhs )
    {
    if ( aLhs.iId == aRhs.iId )
        {
        return ETrue;
        }
    return EFalse;
    }

}  // namespace

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// CESMRLayoutManager::CESMRLayoutManager
// ---------------------------------------------------------------------------
//
inline CESMRLayoutManager::CESMRLayoutManager()
:   iFontSettingsValue( EAknUiZoomNormal ),
    iFontSettingsChanged( EFalse )
    {
    FUNC_LOG;
    // Do nothing
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::~CESMRLayoutManager
// ---------------------------------------------------------------------------
//
CESMRLayoutManager::~CESMRLayoutManager()
    {
    FUNC_LOG;
    iSize.Reset();
    iSize.Close();
    delete iFont;
    delete iMfneFont;
    if ( iNotifyHandler )
        {
        iNotifyHandler->StopListening();
        }
    delete iNotifyHandler;
    delete iFontSettings;// session can be deleted only after iNotifyHandler
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::NewL
// ---------------------------------------------------------------------------
//
CESMRLayoutManager* CESMRLayoutManager::NewL()
    {
    FUNC_LOG;
    CESMRLayoutManager* self = new (ELeave) CESMRLayoutManager;
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ConstructL
// ---------------------------------------------------------------------------
//
void CESMRLayoutManager::ConstructL()
    {
    FUNC_LOG;
    // args: field id, height(smallfont), 
    //       height(normalfont), height(largefont),
    //       width(landscape), width(portrait)

    AddSize( EESMRFieldAttendeeLabel,               20, 22, 26, 299, 218 );
    AddSize( EESMRFieldAttendee,                    20, 22, 26, 299, 218 );
    AddSize( EESMRFieldOptAttendee,                 20, 22, 26, 299, 218 );
    AddSize( EESMRFieldMeetingTime,                 22, 24, 26, 299, 218 );
    AddSize( EESMRFieldStartDate,                   22, 24, 26, 299, 218 );
    AddSize( EESMRFieldStopDate,                    22, 24, 26, 299, 218 );
    AddSize( EESMRFieldLocation,                    19, 21, 25, 299, 218 );
    AddSize( EESMRFieldAlarm,                       22, 24, 26, 299, 218 );
    AddSize( EESMRFieldAlarmDate,                   22, 24, 26, 299, 218 );
    AddSize( EESMRFieldSubject,                     19, 21, 25, 299, 218 );
    AddSize( EESMRFieldOccasion,                    19, 21, 25, 299, 218 );
    AddSize( EESMRFieldDescription,                 60, 63, 60, 299, 218 ); 
    AddSize( EESMRFieldRecurrence,                  22, 24, 28, 299, 218 );
    AddSize( EESMRFieldRecurrenceDate,              44, 49, 53, 299, 218 ); 
    AddSize( EESMRFieldPriority,                    24, 26, 26, 299, 218 );
    AddSize( EESMRFieldAllDayEvent,                 20, 22, 26, 299, 218 );
    AddSize( EESMRFieldAlarmOnOff,                  20, 22, 26, 299, 218 );
    AddSize( EESMRFieldAlarmTime,                   22, 24, 26, 299, 218 );
    AddSize( EESMRFieldSync,                        22, 24, 28, 299, 218 );
    AddSize( EESMRFieldViewerBasic,                 20, 22, 26, 299, 218 );
    AddSize( EESMRFieldOrganizer,                   40, 44, 52, 299, 218 );
    AddSize( EESMRFieldResponseArea,                93, 102, 120, 299,218 );
    AddSize( EESMRFieldResponseAreaWithOneItem,     48, 57, 65, 299, 218 );
    AddSize( EESMRFieldResponseReadyArea,           24, 26, 28, 299, 218 );
    AddSize( EESMRFieldDetailedSubject,             20, 22, 25, 299, 218 );
    AddSize( EESMRFieldAttachments,                 22, 24, 28, 299, 218 );
    AddSize( EESMRFieldReqTrack,                    20, 22, 26, 299, 218 );
    AddSize( EESMRFieldOptTrack,                    20, 22, 26, 299, 218 );
    AddSize( EESMRTrackStatus,                      20, 22, 26, 299, 218 );

    iFontSettings = CRepository::NewL( KCRUidAvkon );
    iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iFontSettings,
            CCenRepNotifyHandler::EIntKey, KAknGlobalUiZoom );
    iNotifyHandler->StartListeningL();

    // Check the current font size
    TAknUiZoom zoom;
    zoom = static_cast<CAknAppUi*>(
            CEikonEnv::Static()->AppUi()// codescanner::eikonenvstatic
                )->LocalUiZoom();

    if ( zoom == EAknUiZoomAutomatic )
        {
        CAknEnv::Static()->GetCurrentGlobalUiZoom( zoom );
        }

    iFontSettingsValue = zoom;

    // Check the font settings, note that id is not used yet (can be anything)
    Font(CCoeEnv::Static(), EESMRFieldViewerBasic );
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::CurrentFontSizeL
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::CurrentFontZoom()
    {
    FUNC_LOG;
    return iFontSettingsValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::FieldSize
// ---------------------------------------------------------------------------
//
TSize CESMRLayoutManager::FieldSize( TESMREntryFieldId aId )
    {
    FUNC_LOG;
    TSize size( 0, 0 );

    CESMRLayoutManager::SFieldSize fieldToFound;
    fieldToFound.iId = aId;

    TInt pos = iSize.Find( fieldToFound, FindFieldSizeInfoById );
    if ( KErrNotFound != pos )
        {
        TInt width = Layout_Meta_Data::IsLandscapeOrientation() ?
                iSize[pos].iWidthLandscape : iSize[pos].iWidthPortrait;

        TInt height;

        // Field height depends on font height
        // Field height when small font is in use
        if( iFontSettingsValue == EAknUiZoomSmall ||
            iFontSettingsValue == EAknUiZoomVerySmall )
            {
            height = iSize[pos].iFontSmallHeight;
            }
        // Field height when large font is in use
        else if( iFontSettingsValue == EAknUiZoomLarge ||
            iFontSettingsValue == EAknUiZoomVeryLarge )
            {
            height = iSize[pos].iFontLargeHeight;
            }
        // Field height if font height is not specified or it's normal
        else
            {
            height = iSize[pos].iFontNormalHeight;
            }

        size.SetSize( width, height );
        }

    return size;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::Font
// ---------------------------------------------------------------------------
//
const CFont* CESMRLayoutManager::Font(
        CCoeEnv* /*aEnv*/,
        TESMREntryFieldId aId )
    {
    FUNC_LOG;
    if ( !iFont || !iMfneFont )
        {
        TAknFontSpecification aknFontSpec( EAknLogicalFontTitleFont );
        aknFontSpec.SetUnits( TAknFontSpecification::EPixels );

        TESMRFontSize fontSize = MapFontSettingToFontSize( iFontSettingsValue );

        // text pane height for edwins (text fields)
        aknFontSpec.SetTextPaneHeight( fontSize );

        // There is nothing mrui can do if this method leaves
        delete iFont;
        iFont = NULL;
        TRAP_IGNORE( iFont = AknLayoutUtils::
                CreateLayoutFontFromSpecificationL( aknFontSpec ) );

        if ( fontSize == EESMRFontLarge )
            {
            // If large font is used:
            aknFontSpec.SetTextPaneHeight( fontSize - 2);
            }
        else
            {
            aknFontSpec.SetTextPaneHeight( fontSize - 1);
            }


        // separate font for CEikMfne based controls:
        delete iMfneFont;
        iMfneFont = NULL;

        TRAP_IGNORE( iMfneFont = AknLayoutUtils::
                CreateLayoutFontFromSpecificationL( aknFontSpec ) );

        }
    if ( aId == EESMRFieldStartDate ||
         aId == EESMRFieldStopDate ||
         aId == EESMRFieldMeetingTime ||
         aId == EESMRFieldAlarmDate ||
         aId == EESMRFieldRecurrenceDate ||
         aId == EESMRFieldAlarmTime ||
         aId == EESMRFieldDate )
        {
        return static_cast<const CFont*>(iMfneFont);
        }
    else
        {
        return static_cast<const CFont*>(iFont);
        }
    }
// ---------------------------------------------------------------------------
// CESMRLayoutManager::Margins
// ---------------------------------------------------------------------------
//
TMargins CESMRLayoutManager::Margins(
        TMarginsId /*aId*/ )
    {
    FUNC_LOG;
    TMargins m;
    m.iTop = KBasicTopMargin;
    m.iBottom = KBasicBottomMargin;
    m.iLeft = KBasicLeftMargin;
    m.iRight = KBasicTightMargin;
    return m;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::IconTopMargin
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::IconTopMargin()
    {
    FUNC_LOG;
    TInt retValue = 0;

    switch ( iFontSettingsValue )
        {
        case EAknUiZoomSmall: //Fallthrough
        case EAknUiZoomVerySmall:
            {
            retValue = KIconTopMarginSmallFont;
            break;
            }
        case EAknUiZoomNormal:
            {
            retValue = KIconTopMarginNormalFont;
            break;
            }
        case EAknUiZoomLarge: //Fallthrough
        case EAknUiZoomVeryLarge:
            {
            retValue = KIconTopMarginLargeFont;
            break;
            }
        default:
            {
            retValue = KIconTopMarginNormalFont;
            break;
            }
        }
    return retValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::TextTopMargin
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::TextTopMargin()
    {
    FUNC_LOG;
    TInt retValue = 0;

    switch ( iFontSettingsValue )
        {
        case EAknUiZoomSmall: //Fallthrough
        case EAknUiZoomVerySmall:
            {
            retValue = EESMRTextTopMarginSmall;
            break;
            }
        case EAknUiZoomNormal:
            {
            retValue = EESMRTextTopMarginNormal;
            break;
            }
        case EAknUiZoomLarge: //Fallthrough
        case EAknUiZoomVeryLarge:
            {
            retValue = EESMRTextTopMarginLarge;
            break;
            }
        default:
            {
            retValue = KIconTopMarginNormalFont;
            break;
            }
        }
    return retValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::TextSideMargin
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::TextSideMargin()
    {
    FUNC_LOG;
    return KTextSideMargin;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::TitlePaneHeight
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::TitlePaneHeight()
    {
    FUNC_LOG;
    return KTitlePaneHeight;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::AddSize
// ---------------------------------------------------------------------------
//
void CESMRLayoutManager::AddSize(
        TESMREntryFieldId aId,
        TInt aFontSmallHeight,
        TInt aFontNormalHeight,
        TInt aFontLargeHeight,
        TInt aWidthLandscape,
        TInt aWidthPortrait )
    {
    FUNC_LOG;
    SFieldSize size;
    size.iId = aId;
    size.iFontSmallHeight = aFontSmallHeight;
    size.iFontNormalHeight = aFontNormalHeight;
    size.iFontLargeHeight = aFontLargeHeight;
    size.iWidthLandscape = aWidthLandscape;
    size.iWidthPortrait = aWidthPortrait;
    iSize.Append( size );
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::IsMirrored
// ---------------------------------------------------------------------------
//
EXPORT_C TBool CESMRLayoutManager::IsMirrored()
    {
    FUNC_LOG;
    return Layout_Meta_Data::IsMirrored();
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::SetBitmapFallback
// If a new scalable graphic
// is added to the mif file, it should be mapped to fallback here.
// ---------------------------------------------------------------------------
//
EXPORT_C void CESMRLayoutManager::SetBitmapFallback(const TAknsItemID& aIconId,
                                                TInt& aFileIndex,
                                                TInt& aFileMaskIndex)
    {
// <cmail> icons changed
    FUNC_LOG;
    switch ( aIconId.iMinor )
        {
        case EAknsMinorGenericQgnFscalIndiPriorityHigh:
        case EAknsMinorGenericQgnFsIndiPriorityHigh:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_priority_high;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_priority_high_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiPriorityNormal:
        case EAknsMinorGenericQgnFsIndiPriorityNormal:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_priority_normal;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_priority_normal_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiPriorityLow:
        case EAknsMinorGenericQgnFsIndiPriorityLow:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_priority_low;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_priority_low_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiAlarmDay:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_alarm_day;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_alarm_day_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiAlarmTime:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_alarm;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_alarm_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiSubject:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_subject;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_subject_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiRecurrence:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_recurrence;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_recurrence_mask;
            break;
            }
        case EAknsMinorGenericQgnMeetReqIndiAlarm:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_alarm;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_alarm_mask;
            break;
            }
        case EAknsMinorGenericQgnMeetReqIndiCheckboxMark:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_checkbox_on;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_checkbox_on_mask;
            break;
            }
        case EAknsMinorGenericQgnMeetReqIndiCheckboxUnmark:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_checkbox_off;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_checkbox_off_mask;
            break;
            }
        case EAknsMinorGenericQgnMeetReqIndiClock:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_clock;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_clock_mask;
            break;
            }
        case EAknsMinorGenericQgnMeetReqIndiDateEnd:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_date_end;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_date_end_mask;
            break;
            }
        case EAknsMinorGenericQgnMeetReqIndiDateStart:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_date_start;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_date_start_mask;
            break;
            }
        case EAknsMinorGenericQgnMeetReqIndiLocation:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_location;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_meet_req_location_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiSynchronisation:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_synchronisation;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_synchronisation_mask;
            break;
            }
        case EAknsMinorGenericQgnFscalIndiOccasion:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_occasion;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_occasion_mask;
            break;
            }

        case EAknsMinorGenericQgnFsIndiCaleTrackingTentative:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_tentative;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_tentative_mask;
            break;
            }
        case EAknsMinorGenericQgnFsIndiCaleTrackingAccept:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_accept;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_accept_mask;
            break;
            }
        case EAknsMinorGenericQgnFsIndiCaleTrackingNone:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_none;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_none_mask;
            break;
            }
        case EAknsMinorGenericQgnFsIndiCaleTrackingReject:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_reject;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_calendar_tracking_reject_mask;
            break;
            }
        case EAknsMinorGenericQgnFseMailAttachment:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_attachment;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_attachment_mask;
            break;
            }
        case EAknsMinorGenericQgnFsGrafEmailCtrlbar:
            {
            aFileIndex = EMbmEsmrguiQgn_graf_cmail_email_ctrlbar;
            aFileMaskIndex = EMbmEsmrguiQgn_graf_cmail_email_ctrlbar_mask;
            break;
            }
        case EAknsMinorQgnPropCheckboxOn:
            aFileIndex = EMbmEsmrguiQgn_prop_checkbox_on;
            aFileMaskIndex = EMbmEsmrguiQgn_prop_checkbox_on_mask;
        	break;
        case EAknsMinorQgnPropCheckboxOff:
            aFileIndex = EMbmEsmrguiQgn_prop_checkbox_off;
            aFileMaskIndex = EMbmEsmrguiQgn_prop_checkbox_off_mask;
        	break;
        case EAknsMinorQgnFsListCenter:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_center;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_center_mask;
            break;
            }
        case EAknsMinorQgnFsListSideT:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_side_t;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_side_t_mask;
            break;
            }
        case EAknsMinorQgnFsListSideL:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_side_l;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_side_l_mask;
            break;
            }
        case EAknsMinorQgnFsListSideR:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_side_r;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_side_r_mask;
            break;
            }
        case EAknsMinorQgnFsListSideB:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_side_b;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_side_b_mask;
            break;
            }
        case EAknsMinorQgnFsListCornerTl:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_corner_tl;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_corner_tl_mask;
            break;
            }
        case EAknsMinorQgnFsListCornerTr:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_corner_tr;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_corner_tr_mask;
            break;
            }
        case EAknsMinorQgnFsListCornerBl:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_corner_bl;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_corner_bl_mask;
            break;
            }
        case EAknsMinorQgnFsListCornerBr:
            {
            aFileIndex = EMbmEsmrguiQsn_fr_list_corner_br;
            aFileMaskIndex = EMbmEsmrguiQsn_fr_list_corner_br_mask;
            break;
            }
        case EAknsMinorGenericQgnFsHscrActionArrowLeft:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_arrow_right;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_arrow_right_mask;
            break;
            }
        // <cmail> removed when icons changed to common ones
        /*    
        case EAknsMinorGenericQgnFsHscrActionArrowRight:
            {
            aFileIndex = EMbmEsmrguiQgn_indi_action_menu;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_action_menu_mask;
            break;
            }
            */
        // </cmail>    
        // <cmail> Commented to enable compilation in wk04
        /*case EAknsMinorGenericQgnFseActionMenuOpenInWebIcon:
            {
            aFileIndex = EMbmEsmrguiQgn_fse_action_menu_open_in_web_icon;
            aFileMaskIndex = EMbmEsmrguiQgn_fse_action_menu_open_in_web_icon;
            break;
            }
        case EAknsMinorGenericQgnFseActionMenuOpenInIntranetIcon:
            {
            aFileIndex = EMbmEsmrguiQgn_fse_action_menu_open_in_intranet_icon;
            aFileMaskIndex = EMbmEsmrguiQgn_fse_action_menu_open_in_intranet_icon_mask;
            break;
            }
        case EAknsMinorGenericQgnFseActionMenuBookmarkIcon:
            {
            aFileIndex = EMbmEsmrguiQgn_fse_action_menu_bookmark_icon;
            aFileMaskIndex = EMbmEsmrguiQgn_fse_action_menu_bookmark_icon_mask;
            break;
            }*/
        // </cmail>
        // <cmail> removed when icons changed to common ones
        /*          
        case EAknsMinorGenericQgnPropBlidWaypoint:
            {
            aFileIndex = EMbmEsmrguiQgn_fs_action_show_on_maps;
            aFileMaskIndex = EMbmEsmrguiQgn_fs_action_show_on_maps_mask;
            break;
            }
            */
        // </cmail>             
        default:
            {
            // <cmail> icons changed    
            aFileIndex = EMbmEsmrguiQgn_indi_cmail_arrow_right;
            aFileMaskIndex = EMbmEsmrguiQgn_indi_cmail_arrow_right_mask;
            break;
            // </cmail>              
            }
          
// </cmail>
        }
    }



// ---------------------------------------------------------------------------
// CESMRLayoutManager::ResponseAreaAnswerTextSize
// ---------------------------------------------------------------------------
//
TSize CESMRLayoutManager::ResponseAreaAnswerTextSize()
    {
    FUNC_LOG;
    return KResponseAreaAnswerTextSize;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ResponseAreaTopicTextSize
// ---------------------------------------------------------------------------
//
TSize CESMRLayoutManager::ResponseAreaTopicTextSize()
    {
    FUNC_LOG;
    if( Layout_Meta_Data::IsLandscapeOrientation() )
        {
        return KResponseAreaTopicTextSizeLandscape;
        }
    else
        {
        return KResponseAreaTopicTextSizePortrait;
        }
    }


// ---------------------------------------------------------------------------
// CESMRLayoutManager::ResponseAreaAnswerTextPosition
// ---------------------------------------------------------------------------
//
TPoint CESMRLayoutManager::ResponseAreaAnswerTextPosition()
    {
    FUNC_LOG;
    TPoint retValue;
    TBool mirrored = IsMirrored();

    switch ( iFontSettingsValue )
        {
        case EAknUiZoomSmall: //Fallthrough
        case EAknUiZoomVerySmall:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerTextPositionSmallFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
                     KResponseAreaAnswerTextPositionSmallFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
                     KResponseAreaAnswerTextPositionSmallFontMirrored;
                    }
                }
            break;
            }
        case EAknUiZoomNormal:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerTextPositionNormalFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
                     KResponseAreaAnswerTextPositionNormalFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
						KResponseAreaAnswerTextPositionNormalFontMirrored;
                    }
                }
            break;
            }
        case EAknUiZoomLarge: //Fallthrough
        case EAknUiZoomVeryLarge:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerTextPositionLargeFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
					 KResponseAreaAnswerTextPositionLargeFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
						KResponseAreaAnswerTextPositionLargeFontMirrored;
                    }
                }
            break;
            }
        default:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerTextPositionLargeFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
                     KResponseAreaAnswerTextPositionNormalFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
						KResponseAreaAnswerTextPositionNormalFontMirrored;
                    }
                }
            break;
            }
        }
    return retValue;
    }


// ---------------------------------------------------------------------------
// CESMRLayoutManager::ResponseAreaAnswerIconPosition
// ---------------------------------------------------------------------------
//
TPoint CESMRLayoutManager::ResponseAreaAnswerIconPosition()
    {
    FUNC_LOG;
    TPoint retValue;
    TBool mirrored = IsMirrored();

    switch ( iFontSettingsValue )
        {
        case EAknUiZoomSmall: //Fallthrough
        case EAknUiZoomVerySmall:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerIconPositionSmallFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
                     KResponseAreaAnswerIconPositionSmallFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
						KResponseAreaAnswerIconPositionSmallFontMirrored;
                    }
                }
            break;
            }
        case EAknUiZoomNormal:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerIconPositionNormalFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
                     KResponseAreaAnswerIconPositionNormalFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
						KResponseAreaAnswerIconPositionNormalFontMirrored;
                    }
                }
            break;
            }
        case EAknUiZoomLarge: //Fallthrough
        case EAknUiZoomVeryLarge:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerIconPositionLargeFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
                     KResponseAreaAnswerIconPositionLargeFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
						KResponseAreaAnswerIconPositionLargeFontMirrored;
                    }
                }
            break;
            }
        default:
            {
            if( !mirrored )
                {
                retValue = KResponseAreaAnswerIconPositionNormalFont;
                }
            else
                {
                if( Layout_Meta_Data::IsLandscapeOrientation() )
                    {
                    retValue = 
					 KResponseAreaAnswerIconPositionNormalFontMirroredLandscape;
                    }
                else
                    {
                    retValue = 
						KResponseAreaAnswerIconPositionNormalFontMirrored;
                    }
                }
            break;
            }
        }
    return retValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ResponseAreaAnswerItemheight
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::ResponseAreaAnswerItemheight()
    {
    FUNC_LOG;
    TInt retValue;

    switch ( iFontSettingsValue )
        {
        case EAknUiZoomSmall: //Fallthrough
        case EAknUiZoomVerySmall:
            {
            retValue = KResponseAreaAnserItemHeightSmallFont;
            break;
            }
        case EAknUiZoomNormal:
            {
            retValue = KResponseAreaAnserItemHeightNormalFont;
            break;
            }
        case EAknUiZoomLarge: //Fallthrough
        case EAknUiZoomVeryLarge:
            {
            retValue = KResponseAreaAnserItemHeightLargeFont;
            break;
            }
        default:
            {
            retValue = KResponseAreaAnserItemHeightNormalFont;
            break;
            }
        }
    return retValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::RegularFieldHeight
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::RegularFieldHeight()
    {
    FUNC_LOG;
    TInt retValue;

    switch ( iFontSettingsValue )
        {
        case EAknUiZoomSmall: //Fallthrough
        case EAknUiZoomVerySmall:
            {
            retValue = KRegularFieldHeightSmallFont;
            break;
            }
        case EAknUiZoomNormal:
            {
            retValue = KRegularFieldHeightNormalFont;
            break;
            }
        case EAknUiZoomLarge: //Fallthrough
        case EAknUiZoomVeryLarge:
            {
            retValue = KRegularFieldHeightLargeFont;
            break;
            }
        default:
            {
            retValue = KRegularFieldHeightNormalFont;
            break;
            }
        }
    return retValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::OrganizerTextWidth
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::OrganizerTextWidth()
    {
    FUNC_LOG;
    return KOrganizerTextWidth;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::OrganizerTextPosition
// ---------------------------------------------------------------------------
//
TPoint CESMRLayoutManager::OrganizerTextPosition()
    {
    FUNC_LOG;
    TPoint retValue(0,0);
    if( IsMirrored() )
        {
        TInt fieldWidth = FieldSize( EESMRFieldOrganizer ).iWidth;
        retValue = TPoint( fieldWidth - KIconSize.iWidth - 
        		           ESMRLayout::KIconBorderMargin - OrganizerTextWidth(), 
        		           RegularFieldHeight() );
        }
    else
        {
        retValue = TPoint( KIconSize.iWidth +
                           ESMRLayout::KIconBorderMargin + 
						   TextSideMargin(), 
						   RegularFieldHeight() );
        }
    return retValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ConflictPopupPosition
// ---------------------------------------------------------------------------
//
EXPORT_C TPoint CESMRLayoutManager::ConflictPopupPosition()
    {
    FUNC_LOG;
	TPoint PopupPoint = Layout_Meta_Data::IsLandscapeOrientation() ?
		KConflictPopupPositionLandscape : KConflictPopupPositionPortrait ;

	return PopupPoint;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ListAreaBgColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::ListAreaBgColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnOtherColors,
                                     KListAreaBgColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultListAreaBgColor;
        }

    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::GeneralListAreaTextColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::GeneralListAreaTextColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnTextColors,
                                     KListAreaTextColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultTextColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::NormalTextColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::NormalTextColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnTextColors,
                                     KNormalTextColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultTextColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::NormalTextColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::HighlightedTextColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnTextColors,
                                     KNormalHighLightedTextColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultTextColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ViewerListAreaTextColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::ViewerListAreaTextColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnTextColors,
                                     KViewerAreaTextColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultTextColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ViewerListAreaHighlightedTextColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::ViewerListAreaHighlightedTextColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnHighlightColors,
                                     KViewerAreaHighlightedTextColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultTextColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::TitleAreaTextColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::TitleAreaTextColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnTextColors,
                                     KTitleAreaTextColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultTextColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::NormalTextBgColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::NormalTextBgColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnOtherColors,
                                     KNormalTextBgColorID );

    if( err != KErrNone )
        {
        bgColor = KDefaultNormalTextBgColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::FieldBorderColor
// ---------------------------------------------------------------------------
//
TRgb CESMRLayoutManager::FieldBorderColor()
    {
    FUNC_LOG;
    TRgb bgColor;
    TInt err;

    err = AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
                                     bgColor,
                                     KAknsIIDQsnOtherColors ,
                                     KFieldBorderColorID );
    if( err != KErrNone )
        {
        bgColor = KDefaultBorderColor;
        }
    return bgColor;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::NormalTextColorID
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::NormalTextColorID()
    {
    FUNC_LOG;
    return KNormalTextColorID;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::ViewerListAreaTextColorID
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::ViewerListAreaTextColorID()
    {
    FUNC_LOG;
    return KListAreaTextColorID;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::GetSkinBasedBitmap
// ---------------------------------------------------------------------------
//
TInt CESMRLayoutManager::GetSkinBasedBitmap( 
		TAknsItemID aIconID, 
		CFbsBitmap*& aBitmap, 
		CFbsBitmap*& aMask, 
		TSize aSize )
    {
    FUNC_LOG;
    TInt retValue = KErrNone;
    delete aBitmap;
    aBitmap = NULL;
    delete aMask;
    aMask = NULL;

    TInt fileIndex(-1);
    TInt fileMaskIndex(-1);

    SetBitmapFallback( aIconID, fileIndex, fileMaskIndex );

    TFileName bitmapFilePath;
    ESMRHelper::LocateResourceFile(
            KESMRMifFile,
            KDC_APP_BITMAP_DIR,
            bitmapFilePath);

    TRAPD(error, AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
										 aIconID,
										 aBitmap,
										 aMask,
										 bitmapFilePath,
										 fileIndex,
										 fileMaskIndex ));
    if ( error != KErrNone )
        {
        return error;
        }

    AknIconUtils::SetSize( aBitmap, aSize, EAspectRatioNotPreserved );

    if( !aBitmap || !aMask )
        {
        retValue = KErrNotFound;
        }
    return retValue;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::IsFontChanged
// ---------------------------------------------------------------------------
//
TBool CESMRLayoutManager::IsFontChanged()
    {
    FUNC_LOG;
    return iFontSettingsChanged;
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::HandleNotifyInt
// ---------------------------------------------------------------------------
//
void CESMRLayoutManager::HandleNotifyInt( TUint32 aId, TInt aNewValue )
    {
    FUNC_LOG;
    if( aId == KAknGlobalUiZoom )
        {
        iFontSettingsValue = aNewValue;
        iFontSettingsChanged = ETrue;

        // Force CESMRLayoutManager::Font to create new font
        delete iFont;
        iFont = NULL;

        delete iMfneFont;
        iMfneFont = NULL;

        if ( iFontSizeObserver )
            {
            iFontSizeObserver->FontSizeSettingsChanged();//Synchronous update
            iFontSettingsChanged = EFalse;
            }
        }
    }

// ---------------------------------------------------------------------------
// CESMRLayoutManager::SetObserver
// ---------------------------------------------------------------------------
//
void CESMRLayoutManager::SetObserver( MESMRFontSizeObserver* aObserver )
    {
    FUNC_LOG;
    iFontSizeObserver = aObserver;
    }

// EOF