photosgallery/viewframework/views/zoomview/inc/glxzoomcontrol.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 15 Jul 2010 18:39:01 +0300
branchRCL_3
changeset 23 b023a8d2866a
parent 21 f9e827349359
permissions -rw-r--r--
Revision: 201025 Kit: 2010127

/*
* 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:    Definition of CGlxZoomControl
 *
*/


#ifndef C_GLXZOOMCONTROL_H
#define C_GLXZOOMCONTROL_H

// INCLUDES

#include <w32std.h>            // For TEventCode

#include <alf/alfcontrol.h>
#include <alf/ialfwidgeteventhandler.h>
#include <gestureobserver.h>
#include <gesturehelper.h>

#include <mglxtextureobserver.h>
#include <mglxmedialist.h>
#include <mglxzoomeventhandlers.h>
#include <glxfullscreenview.hrh>
#include <glxzoomeventhandler.h>
#include <mglxtvobserver.h>     // for inteface MGlxTvObserver
#include "glxrequestfreegoom.h"
//Gesture Helper namespace
namespace GestureHelper
    {
    class CGestureHelper;
    }


namespace Alf
    {
    class IAlfViewWidget;
    class IMulSliderWidget;
    class IMulSliderModel;
    class IAlfWidgetEventHandler;
    }
// FORWARD DECLARATIONS
class CGlxDefaultAttributeContext;
class CGlxUiUtility;
class MGlxUiCommandHandler;
class CAlfImageVisual;
class CAlfViewportLayout;
class TAlfImage;
class CEikButtonGroupContainer;
class CGlxTextureManager;
class CGestureHelper;
class MGestureObserver;

class CGlxTv;
using namespace Alf;

// Commands sent to the view in response to zoom keys
const TInt KGlxZoomInCommand    = 1 ;
const TInt KGlxZoomOutCommand   = 2 ;
const TInt KGlxZoomOrientationChange   =3;
const TInt KGlxVerticalImageOrientationThreshold   = 4 ;

/**
 * Control for zooming in the FullScreen view.
 * @ingroup glx_view_zoomed_view
 */
class CGlxZoomControl : public CAlfControl,
                        public IAlfWidgetEventHandler,
                        public MGlxTextureObserver,
                        public MGlxZoomEventHandlers,
                        public GestureHelper::MGestureObserver,
                        public MGlxTvObserver,
                        public MGoomNotifierObserver
    {
public:
    // Constructors and destructor
    /**
    * Two-phased constructor.
    * @param aCommandHandler: Handler for commands.
    * @param aMediaList     : Reference to media list.
    * @param aZoomKeys      : Reference to Back Key.
    * @param aSliderWidget  : Reference to  slider widget created in fullscreen view.
    */
    IMPORT_C static CGlxZoomControl* NewL(
    MGlxUiCommandHandler& aCommandHandler,
    MGlxMediaList& aMediaList,CEikButtonGroupContainer& aZoomKeys,
    IMulSliderWidget& aSliderWidget, GestureHelper::CGestureHelper* aGestureHelper);

    /**
    * Destructor.
    */
    ~CGlxZoomControl();

    /**
    * Show the control and begin zooming in.
    * @param aIntialZoomLevel:The Initial Zoom Level shown when zoom is active from full screen view.
    * @param aTap            :if the zoom was launched by tapping or by pressing volume key.
    * @param aViewingMode	 :if the image is opened from imgviewer or not
	*/
    IMPORT_C void ActivateL(TInt aIntialZoomRatio,TZoomStartMode aStartMode,TInt aFocusIndex, 
                                    TGlxMedia& aItem,  TPoint* aZoomFocus = NULL
                                    ,TBool aViewingMode = EFalse);

    /**
    * Hide the control and disable zooming.
    */
    IMPORT_C void Deactivate();

    /**
    * to check if the zoom  control is activated?
    */
    IMPORT_C TBool Activated();

    /**
    * Zoom Foreground event handling function
    * @param aForeground: value signify if it is in foreground or not.
    */
    IMPORT_C void HandleZoomForegroundEvent(TBool aForeground);

    void UpdateViewPort(
            TPoint& aViewPortTopLeft ,
            TInt aTransitionTime ,
            TSize  *apViewPortDimension = NULL,
            TInt aPrimarySliderLevel = -1);

    /**
    * Retrieve the UI State of the Zoom view 
    */
    IMPORT_C TUiState ZoomUiState();

private:// From MGlxTvObserver
    virtual void HandleTvStatusChangedL ( TTvChangeType aChangeType );

private:  // From CAlfControl
    TBool OfferEventL(const TAlfEvent &aEvent);

    void VisualLayoutUpdated(CAlfVisual &aVisual);

private:  //From IAlfWidgetEventHandler
    AlfEventStatus offerEvent( CAlfWidgetControl& /*aControl*/, const TAlfEvent& aEvent );

    bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;

    void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData );

    AlfWidgetEventHandlerInitData* eventHandlerData();

    void setActiveStates( unsigned int aStates );

    IAlfInterfaceBase* makeInterface( const IfId& aType );

    AlfEventHandlerType eventHandlerType() ;

    AlfEventHandlerExecutionPhase eventExecutionPhase() ;

