AppInc/ImagicContainerBrowser.h
changeset 3 93fff7023be8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AppInc/ImagicContainerBrowser.h	Fri Oct 15 10:18:29 2010 +0900
@@ -0,0 +1,494 @@
+/*
+* Copyright (c) 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: Juha Kauppinen, Mika Hokkanen
+* 
+* Description: Photo Browser
+*
+*/
+
+#ifndef IMAGICCONTAINERBROWSER_H
+#define IMAGICCONTAINERBROWSER_H
+
+//#define ADAPTIVE_FRAMERATE   // adaptive frame rate
+#define MOMENTUM_MOVE
+#define DOUBLETAP_FACEBROWSING
+#define DOUBLETAP_SELECT_IN_GRID
+#define SINGLETAP_CLOSE_IN_ZOOM
+#define FLICK_ONLY_IN_X_IN_GRID
+#define HOLD_SELECTION_ONDRAG
+#undef  CURSORSIMULATION_IN_GRID
+#undef  CURSORSIMULATION_IN_ONEBYONE
+#undef  CURSORSIMULATION_IN_FACEBROWSER
+#undef  SELECT_ON_TOUCHDOWN
+#undef  TAP_AND_GESTURE
+//#undef  DOUBLETAP_ZOOMGRID
+#undef  USE_AVKON_LONGTAP_DETECTOR
+
+//#undef RD_FACEFRAME
+#define RD_FACEFRAME
+#define RD_ZOOMICON
+
+// INCLUDES
+#include <coecntrl.h>
+#include <aknnotewrappers.h>
+#include <aknlongtapdetector.h>
+#include <GLES\egl.h>
+#include "ImagicAppUi.h"
+#include <HWRMLight.h>
+#include "Gesture.h"
+#include "ImagicUtils.h"
+#include "DrawableInterface.h"
+#include "DrawUtility.h"
+#include "CDrawGrid.h"
+#include "CDrawOneByOne.h"
+#include "CDrawFaceBrowsing.h"
+#include "CDrawMagGlass.h"
+
+
+#ifdef USE_AVKON_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#include <touchlogicalfeedback.h>
+#endif
+
+//#define VERTICES_PER_LINE 32
+
+
+// FORWARD DECLARATIONS
+class CImagicViewBrowser;
+class CImagicAppUi;
+class CGLImageHandler;
+class CTextureLoader;
+class CDrawUtility;
+class CDrawGrid;
+class CDrawOneByOne;
+class CDrawFaceBrowsing;
+class CDrawMagGlass;
+
+
+
+// Variables telling how many times keys has been pressed
+class CKeyData
+	{
+public:
+    //void ResetData();
+    
+	//these variables hold number of key presses as long they are consumed
+	//value must be reset after usage
+	TInt iX,iY;		// Movement keys
+	TInt iRotate;	// Rotation keys
+	//TInt iZoom;		// Zooming keys
+	
+	// Tells if button is currently pressed
+	TBool iLeft,iRight;
+	TBool iUp,iDown;
+	//TBool iZoomIn, iZoomOut;
+	TBool iZoomInKey, iZoomOutKey;
+    };
+
+
+// CLASS DECLARATION
+
+/**
+*  CImagicContainerBrowser  container control class.
+*  
+*/
+class CImagicContainerBrowser : public CCoeControl, MCoeControlObserver
+    , MAknLongTapDetectorCallBack
+    , MGestureCallBack
+    {
+    public: // Constructors and destructor
+        
+        //Drawing functions
+        enum TDrawFunction
+            {
+            EGrid,
+            EOneByOne,
+            EFaceBrowser,
+            ELastDrawFunction
+            };
+
+        //Grid Drawing modes
+        enum TGridMode
+            {
+             EListof3 = 1,
+             EListof5,
+             ESquare
+            };
+        
+        /**
+        * EPOC default constructor.
+        * @param aRect Frame rectangle for container.
+        */
+        void ConstructL(CImagicAppUi* aImagicAppUi, CImagicViewBrowser* aView, const TRect& aRect);
+
+        /**
+        * Destructor.
+        */
+        ~CImagicContainerBrowser();
+        
+        //void SetBitmapArrayL(CFbsBitmap* aBitmap);
+        void ImageLoadedL(TInt aError, CFbsBitmap* aBitmap, TThumbSize aResolution/*, TInt aLoadedImageIndex*/);
+        
+        TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+        // Handle any tap on the screen
+        void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+        // From MAknLongTapDetectorCallBack
+        void HandleLongTapEventL(const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation);
+        void HandleGestureBeganL(const TPoint& aPos);
+        void HandleGestureMovedL(const TPoint& aPos, const TGestureType aType);
+        void HandleGestureEndedL(const TPoint& aPos, const TGestureType aType);
+
+        void DoTapAndDrag(const TPoint& aPos, const TGestureType aType);
+        void DoCursorSimulation(const TPoint& aPos, const TGestureType aType);
+        void DoDrag(const TPoint& aPos, const TGestureType aType);
+        void DoFlick(const TPoint& aPos, const TGestureType aType);
+        void DoSingleTap(const TPoint& aPos, const TGestureType aType);
+        void DoDoubleTap(const TPoint& aPos, const TGestureType aType);
+        void DoLongTapping(const TPoint& aPos, const TGestureType aType);
+        void DoLongTap(const TPoint& aPos, const TGestureType aType);
+
+        
+        void SetFullScreen();
+        void SetBitmapFromArrayL();
+        TBool IsOpenGLInit();
+        void OpenGLInitL();
+        void InitL();
+        void DeleteTextures();
+        void DisableDisplayDraw();
+        void EnableDisplayDraw();
+        //void SetGridMode(TGridMode aDrawMode);
+        void SetDrawMode(TDrawFunction aDrawFunction);
+        TDrawFunction GetDrawMode();
+        void SetBGPSStatus(TBool aValue);
+        //void SetTNCreationStarted(TBool aValue);
+        void DeleteImageL();
+        CTextureLoader* GetTextureLoader();
+        void DisplayDeleteQueryDialogL(TInt aResourceId);
+        float GetAspectRatio(TInt aIndex);
+        void SetFaceCoords(RArray<TRect>& aCoordinates);
+        void ClearFaceArray();
+        //void SwapArrays();
+        void SetLoadingOn(TBool aValue);
+        void DynamicLoadingL();
+        void SetDeleteTextures(TBool aValue);
+        //void InitFaceBrowsing();
+        //MRemConCoreApiTargetObserver
+        //void MrccatoCommand(TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction aButtonAct);
+        
+    private: // Functions from base classes
+
+       /**
+        * From CoeControl,SizeChanged.
+        */
+        void SizeChanged();
+
+       /**
+        * From CoeControl,CountComponentControls.
+        */
+        TInt CountComponentControls() const;
+
+       /**
+        * From CCoeControl,ComponentControl.
+        */
+        CCoeControl* ComponentControl(TInt aIndex) const;
+
+       /**
+        * From CCoeControl,Draw.
+        */
+        void Draw(const TRect& aRect) const;
+
+       /**
+        * From CCoeControl, HandleControlEventL.
+        */
+        // event handling section
+        // e.g Listbox events
+        void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+        
+        /**
+         * Callback function for the CPeriodic. Calculates the current frame, keeps the background
+         * light from turning off and orders the CSlideshow to do the rendering for each frame.
+         *@param aInstance Pointer to this instance of CSlideshowContainer.*/
+        static TInt DrawCallBackL( TAny* aInstance );
+        void DrawL();
+        void BeginDrawing();
+        void EndDrawing();
+        
+/*----------------------------------------------------------------------*/
+		void CheckLimits(float &aValue, const float aMin, const float aMax);
+		void SetPictureVertices(CImageData* aData, GLfixed *aVertices);
+		void HandleRotationKeys(void);
+		//void HandleMovingKeysOnebyOne();
+		
+		
+		//void BubbleEffect(TInt& x, TInt& y, float& z);
+        
+        static TInt DisableDrawTimer( TAny* aInstance );
+        static TInt PowerSaveCallBack(TAny *aAnyPtr);
+        void PowerSave();
+        void CheckIndexLimits(TInt &aIndex);
+        void SetQvgaCoordinates(const TPoint &aPoint, const TSize &aSize);
+        void CalculateImageSize2(float& width, float& height, const float aAspectRatio);
+        void InitDrawMagGlass();
+        void DrawMagGlass(const TSize &aScreenPhysicalSize, TReal aImageAspectRatio);
+        void DrawCross(const TSize &aScreenPhysicalSize, const TReal aImageAspectRatio);
+        void SetMinMagFilterLinear(TBool aValue);
+        void SetMinMagFilterLinearDo(TBool aValue);
+        
+
+        void MoveIndex(TInt aMoveX, TInt aMoveY, TBool aWrap = ETrue);
+        void SelectIndex(void);
+        FloatCoords ConvertCoordsFromScreen2OGl(const TPoint aPos);
+        TBool FindImageInGrid(const TPoint aPos, TInt& aResultIndex);
+        TInt GetFreeRam();
+        TBool FindImageInScreen(const TPoint aPos, TInt& aResultIndex);
+        TBool FindNearestImageInOGl(const FloatCoords aPos, TInt& aResultIndex);
+        TBool SetMinMagFilter(CImageData* aImageData, TBool aMagFilterLinear, TInt aIndex);
+        void ShowMagGlass(const TBool aState);
+        
+        void LoadHQ512Image(CImageData* imageData, TInt aIndex);
+        void DrawFaceBrowsingIcon();
+        void DrawZoomIcon();
+        void SetMinMagFiltering();
+        void ResetZoomKeys();
+        void ResetDirKeyData();
+        void HandleDrawingModeSwitch(TDrawFunction& aDrawFunction);
+        void LoadHighResImage(CImageData* imageData, TInt aIndex);
+        //void CheckIndexLimits(TInt &aIndex);
+        
+    public:      
+        void SetDrawFreqToNormal(TInt aTimerDelay);
+        TInt UpdateScreenDrawFreq();
+        void CalculateImageSize(float& width, float& height, const float aAspectRatio);
+        void HandleRotation(float& aRotationAngle, float& aTargetRotationAngle);
+        void SetCurrentFaceNro(TInt aNro);
+        void GetCurrentFilenameL(TFileName& aFilename, TThumbSize aRes);
+        void ConvertScreenCoords2QvgaCoords(TPoint& aPoint, TRect& aRect);
+        TBool FindNearestFace(const TPoint aPos, TInt& aResultIndex);
+        void SetLastTouchPoint(const TPoint& aPos);
+        TPoint GetLastTouchPoint(void);
+        void SetTextIndex(GLuint aIndex);
+        void IconTexturesLoaded(RArray<GLuint> aIconTexIndex);
+        void Interpolate(float &aValue, const float aTarget, const float aStep);
+        TBool GetScreenOrientation();
+        void InitAfterPowerSaveL();
+        void NewImageAdded();
+        void ImageListChanged(TInt aIndex, TBool bAdded);
+#ifdef _ACCELEROMETER_SUPPORTED_
+        TImagicDeviceOrientation CImagicContainerBrowser::GetDeviceOrientation();
+        void PhoneRotated(TImagicDeviceOrientation aDeviceOrientation);
+#endif
+        TBool IsHwAcceleration();
+        void HandleSend2BackgroundEvent();
+        void InitFaceBrowsing();
+        TBool IsTouchPointThresholdExeed();
+        float GetDisplayRotTargetAngle();
+        float GetDisplayRotAngle();
+        void SetDisplayRotAngle(float aValue);
+        TReal GetMaxX() const;
+        
+        CKeyData& GetKeyData();
+        void SetKeyData(CKeyData aData);
+        void ResetKeyData();
+        
+        CKeyData& GetTouchData();
+        void SetTouchData(CKeyData aData);
+        void ResetTouchData();
+                
+        TBool GetSlideByDragValue();
+        TInt GetCurrentIndex();
+        TInt GetPrevIndex();
+        void SetCurrentIndex(TInt aIndex);
+        void SetPrevIndex(TInt aIndex);
+        TInt GetGleMaxRes();
+        void ResetHighResLoading();
+        void DynamicUnLoading();
+        TBool IsUserInputGiven();
+        TSize GetScreenSize();
+        void SetScreenImmeadetaUpdate(TBool aValue);
+       
+/*----------------------------------------------------------------------*/
+        
+    private: //data
+        CImagicAppUi*           iImagicAppUi;//App UI class pointer
+        CIEEngine*              iIEngine;
+        CImagicViewBrowser*     iView;//Browser view class pointer
+        //CTextureLoader*			iTextureLoader;
+        CGesture*               iGesture;
+        CDrawUtility*           iDrawUtility;
+        
+    friend class CTextureLoader;
+        CTextureLoader*         iTextureLoader;
+    friend class CDrawGrid;
+        CDrawGrid*              iDrawGrid;
+    friend class CDrawOneByOne;
+        CDrawOneByOne*          iDrawOneByOne;
+    friend class CDrawFaceBrowsing;
+        CDrawFaceBrowsing*      iDrawFaceBrowsing;
+    friend class CDrawMagGlass;
+        //CDrawMagGlass*          iDrawMagGlass;
+        
+        
+        
+        
+    private: //data
+/*----------------------------------------------------------------------*/
+       //OpenGL valiables
+	   //Flag that indicates if OpenGL ES has been initialized or not.
+	    TBool iOpenGlInitialized;
+	    //Display where the OpenGL ES window surface resides.
+	    EGLDisplay  iEglDisplay;
+	    //Window surface where the OpenGL ES rendering is blitted to.
+	    EGLSurface  iEglSurface;
+	    // OpenGL ES rendering context.
+	    EGLContext  iEglContext;
+	    //Active object that is the timing source for the animation.
+	    CPeriodic*  iPeriodic;
+	    CPeriodic*  iPowerSavePeriodic;
+/*----------------------------------------------------------------------*/	    
+	    
+        //Variables used to calculate time
+        GLfloat     	    iLastTime;
+        GLfloat     	    iTimeNow;
+        GLfloat     	    iTimeDiff;
+
+/*----------------------------------------------------------------------*/
+        //Variables for OneByOne init
+        TBool               iOnTheEdge;
+        TBool               iTouchPointThreshold;
+        TBool               iKeyPressedDown;
+
+/*----------------------------------------------------------------------*/
+        TInt				iCurrentIndex;// Selected picture index
+		TInt                iPreviousIndex;// One before selected picture index
+		
+/*----------------------------------------------------------------------*/		
+		
+				
+		//Draw function enum, OneByOne and Grid implemented, add here more when new draw function are created
+		enum TDrawFunction	iDrawFunction;
+		
+		
+		//Struct for KeyData, this struct holds all data for key events handling
+		CKeyData		    iTouchMoveData;
+		CKeyData            iKeyData;
+		
+		float               iDisplayRotation;//This controls the whole display rotation, not single picture
+		float               iDisplayRotationTarget;//Display target rotation angle
+		TBool               iScreenRotateOngoing;
+		TReal               iScreenAspectRatio;
+		TSize               iScreenSize;
+		
+		TBool               iTNCreationComplete; // Set TRue if TNs are created
+        RCriticalSection    iDrawLock;
+        
+        //Texture related variables
+        GLuint              iCurrentBindedIndex;
+        TInt                iLoadingTextureIndex; // texture to draw if no image exist
+        TInt                iExitTextureIndex; // texture to draw if no image exist
+        TInt                iMenuTextureIndex; // texture to draw if no image exist
+#ifdef SHADOW_PHOTOS        
+        TInt                iShadowTextureIndex;
+#endif        
+        TInt                iDisplayDrawFreq;
+        GLint               iGLMaxRes;//OpenGL max texture resolution
+ 
+//        CRemConInterfaceSelector* iSelector;
+//        CRemConCoreApiTarget* iTarget;
+       
+       //When set on drawing is enabled
+       TBool                iDrawNow;
+
+       //Image loading related flags
+       TBool                iDynamicLoadingOn;//Set on for dynamic loading
+       TBool                iNewImageAdded;//New image added to array
+       TInt                 iIsLoaderRunning;
+       
+       TBool                iMagFilterLinear;//Set on when linear filtering is wanted
+       
+       RArray<GLuint>       iIconTextureIndexes;//Array to hold icon textures
+       TBool                iMinMagFilterSetting;
+       TBool                iPreferHighResLoading;//Set this on when want to load high resolution image(stops loading low res images)
+       
+       
+#ifdef USE_AVKON_LONGTAP_DETECTOR
+       CAknLongTapDetector* iLongTapDetector;
+#endif
+#ifdef USE_AVKON_TACTILE_FEEDBACK
+       MTouchFeedback*      iTouchFeedBack;
+#endif
+       
+       TPoint               iLastTouchPoint;
+       
+#ifdef HOLD_SELECTION_ONDRAG
+       TBool                iHoldSelection;
+       TBool                iOneByOneSlideByDrag;
+#endif
+#ifdef MOMENTUM_MOVE
+       TBool                iMomentumMove;
+       float                iMomentumSpeedX;
+       float                iMomentumSpeedY;
+#endif
+       
+       TReal                    iDeviceOrientationAngle;
+#ifdef _ACCELEROMETER_SUPPORTED_
+	   TImagicDeviceOrientation iDeviceOrientation;
+	   TImagicDeviceOrientation iDeviceOrientationPrev;
+#else
+	   TBool                    iDeviceOrientation;
+#endif
+	   
+#ifdef ADAPTIVE_FRAMERATE
+	   TInt                     iWaitDrawTicks;
+#endif	   
+	   
+	   //Remove these
+	   TBool               iIntheEndOfGrid;
+       TBool               iJumpOver;
+	   TInt                iDrawOnes;
+	   
+	   TBool               iUserInputGiven;
+	   TBool               iDeleteTextures;
+	   TBool               iScreenImmeadetaUpdate;
+	   
+	   TReal               drawZoom;
+	   TReal               inPictureX;
+	   TReal               inPictureY;
+	   
+	   TBool               iLastEventFromKeys;
+	   
+	   //Class consts
+	   static const GLfixed iGlobalTexCoords[4*2];
+       static const float KMinOneByOneZoom;
+       static const float KMaxOneByOneZoom;
+	   static const TInt  KDoubleTapZoomOneByOne1;
+       static const TInt  KDoubleTapZoomOneByOne2;
+       static const TReal KAngle2Start128Loading;
+       static const TReal KAngle2Start128LoadingHwAcc;
+       static const float KSpacingX;// Picture spacing in the grid
+       static const float KSpacingY;// Picture spacing in the grid
+       static const float KSpacingYTarget;
+       static const float KSpacingXTarget;
+       // Space between pictures in one by one
+       static const float KOneByOneSpacing;
+       static const TInt  KGridSizeY;
+       
+       static /*const*/ TInt  K512TNImageBuffer;
+       static const TInt  K128TNImageBuffer;
+       static /*const*/ TInt  K32TNImageBuffer;
+       static /*const*/ TInt  K32TNImageUnLoadBuffer;
+       
+    };
+
+#endif
+
+// End of File