photosgallery/viewframework/views/viewbase/inc/glxviewbase.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:55:03 +0300
branchRCL_3
changeset 24 ea65f74e6de4
parent 14 2dac0fdba72b
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 2008-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:    View Base 
*
*/




#ifndef C_GLXVIEWBASE_H
#define C_GLXVIEWBASE_H

// INCLUDES


#include <aknview.h>
#include  <akntitle.h>
#include <alf/alftimedvalue.h>
#include <alf/ialfviewwidget.h>
#include <glxanimationfactory.h>
#include "glxkeyeventreceiver.h"
#include <mglxanimationobserver.h>
#include <glxlog.h>
#include <akntoolbar.h>
#include <akntoolbarobserver.h>
#include "mglxsoftkeyhandler.h"
#include <mul/mulevent.h>
#include <alf/ialfwidgetfactory.h>
class CGlxCommandHandler;
class CGlxUiUtility;
class CAlfControlGroup;
class CGlxKeyMonitor;

// CLASS DECLARATION

/**
 *  View base
 *
 *  @lib glxviewbase.lib
 */
class CGlxViewBase : public CAknView, 
                     public MGlxAnimationObserver,
                     public MAknToolbarObserver
    {
public:
    /**
     * Constructor
     */
    IMPORT_C CGlxViewBase(TBool aSyncActivation = ETrue);

    /**
     * Destructor.
     */
    IMPORT_C virtual ~CGlxViewBase();

    /**
     * Add a command handler to the view (ownership transferred and the
     * command handler is deleted in the event of a leave).
     * @param aCommandHandler The command handler to add.
     */
    IMPORT_C void AddCommandHandlerL(CGlxCommandHandler* aCommandHandler);

	/**
	 * Enable and set a Title in screen furniture
	 * @param aTitleText The text to be displayed
	 * @param aAnimate Indicates if the change is to be animated
	 */
    IMPORT_C void SetTitleL(const TDesC& aTitleText);

	/**
	 * Disable a Title in screen furniture
	 * @param aAnimate Indicates if the change is to be animated
	 */
    IMPORT_C void DisableTitle();
	
	/**
     * Handles commands
	 * @param aCommand The command to respond to
	 * @return ETrue iff the command has been handled.
     */
    IMPORT_C virtual TInt DoHandleCommandL(TInt aCommand);    
    
	/**
     * Sets the grid tool.
	 * @param grid toolbar handle. 
     */
    IMPORT_C void SetGridToolBar(CAknToolbar* aToolbar);
    
	/**
     * Returns the current active toolbar
     * Needed as grid toolbar is created dynamically
     */
    IMPORT_C CAknToolbar* GetToolBar();

protected: // From MCoeView.

    /** 
     * See @ref MCoeView. 
     */
	IMPORT_C void ViewActivatedL(const TVwsViewId& aPrevViewId,
	                             TUid aCustomMessageId,
	                             const TDesC8& aCustomMessage);

    /** 
     * See @ref MCoeView
     */
	IMPORT_C void ViewDeactivated();


protected: // From MGlxAnimationObserver 
    IMPORT_C virtual void AnimationComplete(MGlxAnimation* aAnimation); 

protected:
    //From MAknToolbarObserver
    IMPORT_C void OfferToolbarEventL( TInt aCommand );
    
    IMPORT_C void SetToolbarObserver(MAknToolbarObserver* aObserver);
    
protected:
	/**
	 * IMPORTANT: Call this from the ConstructL of any derived class
	 */
	IMPORT_C void ViewBaseConstructL();

	/**
	 * Derived classes should use this to deal with any view-specific commands
	 * @param aCommand The command to respond to
	 * @return ETrue iff the command has been handled.
	 */
	IMPORT_C virtual TBool HandleViewCommandL(TInt aCommand);
	
	/**
	 * Derived classes should use this to initialize the menus if required
	 * @param aResourceId The menu resource
	 * @param aMenuPane The menu pane to edit
	 */
	IMPORT_C virtual void ViewDynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
	
	/**
	 * This will be called on derived classes when the view is activated
     * @param aPrevViewId Specifies the view previously active.
     * @param aCustomMessageId Specifies the message type.
     * @param aCustomMessage The activation message.
	 */
	virtual void DoViewActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage) = 0;
	
	/**
	 * This will be called on derived classes when the view is deactivated
	 */
    virtual void DoViewDeactivate() = 0;

    /**
	 * This is called on derived classes before the options menu
	 * is opened. The derived classes should use it to ensure that 
	 * all required attributes have been retrieved in order to determine
	 * if the command should be displayed on the options menu and.
	 */
    IMPORT_C virtual void FetchAttributesL();    
	
    /**
   	 * This is called on derived classes before commands are executed.
   	 * The derived classes should use it to ensure that all the required
   	 * attributes have been tetrieved in order to execute the command.
   	 */
    IMPORT_C virtual void FetchAttributesForCommandL(TInt aCommand);
    
	/**
     * Report whether the given type of animation is supported by the class
     * @return ETrue iff the animaiton is implemented
     */
    IMPORT_C virtual TBool ViewAnimationSupported(TGlxViewswitchAnimation aType); 
    
    /**
     * Start the given type of view-switch animation
     * @param aType The type of animation (e.g. Entry / Exit)
     * @param aDirection The direction of the animation (e.g. Forwards / Backwards)
     */
    IMPORT_C virtual void DoViewAnimationL(TGlxViewswitchAnimation aType, TGlxNavigationDirection aDirection);
    
    /**
     * Sets the toolbar state after command execution.
     * @ return ETrue If item is a system item. Else EFalse 
     */
    IMPORT_C virtual void SetToolbarStateL();

    
