meetingrequest/mrgui/inc/cesmrlayoutmgr.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 22:37:30 +0200
branchRCL_3
changeset 8 e1b6206813b4
parent 0 8466d47a6819
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* 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)
*
*/


#ifndef CESMRLAYOUTMGR_H
#define CESMRLAYOUTMGR_H

#include <e32base.h>
#include <fbs.h>
//<cmail>
#include "esmrdef.h"
//</cmail>
#include <layoutmetadata.cdl.h>
#include <cenrepnotifyhandler.h>

class CFont;
class CCoeEnv;
class TMargins;
class TLogicalFont;
class CAknLayoutFont;
class CRepository;
class TAknsItemID;
class MESMRFontSizeObserver;

/**
 * MRUI mif file that includes all icon fallbacks for sis installations
 */
_LIT( KESMRMifFile, "esmrgui.mif");

/**
 * Namespace for layout constants
 */
namespace ESMRLayout // codescanner::namespace
    {
    /**
     * common icon value all around the application
     */
    #define KIconSize ::TSize(20,20) // codescanner::baddefines
    
    /**
     * Icon border margin
     */
    const TInt KIconBorderMargin = 3;

    /**
     * Field end margin
     */
    const TInt KFieldEndMargin = 6;
    
    /**
     * Mirrored icon margin
     */
    const TInt KMirroredIconMargin = 9;
    }

/**
 * CESMRLayoutManager
 *
 * @lib esmrgui.lib
 */
