diff -r 48060abbbeaf -r b3cee849fa46 screengrabber/inc/sgengine.h --- /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 +#include +#include +#include +#include +#include + + +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 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