imagingandcamerafws/imagingfws/src/Test/TImageViewer/TImageViewer.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/imagingfws/src/Test/TImageViewer/TImageViewer.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,407 @@
+// Copyright (c) 1997-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 __TVIDEO_H__
+#define __TVIDEO_H__
+
+#include <eikappui.h>
+#include <eikapp.h>
+#include <techview/eikcfdlg.h>
+#include <eikdoc.h>
+
+#include <imageconversion.h>
+#include <bitmaptransforms.h>
+
+#include <timageviewer.rsg>
+#include "TImageViewer.hrh"
+
+const TUid KUidTVideo={ 0x101F45EA };
+
+// class CVideoAppView
+
+class CVideoAppView : public CCoeControl, public MCoeControlBrushContext
+    {
+public:
+	static CVideoAppView* NewL(const TRect& aRect);
+	~CVideoAppView();
+	void Reset(TDrawNow aDrawNow=EDrawNow);
+	void DrawImage(CFbsBitmap* aBitmap, const TPoint& aOffset, TDrawNow aDrawNow=EDrawNow);
+	void DrawImage(CFbsBitmap* aBitmap, CFbsBitmap* aMask, const TPoint& aOffset, TDrawNow aDrawNow=EDrawNow);
+	TBool ResizeL(const TSize& aNewSize, TBool aClear=ETrue, TDrawNow aDrawNow=EDrawNow);
+	void Clear(TBool aClearFull=ETrue, TDrawNow aDrawNow=EDrawNow);
+	void MoveBy(const TPoint& aRelMove, TDrawNow aDrawNow=EDrawNow);
+	void Center(TDrawNow aDrawNow=EDrawNow);
+	TBool SetBackgroundColor(const TRgb& aColor, TDrawNow aDrawNow=EDrawNow);
+	void SetDisplayModeL(TDisplayMode aDisplayMode, CWsBitmap* aFrame, TDrawNow aDrawNow=EDrawNow);
+	TDisplayMode DisplayMode() const { return iDisplayMode; }
+protected:
+	CVideoAppView();
+    void ConstructL(const TRect& aRect);
+	void ResizeBufferL(const TSize& aNewSize, TDisplayMode aDisplayMode);
+	void EnsureSizeInTwipsSet(CFbsBitmap* aBitmap) const;
+// from CCoeControl
+	void Draw(const TRect& aRect) const;
+protected:
+	CFbsBitmap* iBmBuffer;
+	CFbsDevice* iBmDevice;
+	CFbsBitGc*	iBmGc;
+	TRect		iBmRect;
+	TRgb		iBackgroundColor;
+	TBool		iBitmapValid;
+	TDisplayMode iDisplayMode;
+    };
+
+class CPluginInfoArray : public CBase, public MDesCArray
+	{
+public:
+	static CPluginInfoArray* NewL();
+	virtual ~CPluginInfoArray();
+
+	void Reset();
+
+	void RefreshPluginListL();
+	TUid ImageType(TInt aIndex);
+	TUid SubType(TInt aIndex);
+
+	//From MDesCArray
+    TInt MdcaCount() const;
+    TPtrC MdcaPoint(TInt aIndex) const;
+
+private:
+	CPluginInfoArray();
+	void ConstructL();
+
+public:
+	RImageTypeDescriptionArray iPluginArray;
+	};
+
+class TFileSaveInfo
+	{
+public:
+	TUid iImageTypeUid;
+	TInt iBpp;
+	TBool iColor;
+	TInt iQualityFactor;
+	TInt iSampling;
+	TInt iCompression;
+	};
+
+class CVideoWalker;
+
+// CVideoAppUi
+
+class CVideoAppUi : public CEikAppUi
+    {
+	friend class CVideoWalker;
+private:
+	enum TFileType
+		{
+		EFileTypeUnknown,
+		EFileTypeWbmp,
+		EFileTypeOta
+		};
+	enum TState
+		{
+		EIdle,
+		ELoading,
+		EPlaying,
+		EPlayingWait,
+		EScalingMask,
+		EScaling,
+		ERotatingMask,
+		ERotating,
+		ESaving,
+		EStreamOpening,
+		EStreamWaitForFirstFrame,
+		EStreamWaitForDetails,
+		EStreamDecoding,
+		EStreamWaitAndContinue,
+		EStreamDecodeWait,
+		EFolderWait
+		};
+public:
+    void ConstructL();
+	CVideoAppUi();
+	~CVideoAppUi();
+private:
+	// From CCoeAppUi
+	virtual TKeyResponse HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	// From CEikAppUi
+	virtual void HandleCommandL(TInt aCommand);
+	virtual TBool ProcessCommandParametersL(TApaCommand aCommand,TFileName& aDocumentName,const TDesC8& aTail);
+	void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+	TBool CheckHotKeyNotDimmedL(TInt aCommandId);
+	// New functions
+	void OpenFileL(TFileType aFileType);
+	void LoadFileL();
+	void SaveAsL();
+	void DisplayModeL();
+	void BackgroundColorL();
+	void ExtractFrameL();
+	void PlayClipL();
+	void NextFrameL();
+	void StreamPlayL(TFileType aFileType = EFileTypeUnknown, TBool aMultiFrameStreaming=EFalse);
+	void FrameInfoL();
+	void FrameRotateL(TBool aClockwise);
+	void FrameMirrorL(TBool aHorizontalAxis);
+	void ZoomFrameL(TBool aZoomIn);
+	void SetFrameSizeAndPosL(const TRect& aFrameRect,const TSize& aOverallSize);
+	void DecoderOptionsL();
+	void ExtensionOptionsL();
+
+	void RunL(CVideoWalker* aWalker, TInt aStatus);
+	void DoCancel(CVideoWalker* aWalker);
+	void Cancel();
+
+	void HandleNewlyOpenedImageL();
+	void HandleConvertCompleteL();
+	void DrawConvertedFrameL();
+	void ResizeBitmapsToSuitL();
+	void StartFrameOpen(TState aNextState, TBool aSizeFrame=ETrue);
+	void DoStartFrameOpenL(TBool aSizeFrame);
+	void StartFrameSave();
+
+	TInt ExtendStreamBuffer();
+	void StreamOpenFrameIfPosL();
+	void HandleRunError(CVideoWalker* aWalker, TInt aError);
+
+	void OpenFolderL();
+	void LoadFolderWait();
+	void LoadFolderL(const TDesC& aFolderName);
+	void OpenNextFolderEntry();
+	
+	TBool ExtensionIsSetup();
+
+	void UpdateClippingRect(TUint aKeycode);
+	
+	static void ReplaceNewlinesWithLineBreaks(TDes& aDes);
+
+private:
+	CWsBitmap iFrame;
+	CWsBitmap iMask;
+	TSize iImageDisplaySize;
+	TPoint iOffset;
+	TInt iFrameNumber;
+	TInt iPrevFrameNumber;
+    CVideoAppView* iAppView;
+	TInt iZoomFactor;
+	TFileName iLoadFileName;
+	TFileName iSaveFileName;
+	TFileSaveInfo iSaveInfo;
+	TTime iTime;
+	TInt iBackgroundColor;
+	TBool iOverrideBackgroundColor;
+	TSize iOverallSize;
+	TBool iAnimating;
+	TFileType iLastFileType;
+	TUint32 iLastFrameFlags;
+	TSize iScaleSize;
+	CBitmapRotator::TRotationAngle iRotateAngle;
+	TBool iViewResized;
+	TBool iDisableMask;
+	TUint iDecoderOptions;
+	TBool iCreateThumbnail;
+	TBool iSaveAsEXIF;
+	TBool iUseNativeDisplayMode;	
+	
+	CBitmapRotator* iRotator;
+	CBitmapScaler* iScaler;
+	CImageDecoder* iLoadUtil;
+	CImageEncoder* iSaveUtil;
+	CFrameImageData* iFrameImageData; 
+	TState iState;
+	CVideoWalker* iWalker;
+	RTimer iTimer;
+
+	// for streaming simulation
+	CVideoWalker* iStreamGen;
+	RTimer iStreamTimer;
+	TPtr8 iStreamBuffer;
+	TInt64 iStreamSeed;
+	TBool iMultiFrameStreaming;
+	TBool iSourceHasGrown;
+
+	// for folder opens
+	TFileName iDirName;
+	CDir* iDir;
+	TInt iDirIndex;
+	TBool iOpeningFolder;
+
+	// extensions
+	TRect iClippingRect; // clipping rectangle
+	RArray<TInt> iOperations; // list of operations
+	TInt iScalingCoefficient; // scaling
+	TImageConvScaler::TScalerQuality iScalingQuality; // scaling
+	TBool iLockAspectRatio;   // scaling
+	RArray<TInt> iEncodeOperations; // list of operations
+	
+	TBool iUseExtensions; 
+    };
+
+// CVideoDisplayModeDialog
+
+class CVideoDisplayModeDialog : public CEikDialog
+	{
+public:
+	CVideoDisplayModeDialog(TDisplayMode& aDisplayMode,TBool& aUseNativeDisplayMode);
+protected:
+	// From CEikDialog
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aButtonId);
+private:
+	TDisplayMode& iDisplayMode;
+	TBool& iUseNativeDisplayMode;
+	};
+
+// CVideoBackgroundColorDialog
+
+class CVideoBackgroundColorDialog : public CEikDialog
+	{
+public:
+	CVideoBackgroundColorDialog(TInt& aColor16, TBool& aOverride);
+protected:
+	// From CEikDialog
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aButtonId);
+	void HandleControlStateChangeL(TInt aControlId);
+private:
+	TInt& iColor16;
+	TBool& iOverride;
+	};
+
+// CVideoCurrentFrameDialog
+
+class CVideoCurrentFrameDialog : public CEikDialog
+	{
+public:
+	CVideoCurrentFrameDialog(TInt& aCurrentFrame,TInt aNumberOfFrames);
+protected:
+	// From CEikDialog
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aButtonId);
+private:
+	TInt& iCurrentFrame;
+	TInt iNumberOfFrames;
+	};
+
+// CVideoSaveAsDialog
+
+class CVideoSaveAsDialog : public CEikFileSaveAsDialog
+	{
+public:
+	CVideoSaveAsDialog(TDes* aFileName,TFileSaveInfo& aSaveInfo,RArray<TInt>& aEncodeOperations,TBool& aCreateThumbnail,TBool& aSaveAsEXIF);
+	virtual SEikControlInfo CreateCustomControlL(TInt aControlType);
+protected:
+	// from CEikDialog
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aButtonId);
+	virtual void HandleControlStateChangeL(TInt aControlId);
+	// new functions
+	void SetTypeL();
+private:
+	TFileSaveInfo& iSaveInfo;
+	RArray<TInt>& iEncodeOperations;
+	TBool* iCreateThumbnail;
+	TBool* iSaveAsEXIF;
+	};
+
+
+// CVideoFormatDialog
+
+class CDecoderOptionsDialog : public CEikDialog
+	{
+public:
+	CDecoderOptionsDialog(TUint& aOptions);
+protected: 
+	// from CEikDialog
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aButtonId);
+private:
+	TUint& iOptions;
+	};
+
+class CExtensionOptionsDialog : public CEikDialog, public MEikDialogPageObserver
+	{
+public:
+	CExtensionOptionsDialog(TRect& aClippingRect,
+							RArray<TInt>& aOperations,
+							TInt& aScalingCoefficient,
+							TImageConvScaler::TScalerQuality& aQuality,
+							TBool& aLockAspectRatio);
+	CExtensionOptionsDialog(RArray<TInt>& aOperations);
+							
+	virtual void PrepareForFocusTransitionL();
+	virtual void PageChangedL(TInt aPageId);
+	virtual void LineChangedL(TInt /*aControlId*/) {};
+	virtual SEikControlInfo CreateCustomControlL(TInt aControlType);
+	virtual void GetCustomAutoValue(TAny* /*aReturnValue*/,TInt /* aControlType*/,const CCoeControl* /*aControl*/) {};
+								
+protected: 
+	// from CEikDialog
+	void PreLayoutDynInitL();
+	TBool OkToExitL(TInt aButtonId);
+private:
+	TRect* iClippingRect; // clipping rectangle
+	RArray<TInt>& iOperations; // list of operations
+	// scaling
+	TInt* iScalingCoefficient; 
+	TImageConvScaler::TScalerQuality* iScalingQuality;
+	TBool* iLockAspectRatio;
+	CDesCArrayFlat* iSelectedOperations;
+	TBuf<128> operationName[5];
+	TBool iOperationOnly; // only operations tab
+	};
+	
+// CVideoFormatDialog
+
+class CVideoFormatDialog : public CEikDialog
+	{
+public:
+	CVideoFormatDialog(TFileSaveInfo& aSaveInfo);
+protected: 
+	// from CEikDialog
+	void PreLayoutDynInitL();
+	void HandleControlStateChangeL(TInt aControlId);
+	TBool OkToExitL(TInt aButtonId);
+	// new functions
+	void ValidateControlState();
+private:
+	TFileSaveInfo& iSaveInfo;
+	CPluginInfoArray* iEncoderList; //Not owned
+	};
+
+// CVideoDocument
+
+class CVideoDocument : public CEikDocument
+	{
+public:
+	CVideoDocument(CEikApplication& aApp);
+private:
+	 // from CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+// CVideoApp
+
+class CVideoApp : public CEikApplication
+	{
+private:
+	// from CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+#endif
+