screengrabber/inc/SGModel.h
changeset 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/screengrabber/inc/SGModel.h	Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,242 @@
+/*
+* 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:
+*
+* Description:  
+*
+*/
+
+
+
+#ifndef __SCREENGRABBER_MODEL_H__
+#define __SCREENGRABBER_MODEL_H__
+
+#include <e32std.h>
+#include <e32base.h>
+
+#include <CAknMemorySelectionSettingPage.h>
+#include <eikenv.h>
+#include <mdaaudiotoneplayer.h>
+#include <bamdesca.h>
+#include "SGStd.h"
+
+
+#define TRANSPARENCY_INDEX 30
+#define TRANSPARENCY_ALTERNATIVE_INDEX 24
+
+
+// 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 KSGSettingSingleCaptureMemoryInUse               = { 0x03 };
+const TUid KSGSettingSingleCaptureMemoryInUseMultiDrive     = { 0x04 };
+const TUid KSGSettingSingleCaptureFileName                  = { 0x05 };
+
+const TUid KSGSettingSequantialCaptureHotkey                = { 0x06 };
+const TUid KSGSettingSequantialCaptureImageFormat           = { 0x07 };
+const TUid KSGSettingSequantialCaptureDelay                 = { 0x08 };
+const TUid KSGSettingSequantialCaptureMemoryInUse           = { 0x09 };
+const TUid KSGSettingSequantialCaptureMemoryInUseMultiDrive = { 0x0A };
+const TUid KSGSettingSequantialCaptureFileName              = { 0x0B };
+
+const TUid KSGSettingVideoCaptureHotkey                     = { 0x0C };
+const TUid KSGSettingVideoCaptureVideoFormat                = { 0x0D };
+const TUid KSGSettingVideoCaptureMemoryInUse                = { 0x0E };
+const TUid KSGSettingVideoCaptureMemoryInUseMultiDrive      = { 0x0F };
+const TUid KSGSettingVideoCaptureFileName                   = { 0x10 };
+
+
+class CImageEncoder;
+class CFbsBitmap;
+class CFrameImageData;
+class CAknGlobalConfirmationQuery;
+class CSavedQuery;
+class CDictionaryFileStore;
+class CMGXFileManager;
+class CMGXFileNotificationHandler;
+
+class TGrabSettings
+    {
+public:
+    TInt                                        iCaptureMode;
+    
+    TInt                                        iSingleCaptureHotkey;
+    TInt                                        iSingleCaptureImageFormat;
+    CAknMemorySelectionSettingPage::TMemory     iSingleCaptureMemoryInUse; 
+    TDriveNumber                                iSingleCaptureMemoryInUseMultiDrive;
+    TFileName                                   iSingleCaptureFileName;
+
+    TInt                                        iSequantialCaptureHotkey;
+    TInt                                        iSequantialCaptureImageFormat;
+    TInt                                        iSequantialCaptureDelay;
+    CAknMemorySelectionSettingPage::TMemory     iSequantialCaptureMemoryInUse; 
+    TDriveNumber                                iSequantialCaptureMemoryInUseMultiDrive;
+    TFileName                                   iSequantialCaptureFileName;
+
+    TInt                                        iVideoCaptureHotkey;
+    TInt                                        iVideoCaptureVideoFormat;
+    CAknMemorySelectionSettingPage::TMemory     iVideoCaptureMemoryInUse; 
+    TDriveNumber                                iVideoCaptureMemoryInUseMultiDrive;
+    TFileName                                   iVideoCaptureFileName;
+    };
+
+
+class TVideoFrame
+    {
+public:
+    TUint       iWidth;
+    TUint       iHeight;
+    TUint       iXPos;
+    TUint       iYPos;
+    TUint       iDelay; // 100 = 1 sec
+    TBool       iEnableTransparency;
+    TBool       iFillsWholeScreen;
+    TFileName   iFileStorePath;
+    };
+
+
+typedef CArrayFixSeg<TVideoFrame> CVideoFrameArray;
+
+
+class CScreenGrabberModel : 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:
+	static CScreenGrabberModel* NewL();
+	~CScreenGrabberModel();
+	void ActivateModelL();
+	void DeActivateModelL();
+
+private:
+	CScreenGrabberModel();
+	void ConstructL();
+
+	void RunL();
+	void DoCancel();
+
+    void LoadSettingsL();
+    void TakeScreenShotAndSaveL();
+    void CaptureFrameForVideoL();
+    void SaveVideoL(TInt aErr);
+    void CapturingFinishedL(TInt aErr);
+    void CleanTemporaryFilesL();
+    TBool MemoryCardOK();
+    TBool DriveOK(TDriveNumber aNumber);
+    void PlayBeepSound();
+    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);
+    TInt UpdateFileToGallery(const TDesC& aFullPath);
+
+public:
+    inline TGrabSettings GrabSettings() { return iGrabSettings; }
+    void SaveSettingsL(TGrabSettings aGrabSettings);
+    void ActivateCaptureKeysL(TBool aChangeKey=EFalse);
+    void CancelCapturing();
+    TBool HandleCaptureCommandsL(const TWsEvent& aEvent);
+    void MatoPrepareComplete(TInt aError);
+    void MatoPlayComplete(TInt aError);
+
+private:
+    CMdaAudioToneUtility*   iMdaAudioToneUtility;       // a tone player
+    TGrabSettings           iGrabSettings;              // a simple class to store the settings used in the screen capture
+    CEikonEnv*              iEnv;                       // pointer to our eikon environment
+	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
+	CImageEncoder*          iImageEncoder;              // engine from ICL to do the image conversion
+    CFbsBitmap*             iPreviouslyCapturedBitmap;  // a previously captured bitmap
+	TState                  iState;                     // state of this active object
+    TFileName               iSaveFileName;              // target filename of the taken screen shot
+    CFrameImageData*        iFrameImageData;            // frame and image block data needed by ICL
+    CSavedQuery*            iSavedQuery;                // a class to display global queries
+	RTimer                  iTimer;                     // a timer for async delays
+    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
+    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
+    TBool                   iHashKeyCapturingActivated; // captures hash key is activated
+    TBool                   iHashKeyDown;               // stores state if hash key is currently down
+    TBool                   iGalleryUpdaterSupported;   // specifies if it is possible to update the file to gallery
+    TBool                   iGalleryUpdaterInitialized; // specifies if gallery updater has been initialized or not
+    RLibrary                iGalleryUpdaterDLL;         // specifies pointer to Media Gallery File API DLL
+    CMGXFileManager*        iMGXFileManager;            // Media Gallery FileManager instance
+    };
+
+
+class CSavedQuery : public CActive
+    {
+public:
+    static CSavedQuery* NewL();
+    ~CSavedQuery();
+    void DisplayL(const TDesC &aText, TBool aDisplayErrorNote=EFalse);
+
+private:
+    void DoCancel();
+    void RunL();
+
+private: 
+    CSavedQuery();
+    void ConstructL();
+    void DisplayWithGraphicsL(const TDesC &aText, TBool aDisplayErrorNote);
+    void DisplayWithoutGraphicsL(const TDesC &aText);
+
+private:
+    CAknGlobalConfirmationQuery*    iGlobalConfirmationQuery;
+    TBool                           iVisible;
+    };
+
+
+// these classes have been copied Media Gallery File API
+
+class MGXFileManagerFactory
+    {
+    public:
+        static CMGXFileManager* NewFileManagerL( RFs& aFs );
+        static 
+            CMGXFileNotificationHandler* NewFileNotificationHandlerL();
+    };
+
+class CMGXFileManager : public CBase
+    {
+    public:
+        virtual TBool SuccessFileNameL( const TDesC& aFileName,
+                                        TDriveNumber aDrive ) = 0;
+        virtual void UpdateL() = 0;
+        virtual void UpdateL( const TDesC& aFullPath ) = 0;
+        virtual void UpdateL( const TDesC& aOldName,
+                              const TDesC& aNewName ) = 0;
+        virtual void UpdateL( const MDesCArray& aFileNameArray ) = 0;
+    };
+
+
+#endif // __SCREENGRABBER_MODEL_H__
\ No newline at end of file