private:	
	// From MEikMenuObserver
	IMPORT_C virtual void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
	
	// From MGlxUiCommandHandler
	IMPORT_C void HandleCommandL(TInt aCommand);

	// From CAknView
    IMPORT_C void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
    IMPORT_C void DoDeactivate();

private:

    /**
     * Initialize a viewswitch animation
     * @param aType The type of animation to start
     */
    void InitAnimationL(TGlxViewswitchAnimation aType); 
    
    /**
     * Cancel the current viewswitch animation, if any
     */
    void CancelViewAnimation(); 

    /**
     * Called when the view-switch animation is complete or interrupted
     * @param aType The type of animation (e.g. Entry / Exit)
     */
    void ViewAnimationComplete(TGlxViewswitchAnimation aType); 
    
    /**
     * Gets the title pane instance.
     */
    CAknTitlePane* GetTitlePaneL();

    /*
     * Set toolbar items dimmed.
     * @param aDimmed Flag for the toolbar items to be dimmed.
     */
    void SetToolbarItemsDimmed(TBool aDimmed);
    
protected:
	/**
	 * Optionally implemented by sub-classes to prepare command handlers.
	 * Called once for every command handler added to the view.
	 * @param aCommandHandler command handler added to the view.
	 */
    virtual void DoPrepareCommandHandlerL(CGlxCommandHandler* /*aCommandHandler*/) {};

protected:
	/// The list of command handlers owned by the view
	RPointerArray<CGlxCommandHandler> iCommandHandlerList;    

protected:
	CGlxUiUtility* iUiUtility; ///< The UiUtility in use
	
	/// The view animation time
    TInt iViewAnimationTime; 
    
    /// Status of FullScreen Transition is started
    TBool iIsTransEffectStarted;
private:
    /**
     * Functions to handle view activate asynchronously
     */
    static TBool ViewActivateCallbackL(TAny* aPtr);
    inline void ViewActivateL();

private:
    /// Resource file offset
    TInt iViewBaseResourceOffset;

    /// Ui Utility resource file offset
    TInt iUiUtilitiesResourceOffset;
    /// The type of viewswitch animation in progress, if any
    TGlxViewswitchAnimation iViewAnimationInProgress; 
    
    /// Flag to determine if this view is activated synchronously
    const TBool iSyncActivation;

    //This is a Kind of Hack to prevent Photos to act on any command's till 
    //Corresponding view is activated
    //This Should be fixed with Proper Way
    TBool iViewActivated;

    /// View activate attributes for callback
    TVwsViewId iPrevViewId;
    TUid iCustomMessageId;
    HBufC8* iCustomMessage;

    /// Callback for view activate
	CAsyncCallBack* iViewActivateCallback;
		
	/// Status pane for title
	CAknTitlePane* iTitlePane;
	//used store the grid toolbar
	CAknToolbar* iToolbar;
    };


#endif // C_GLXVIEWBASE_H