diff -r 000000000000 -r d6fe6244b863 screengrabber/inc/SGModel.h --- /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 +#include + +#include +#include +#include +#include +#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 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