javauis/lcdui_akn/lcdui/inc/CMIDUIManager.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 25 May 2010 12:34:19 +0300
branchRCL_3
changeset 25 9ac0a0a7da70
parent 19 04becd199f91
permissions -rw-r--r--
Revision: v2.1.26 Kit: 2010121

/*
* Copyright (c) 2003 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:  ?Description
*
*/


#ifndef CMIDUIMANAGER_H
#define CMIDUIMANAGER_H

#include <e32def.h>
#include <coemain.h>
#include <lcdui.h>

#include "CMIDCanvas.h" // required for zoom support

#include "CMIDMenuHandler.h"

const TInt KPESParameterLength = 4;//PointerEventSuppressor parameter max value 9999
const TInt KPESErrorValue = -1;//PointerEventSuppressor parameter error value -1

class CMIDDisplayable;

/**
 * The UIManager class is responsible for persisting data about the
 * state of the UI which would be appropriate to restore should the
 * application be shut down whilst in the background.
 *
 * The only data that is persisted in the reference implementation is
 * the zoom state of the Canvas. This prevents a midlet that has saved
 * its state on being destroyed, and decides to return to a canvas on being
 * restarted from appearing to forget its zoom state whilst in the background
 * - the user may be unaware that the application was actually shutdown whilst
 * in the background.
 *
 */
