screengrabber/inc/sgengine.h
branchRCL_3
changeset 21 b3cee849fa46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/screengrabber/inc/sgengine.h	Tue Aug 31 15:15:20 2010 +0300
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#ifndef SGENGINE_H
+#define SGENGINE_H
+
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+#include <w32std.h>
+#include <mdaaudiotoneplayer.h> 
+#include <qsymbianevent.h>
+
+
+class CFrameImageData;
+class CDictionaryFileStore;
+class CImageEncoder;
+class EngineWrapper;
+
+
+// setting keys (do not change uids of existing keys to maintain compatibility to older versions!)
+const TUid KSGSettingCaptureMode                            = { 0x00 };
+
+const TUid KSGSettingSingleCaptureHotkey                    = { 0x01 };
+const TUid KSGSettingSingleCaptureImageFormat               = { 0x02 };
+const TUid KSGSettingSingleCaptureMemoryInUseMultiDrive     = { 0x04 };
+const TUid KSGSettingSingleCaptureFileName                  = { 0x05 };
+
+const TUid KSGSettingSequantialCaptureHotkey                = { 0x06 };
+const TUid KSGSettingSequantialCaptureImageFormat           = { 0x07 };
+const TUid KSGSettingSequantialCaptureDelay                 = { 0x08 };
+const TUid KSGSettingSequantialCaptureMemoryInUseMultiDrive = { 0x0A };
+const TUid KSGSettingSequantialCaptureFileName              = { 0x0B };
+
+const TUid KSGSettingVideoCaptureHotkey                     = { 0x0C };
+const TUid KSGSettingVideoCaptureVideoFormat                = { 0x0D };
+const TUid KSGSettingVideoCaptureMemoryInUseMultiDrive      = { 0x0F };
+const TUid KSGSettingVideoCaptureFileName                   = { 0x10 };
+
+const TUid KUidScreenGrabber = { 0x101FB751 };
+
+
+#define TRANSPARENCY_INDEX 30
+#define TRANSPARENCY_ALTERNATIVE_INDEX 24
+
+enum TScreenGrabberSettingCaptureModes
+    {
+    ECaptureModeSingleCapture = 0,
+    ECaptureModeSequantialCapture,
+    ECaptureModeVideoCapture
+    };
+    
+enum TScreenGrabberSettingHotkeys
+    {
+    EHotkeySendKey = 0,
+    EHotkeyPowerKey,
+    EHotkeySideKey,
+    EHotkeyCameraKey1
+    };
+
+enum TScreenGrabberSettingImageFormats
+    {
+    EImageFormatPNG = 0,
+    EImageFormatJPGHQ,
+    EImageFormatJPGLQ,
+    EImageFormatBMP,
+    EImageFormatGIF,
+    EImageFormatMBM
+    };
+
+enum TScreenGrabberSettingVideoFormats
+    {
+    EVideoFormatAnimatedGIF = 0
+    };
+
+enum TScreenGrabberSettingMultiDrive
+	{
+	EPhoneMemory = 0,
+	EMemoryCard
+	};
+	
+
+class TGrabSettings
+    {
+public:
+    TInt            iCaptureMode;
+    
+    TInt            iSingleCaptureHotkey;
+    TInt            iSingleCaptureImageFormat;
+    TInt            iSingleCaptureMemoryInUseMultiDrive;
+    TFileName       iSingleCaptureFileName;
+
+    TInt            iSequantialCaptureHotkey;
+    TInt            iSequantialCaptureImageFormat;
+    TInt            iSequantialCaptureDelay;
+    TInt            iSequantialCaptureMemoryInUseMultiDrive;
+    TFileName       iSequantialCaptureFileName;
+
+    TInt            iVideoCaptureHotkey;
+    TInt            iVideoCaptureVideoFormat;
+    TInt		    iVideoCaptureMemoryInUseMultiDrive;
+    TFileName       iVideoCaptureFileName;
+    };
+
+class TVideoFrame
+    {
+public:
+    TUint       iWidth;
+    TUint       iHeight;
+    TUint       iXPos;
+    TUint       iYPos;
+    TUint       iDelay; // 1000 = 1 sec
+    TBool       iEnableTransparency;
+    TBool       iFillsWholeScreen;
+    TFileName   iFileStorePath;
+    };
+
+
+typedef CArrayFixSeg<TVideoFrame> CVideoFrameArray;
+
+/**
+ *  CEngine
+ * 
+ */
+class SGEngine : public CActive //, public MMdaAudioToneObserver
+    {
+    
+    // active object states
+
+    enum TState 
+        {
+        EIdle = 0,              // do nothing
+        EEncodingImage,         // ICL encoding of an image
+        ESequenceDelay,         // waiting till next capture
+        ECancelCapturing,       // asking to cancel capturing
+        ENextVideoFrame,        // get next frame for video
+        ECancelVideoCapturing,  // asking to cancel video capturing  
+        EQueryDelay             // waiting till to remove query
+        };
+    
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~SGEngine();
+
+    /**
+     * Two-phased constructor.
+     */
+    static SGEngine* NewL(EngineWrapper *aEngineWrapper);
+
+    /**
+     * Two-phased constructor.
+     */
+    static SGEngine* NewLC(EngineWrapper *aEngineWrapper);
+    
+    /**
+     * returns current settings
+     */
+    inline TGrabSettings GrabSettings(){ return iGrabSettings; };
+    
+    /**
+     * saves settings to engine
+     */
+    void SaveSettingsL(TGrabSettings aGrabSettings);
+    
+    /**
+     * takes one screen shot
+     */
+    bool TakeScreenShotAndSaveL();
+
+    TBool DriveOK(TDriveNumber aNumber);
+    
+    TBool IsDriveMMC(TDriveNumber aDrive);
+    
+#if defined(HB_QT_S60_EVENT_FILTER)
+    TBool HandleCaptureCommandsL(const TWsEvent* aEvent);
+#else
+    TBool HandleCaptureCommandsL(const QSymbianEvent *event);
+#endif
+	
+    
+    void ActivateModelL();
+    void DeActivateModelL();
+    void ActivateCaptureKeysL(TBool aChangeKey=EFalse);
+	void EnableRcpOfFoc(TBool aState);
+    void LoadSettingsL();
+	
+private:
+
+    void CapturingFinishedL(TInt aErr);
+
+    void RunL();
+    void DoCancel();
+    void SaveVideoL(TInt aErr);
+    void CleanTemporaryFilesL();
+    void LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TInt& aValue);
+    void LoadDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, TDes& aValue); 
+
+    void SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TInt& aValue);
+    void SaveDFSValueL(CDictionaryFileStore* aDicFS, const TUid& aUid, const TDes& aValue);
+
+    void CancelCapturing();
+    void CaptureFrameForVideoL();
+	
+    
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    SGEngine();
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL(EngineWrapper *aEngineWrapper);
+    
+    
+private:
+	RFs 		  iFileSession;
+
+    CActiveScheduler* iActiveScheduler;
+	CActiveSchedulerWait* iWait;
+ 
+    TGrabSettings           iGrabSettings;              // a simple class to store the settings used in the screen capture
+    RWindowGroup            iRootWin;                   // application's window group
+    TInt                    iCapturedKey;               // a handle to the key which is captured
+    TInt                    iCapturedKeyUnD;            // a handle to the key which is captured, up and down
+    TInt                    iCapturedKeyHash;           // a handle to the hash key which is captured
+    TInt                    iCapturedKeyHashUnD;        // a handle to the hash key which is captured, up and down
+    TBool                   iHashKeyCapturingActivated; // captures hash key is activated    
+    CFbsBitmap*             iPreviouslyCapturedBitmap;  // a previously captured bitmap
+    TFileName               iSaveFileName;   
+    CImageEncoder*          iImageEncoder;              // engine from ICL to do the image conversion// target filename of the taken screen shot
+    CFrameImageData*        iFrameImageData;            // frame and image block data needed by ICL
+    TState                  iState;                     // state of this active object
+    TBool                   iHashKeyDown;               // stores state if hash key is currently down
+    TBool                   iCapturingInProgress;       // boolean to check if capturing is in progress
+    TBool                   iStopCapturing;             // boolean to specify if to ask capturing
+    TUint                   iNumberOfTakenShots;        // a number of the taken screen shots in the sequantial mode
+    RTimer                  iTimer;                     // a timer for async delays
+    TUint                   iCurrentFrameNumber;        // a number of taken frames in video mode
+    TTime                   iPreviousFrameTaken;        // time when the last frame was taken
+    TSize                   iVideoDimensions;           // dimension of the video
+    TSize                   iPreviousFrameScreenDimension; // dimension of the screen in previous frame
+    CVideoFrameArray*       iVideoFrameArray;           // the frames of the video
+    EngineWrapper*          iEngineWrapper;             // Eninewrapper that is used for communicating between QT and Symbian
+    };
+
+
+
+
+
+#endif // SGENGINE_H