NONSHARABLE_CLASS( CESMRLayoutManager ) :
    public CBase,
    public MCenRepNotifyHandlerCallback
    {
public:
    // Enumeration for margin ids
    enum TMarginsId
        {
        EFieldMargins = 0x000000
        };

    // Struct for field sizes
    struct SFieldSize
        {
        TESMREntryFieldId iId;
        TInt iFontSmallHeight;
        TInt iFontNormalHeight;
        TInt iFontLargeHeight;
        TInt iWidthLandscape;
        TInt iWidthPortrait;
        };

public: // Construction and destruction

    /**
     * Creates and initialzes new CESMRLayoutManager object.
     * @return Pointer to CESMRLayoutManager object.
     */
    static CESMRLayoutManager* NewL();

    /**
     * C++ destructor
     */
    virtual ~CESMRLayoutManager();

public: // Interface

    /**
     * Fetches field size information.
     * @param aId Field id.
     * @return Field size information.
     */
    virtual TSize FieldSize( TESMREntryFieldId aId );

    /**
     * Returns margin values used in the fields
     *
     * @param TMarginsId - Not currently in use
     * @return TMargins margin values (pixels)
     */
    virtual TMargins Margins( TMarginsId aId );

    /**
     * Fetches font for field.
     *
     * @param aEnv Pointer to coe environment
     * @param aId Field id.
     * @return Pointer to font object. Ownership is not transferred.
     *         Can return NULL pointer.
     */
    virtual const CFont* Font(
            CCoeEnv* aEnv,
            TESMREntryFieldId aId);

    /**
     * Fetces icon margin from the top of the field.
     * This depends on the font size
     *
     * @return Margin value (pixels)
     */
    virtual TInt IconTopMargin();

    /**
     * Fetces text margin from the top of the field.
     * This depends on the font size
     *
     * @return Margin value (pixels)
     */
    virtual TInt TextTopMargin();

    /**
     * Fetces text margin from the side of the field.
     * This depends on the font size.
     *
     * @return Margin value (pixels)
     */
    virtual TInt TextSideMargin();

    /**
     * Returns the size of the control where response
     * area answer text is written.
     *
     * @return TSize Size of the control
     */
    virtual TSize ResponseAreaAnswerTextSize();

    /**
     * Returns the size of the control where response
     * area topic text is written.
     *
     * @return TSize Size of the control
     */
    virtual TSize ResponseAreaTopicTextSize();

    /**
     * Returns the position of the control where response
     * area answer text is written.
     *
     * @return TPoint position of the control
     */
    virtual TPoint ResponseAreaAnswerTextPosition();

    /**
     * Returns the position of the icon in the response area item
     *
     * @return TPoint position of the control
     */
    virtual TPoint ResponseAreaAnswerIconPosition();

    /**
     * Returns the height of the response area item
     *
     * @return TInt height of the control
     */
    virtual TInt ResponseAreaAnswerItemheight();

    /**
     * Returns the height of standard list field
     *
     * @return TInt height of the control
     */
    virtual TInt RegularFieldHeight();

    /**
     * Returns the position of the text control used in organizer field
     *
     * @return TInt height of the control
     */
    virtual TPoint OrganizerTextPosition();

    /**
     * Returns the width of the text control used in organizer field
     *
     * @return TInt width of the control
     */
    virtual TInt OrganizerTextWidth();

    /**
     * Returns the height of the title pane
     *
     * @return TInt height of the control
     */
    virtual TInt TitlePaneHeight();

    /**
     * Returns the skin/theme based color used as a background
     * color in the list.
     *
     * @return TRgb background color
     */
    virtual TRgb ListAreaBgColor();

    /**
     * Returns the skin/theme based color used as a text
     * color.
     *
     * @return TRgb text color
     */
    virtual TRgb GeneralListAreaTextColor();

    /**
     * Returns the skin/theme based color used as a text
     * color.
     *
     * @return TRgb text color
     */
    virtual TRgb ViewerListAreaTextColor();

    /**
     * Returns the skin/theme based color used as a text
     * color when text is "highlighted".
     *
     * @return TRgb text color
     */
    virtual TRgb ViewerListAreaHighlightedTextColor();

    /**
     * Returns the skin/theme based text color used as a text
     * color in theme documentation specified places.
     *
     * @return TRgb text color
     */
    virtual TRgb NormalTextColor();

    /**
     * Returns the skin/theme based text color used as a text
     * color in theme documentation specified places.
     *
     * @return TRgb text color
     */
    virtual TRgb HighlightedTextColor();
    
    /**
     * Returns the skin/theme based text color used as a text
     * color in title pane.
     *
     * @return TRgb text color
     */
    virtual TRgb TitleAreaTextColor();

    /**
     * Returns the skin/theme based text background color to be used
     * as a color in theme documentation specified places.
     *
     * @return TRgb text color
     */
    virtual TRgb NormalTextBgColor();

    /**
     * Returns the skin/theme based field border color to be used
     * as a color in theme documentation specified places.
     *
     * @return TRgb text color
     */
    virtual TRgb FieldBorderColor();

    /**
     * Returns the text color ID for normal text.
     *
     * @return TInt text color ID
     */
    virtual TInt NormalTextColorID();

    /**
     * Returns the text color ID for viewer area text.
     *
     * @return TInt text color ID
     */
    virtual TInt ViewerListAreaTextColorID();

    /**
     * Creates bitmap and bitmap mask. Bitmap is skin/theme based
     * and it's retrived by the given ID.Bitmap is also resized to
     * the given size.
     * Ownership of these created bitmaps is transferred to the caller.
     *
     * @param aIconID - id of the wanted bitmap
     * @param aBitmap - reference to the pointer where new bitmap is stored
     * @param aMask - reference to the pointer where new bitmap mask is stored
     * @param aSize - Desired size for the bitmap
     * @return TInt - KErrNone if bitmap was constructed succesfully
     *                KErrNotFound if any problems occured
     */
    virtual TInt GetSkinBasedBitmap( TAknsItemID aIconID,
                                     CFbsBitmap*& aBitmap,
                                     CFbsBitmap*& aMask,
                                     TSize aSize );
    /**
     * Checks if Font settings were changed since last font update query
     * Note: This function does not make a query/poll from the cenrep
     * @see CESMRLayoutManager::Font
     *
     * @return TBool - True, if font was changed
     */
    virtual TBool IsFontChanged();

   /**
     * Checks current font zoom/size of this layoutmanager
     *
     * @return TAknUiZoom - font zoom state
     */
    virtual TInt CurrentFontZoom();

    /**
     * Sets the Font size settings observer.
     * @param MESMRFontSizeObserver Observer instance to be informed.
     */
    void SetObserver( MESMRFontSizeObserver* aObserver );

    /**
     * Returns the position of the conflict popup control
     *
     * @return TPoint control position
     */
    IMPORT_C static TPoint ConflictPopupPosition();

    /**
     * Returns information about mirrored layout.
     *
     * @return TBool - ETrue if mirrored layout is set, otherwise EFalse.
     */
    IMPORT_C static TBool IsMirrored();

    /**
     * Sets fallback icon from esmrgui.mif file if no matching icon from skin
     * also used by several other fields as a utility
     *
     * @param aIconID - ID for the icon that this field should show
     * @param aFileIndex - id of the icon (from esmrgui.mif)
     * @param aFileMaskIndex - id of the icon mask (from esmrgui.mif)
     */
    IMPORT_C static void SetBitmapFallback( const TAknsItemID& aIconID,
                                            TInt& aFileIndex,
                                            TInt& aFileMaskIndex);
    
private:
    // Default c++ constructor
    CESMRLayoutManager();
    // Second phase constructor
    void ConstructL();
    // From MCenRepNotifyHandlerCallback
    // Notifies the observer that font size has changed
    virtual void HandleNotifyInt( TUint32 aId, TInt aNewValue );

    /**
     * Method is used to add sizes of the fields for different font sizes and
     * orientations. This is called only once at the construct phase.
     *
     * @param aId - ID of the field
     * @param aFontSmallHeight - height of the field when small fonts are set.
     * @param aFontNormalHeight - height of the field when normal fonts are set.
     * @param aFontLargeHeight - height of the field when large fonts are set.
     * @param aWidthLandscape - width of the field when orientation is landscape.
     * @param aWidthPortrait - width of the field when orientation is portrait.
     *
     */
    void AddSize(
            TESMREntryFieldId aId,
            TInt aFontSmallHeight,
            TInt aFontNormalHeight,
            TInt aFontLargeHeight,
            TInt aWidthLandscape,
            TInt aWidthPortrait );

private: // Data
    /// Own: Field size array
    RArray<SFieldSize> iSize;
    /// Own: Pointer to text field fonts
    CAknLayoutFont* iFont;
    /// Own: Pointer to mfne field fonts
    CAknLayoutFont* iMfneFont;
    /// Own: Pointer to cenrep object fetching font settings information
    CRepository* iFontSettings;
    /// Own: Font settings value
    TInt iFontSettingsValue;
    /// Own: Font settings change status
    TBool iFontSettingsChanged;
    /// Own: Active object which listens Font Size Key from a CenRep
    CCenRepNotifyHandler* iNotifyHandler;
    /// Ref: Observer for Font Size
    MESMRFontSizeObserver* iFontSizeObserver;
    };

#endif //CESMRLAYOUTMGR_H

// EOF