NONSHARABLE_CLASS(CMIDUIManager) : public CBase
        , public MMIDEnvObserver
{
public:
    static CMIDUIManager* NewL(MMIDEnv& aEnv);
    ~CMIDUIManager();

#ifdef CANVAS_ZOOM_SUPPORT
    enum TZoomState
    {
        EZoomNone=0,
        EZoomFourTimes=1,
        EZoomMIDP1Ref=2,
        EZoomMin=EZoomNone,
        EZoomMax=EZoomMIDP1Ref
    };

    /**
     *@return the current canvas zoom state.
     */
    TInt ZoomState() const;
#endif

    //PointerEventSuppressor default values
    enum TPESValues
    {
        EPESPointerMovementInTwips = 200,//1 twip == 1/1440 of an inch
        EPESTimeInMilliseconds = 500//default time 0.5s
    };


    /**
     * Increase the zoom size for Canvases.
     */
    void  ZoomIn();

    /**
     * Decrease the zoom size for Canvas's
     */
    void  ZoomOut();

    /**
     *@see MMIDEnvObserver
     */
    virtual void HandleResourceChangeL(TInt aType);

    /**
     * Notifies CMIDTickerControlled object, if it exists,
     * about switch on change
     *
     * @see MMIDEnvObserver
     */
    virtual void HandleSwitchOnL(TBool aSwitchOn);

    /**
     * Notifies CMIDTickerControlled object, if it exists,
     * about foreground change
     *
     * @see MMIDEnvObserver
     */
    virtual void HandleForegroundL(TBool aForeground);

    /**
     * Get a pointer to a singleton menu handler.
     * The menu handler is created if not exists.
     *
     * CMIDUIManager object is owning this singleton object and takes
     * care of deleting it as well.
     *
     * @return Pointer to the menu handler
     *
     * @since s60 5.0
     */
    CMIDMenuHandler* OpenMenuHandlerL();

    /**
     * Get a pointer to a singleton menu handler.
     * NOTE: the return value could be NULL.
     *
     * @return Pointer to the menu handler
     *
     * @since s60 5.0
     */
    CMIDMenuHandler* GetMenuHandler();

    /**
     * Get pointer to singleton instance.
     * The instance is created if not exists.
     *
     * CMIDUIManager object is owning this singleton object and takes
     * care of deleting it as well.
     *
     * @return Pointer to this singleton object.
     * @exception If construction fails.
     *
     * @since s60
     */
    CMIDNaviPaneController* OpenNaviPaneControllerL();

    /**
     * Get pointer to singleton instance.
     *
     * NOTE: the return value could be NULL.
     *
     * @return Pointer to this singleton object.
     * @exception If construction fails.
     *
     * @since s60
     */
    CMIDNaviPaneController* GetNaviPaneController();

    /**
     * Get pointer to singleton instance.
     * The instance is created if not exists.
     *
     * CMIDUIManager object is owning this singleton object and takes
     * care of deleting it as well.
     *
     * @return Pointer to this singleton object.
     * @exception If construction fails.
     *
     * @since s60
     */
    CMIDKeyDecoder* OpenKeyDecoderL();

    /**
     * Get pointer to singleton instance.
     *
     * NOTE: the return value could be NULL.
     *
     * @return Pointer to this singleton object.
     * @exception If construction fails.
     *
     * @since s60
     */
    CMIDKeyDecoder* GetKeyDecoder();

    /**
     * Get pointer to singleton object.
     * The instance is created if not exists.
     *
     * Object's lifetime is managed with help of reference counting.
     * NOTE: The caller is responsible to call CMIDUIManager::CloseScaler()
     * method for every CMIDUIManager::OpenScalerL() method call.
     *
     * @return Reference to this singleton object.
     * @exception If construction fails.
     * @see CMIDUIManager::CloseScaler
     *
     * @since s60
     */
    CMIDScaler* OpenScalerL();

    /**
     * Get pointer to singleton instance.
     *
     * NOTE: the return value could be NULL.
     *
     * @param aIsOwner If true then the reference count is increased.
     * @return Pointer to this singleton object.
     * @exception If construction fails.
     *
     * @since s60
     */
    CMIDScaler* GetScaler(TBool aIsOwner = EFalse);

    /**
     * Object's life cycle is controlled with help of reference counting.
     *
     * User must call this method per each CMIDUIManager::ReserveScaler
     * method call.
     *
     * @param aScaler Scaler instance that is going to be release.
     * @see CMIDUIManager::ReserveScaler
     * @since s60
     */
    void CloseScaler(CMIDScaler* aScaler = NULL);

    /**
     * Opens reference to the singleton object.
     * The instance is created if not exists.
     *
     * @param aDisplayable       MMIDisplayable that uses CMIDCanvasKeypad.
     * @return                   Pointer to the CMIDCanvasKeypad instance.
     *                           NOTE: Could also be NULL.
     * @since S60 5.0
     */
    CMIDCanvasKeypad* OpenCanvasKeypadL(MMIDDisplayable* aDisplayable = NULL);

    /**
     * Get pointer to singleton instance.
     *
     * NOTE: the return value could be NULL.
     *
     * @param aIsOwner If true then the reference count is increased.
     * @return                   Pointer to the CMIDCanvasKeypad instance.
     *                           NOTE: Could also be NULL.
     * @since S60 5.0
     */
    CMIDCanvasKeypad* GetCanvasKeypad(TBool aIsOwner = EFalse);

    /**
     * To close the refernce to this object.
     * If after calling CloseCanvasKeypad function there is no reference
     * to this singelton object CMIDKCanvasKeypad instance is destroyed.
     *
     * The caller is responsible to call CloseCanvasKeypad method for every
     * OpenCanvasKeypadL method call.
     *
     * @param aCanvasKeypad Object that is going to be closed
     * @since S60 5.0
     */
    void CloseCanvasKeypad(CMIDCanvasKeypad* aCanvasKeypad = NULL);

    /**
     * Get default displayable
     *
     * @param aCreateIfNeeded If true then object is created if doesn't
     * already exist.
     * @return Default displayable
     * @since s60
     */
    CMIDDisplayable* OpenDefaultDisplayableL(TBool aVisible);

    /**
     * Get default displayable
     *
     * @param aCreateIfNeeded If true then object is created if doesn't
     * already exist.
     * @return Default displayable
     * @since s60
     */
    CMIDDisplayable* GetDefaultDisplayable();

    /**
     * Get Gauge item data
     * @return Data pointer
     * @since s60 3.2
     */
    inline void* GetGaugeItemData()
    {
        return iGaugeItemData;
    }

    /**
     * Set Gauge item data
     * @param aGaugeItemData Data pointer
     * @since s60 3.2
     */
    inline void SetGaugeItemData(void* aGaugeItemData)
    {
        iGaugeItemData = aGaugeItemData;
    }

    /**
     * Read PointerEventSuppressor parameter values from JAD file
     * @since S60 5.0
     */
    TSize ReadPointerEventSuppressorValues();

    /**
     * Parse TPtrC to TSize (two values separated with comma)
     *
     * @since S60 5.0
     */
    TSize TwoDesValuesToTSize(TPtrC scrSize);

private:

    /**
     * Ctor
     * @param aEnv Java environment
     *
     * @since s60
     */
    CMIDUIManager(MMIDEnv& aEnv);

    void ConstructL();
    void StoreIniL();
    void RestoreIniL();
    CDictionaryStore* OpenIniFileLC(RFs& aFs) const;

    /**
     * Releases resources occupied by default displayable
     *
     * @since s60
     */
    void CloseDefaultDisplayable();

#ifdef CANVAS_ZOOM_SUPPORT
    void SetZoomState(TInt aState);
#endif

private:
    MMIDEnv&                iEnv;

#ifdef CANVAS_ZOOM_SUPPORT
    TInt                    iZoomState;
#endif
    CMIDMenuHandler*        iMenuHandler;
    CMIDNaviPaneController* iNaviPaneController;
    CMIDKeyDecoder*         iKeyDecoder;
    CMIDScaler*             iScaler;
    CMIDCanvasKeypad*       iCanvasKeypad;
    void*                   iGaugeItemData;
    CMIDDisplayable*        iDefaultDisplayable;
    CMIDDefaultBackground*  iDefaultBackground;
};

#endif // CMIDUIMANAGER_H

// End of File