private: // From MGlxTextureObserver
    void TextureContentChangedL( TBool aHasContent , CAlfTexture* aNewTexture);

private: // From MGlxZoomEventHandlers
    void HandleViewPortParametersChanged(TPoint& aViewPortTopLeft ,
            TInt aTransitionTime ,
            TSize  *apViewPortDimension = NULL,
            TInt aPrimarySliderLevel = -1);

    void HandleShowUi(TBool aShow= EFalse) ;

    void HandleZoomOutL(TInt aCommandId);    
    
private:
        /*
        * Call back function for the CPeriodic
        */
       static TInt TimeOut(TAny* aSelf);
       void ActivateFullscreen();
       void StartZoomAnimation(TZoomStartMode aStartMode);

private:
    /**
    * C++ default constructor.
    */
    CGlxZoomControl(MGlxUiCommandHandler& aCommandHandler,
            MGlxMediaList& aMediaList,CEikButtonGroupContainer& aZoomKeys,
            IMulSliderWidget& aSliderWidget, GestureHelper::CGestureHelper* aGestureHelper);
    /**
    * Does the necessary Initialization of iUiUtility,control group and the Media list.
    */
    void ConstructL();
    /**
    * Creation of zoomvisual:creates the zoom visual and sets the Black Background behind the image
    * and also sets the ViewPort Layout.
    */
    void CreateZoomVisualL();
    /**
    * Turn the UI/Screen Furniture[Back Key/Slider] on
    */
    void ShowUi(TBool aShow);

    /**
    * Cleanup function resets all the memeber variable on deactivating the ZoomControl
    */
    void CleanUpVisual();

    /*
    * Get Orientation of the file ,
    * This code is DUPLICATE and second copy implemented in bitmapdecoder,
    * Got to plan for removing this duplicacy
    */
    TUint16 GetOrientationL(const TDesC& aFileName) ;

    /*
    * This Function Shows/Hides the zoom
    * by setting the level of Opacity
    */
    void ShowZoom(TBool aShow);

    /*
    * Retrieves the Screensize with the help of Alf utility
    */
    TSize ScreenSize();

    void HandleGestureL( const GestureHelper::MGestureEvent& aEvent );

    TBool HandlePointerEventsL(const TAlfEvent &aEvent);
    
    TReal32 GetInitialZoomLevel(TSize& aSize );
    
    /*
    * Does the zoom out on pinch released event
    */
    void HandleHDMIGestureReleased();
    
    /*
     * @ Notification from MGoomNotifierObserver
     */
    void HandleGoomMemoryReleased(TInt aStatus);
    
private:    // Data
    CAlfEnv* iEnv;                                      // AlfEnv
    MGlxMediaList& iMediaList;                          // Medialist (not owned)
    GestureHelper::CGestureHelper* iGestureHelper;                     // Attribute context for image dimensions
    IMulSliderModel* iZoomSliderModel;                  // Zoom slider model
    IMulSliderWidget& iZoomSliderWidget;                // Zoom slider Widget
    CEikButtonGroupContainer* iZoomBackKey;             // Back zoom soft key(not owned)
    CGlxDefaultAttributeContext* iAttributeContext;     // Attribute context for image dimensions

    CAlfDisplay* iDisplay;                              // Alf Display
    CGlxUiUtility* iUiUtility;                          // UI utility
    CGlxTextureManager* iTextureMgr;                    // TextureManager
    CAlfControlGroup* iControlGroup;                    // Control group for the Zoom control

    CAlfViewportLayout* iViewPort;                      // Parent Layout for Zooming/Panning
    CAlfImageVisual* iImageVisual;                      // Child visual for normal image items (not owned)
    CAlfTexture* iImageTexture;                         // Texture to be zoomed

    TBool iIsdrag;                                      // To determine if drag occured to evaluate the single tap
    TBool iZoomActive;                                  // This variable is updated when Zoom is activated.
    TSize iOriginalDimensions;

    MGlxUiCommandHandler& iCommandHandler;              // For Handling ZoomOut commands
    CGlxZoomPanEventHandler* iEventHandler;             // The event handler for the Zoom Pan Engine

    TSize iScreenSize;
    TBool iMultiTouchGestureOngoing;
    CGlxTv*  iGlxTvOut;
    CPeriodic* iTimer;
    TBool iZoomIn;
    CGlxRelaseGPUMemory* iGPUMemMonitor;
    };

#endif  // C_GLXZOOMCONTROL_H

// End of File