videditor/SimpleVideoEditor/inc/SimpleVideoEditorImpl.h
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videditor/SimpleVideoEditor/inc/SimpleVideoEditorImpl.h	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,350 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description: 
+*
+*/
+
+  
+#ifndef _SIMPLEVIDEOEDITORIMPL_H_
+#define _SIMPLEVIDEOEDITORIMPL_H_
+
+//<IBUDSW>
+
+// INCLUDES
+#include <e32std.h>
+#include <coemain.h>
+#include <ConeResLoader.h> 
+#include <aknappui.h>
+#include <VedMovie.h>
+#include <aknprogressdialog.h>
+#include <aknwaitdialog.h> 
+#include <VedAudioClipInfo.h>
+#include "SimpleVideoEditorExitObserver.h"
+#include "ExtProgressDialog.h"
+#include "VeiImageClipGenerator.h"
+#include "VeiTitleClipGenerator.h"
+
+#include "SimpleVideoEditor.h"
+#include "veisettings.h"
+
+// FORWARD DECLATATIONS
+class CVeiTempMaker;
+class CExtProgressDialog;
+class CDummyControl;
+class CErrorUI;
+
+
+// CLASS DECLARATION
+NONSHARABLE_CLASS(CSimpleVideoEditorImpl) : public CActive, 
+											public MVedMovieObserver,
+											public MVedMovieProcessingObserver,
+											public MVeiImageClipGeneratorObserver,
+											public MProgressDialogCallback,
+											public MExtProgressDialogCallback,
+											public MCoeForegroundObserver,
+											public MVedAudioClipInfoObserver
+	{
+	public:	// Constructor and destructor
+
+		static CSimpleVideoEditorImpl* NewL(MSimpleVideoEditorExitObserver& aExitObserver);
+		~CSimpleVideoEditorImpl();
+
+	public: // New functions
+
+		void StartMerge( const TDesC& aSourceFileName );
+		void StartChangeAudio( const TDesC& aSourceFileName );
+		void StartAddText( const TDesC& aSourceFileName );
+
+		void StartWaitDialogL();
+		void StartProgressDialogL();
+		void StartAnimatedProgressDialogL ();
+		void CancelMovieProcessing();
+
+	private: // from CActive
+
+		void DoCancel();
+		void RunL();
+		TInt RunError(TInt aError);
+
+	private: // from MProgressDialogCallback
+
+		void DialogDismissedL( TInt aButtonId );
+
+	private: //from MVedMovieObserver
+
+		void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex);
+		void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError);
+		void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex);
+		void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex);
+		void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, TInt aIndex);
+		void NotifyVideoClipSettingsChanged(CVedMovie& aMovie, TInt aIndex);
+	    void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, TInt aIndex);
+	    void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, TInt aIndex);
+		void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, TInt aIndex);
+	    void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, TInt aIndex);
+		void NotifyStartTransitionEffectChanged(CVedMovie& aMovie);
+		void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, TInt aIndex);
+		void NotifyEndTransitionEffectChanged(CVedMovie& aMovie);
+		void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex);
+		void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError);
+		void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex);
+		void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex);
+		void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, TInt aIndex);
+		void NotifyMovieQualityChanged(CVedMovie& aMovie);
+	    void NotifyMovieReseted(CVedMovie& aMovie);
+		void NotifyMovieOutputParametersChanged(CVedMovie& aMovie);
+	    void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex,  TInt aMarkIndex);
+		void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex);
+		void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex);
+		void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex);
+
+	private: //from MVedMovieProcessingObserver
+
+	    void NotifyMovieProcessingStartedL(CVedMovie& aMovie);
+	    void NotifyMovieProcessingProgressed(CVedMovie& aMovie, TInt aPercentage);
+		void NotifyMovieProcessingCompleted(CVedMovie& aMovie, TInt aError);
+		
+    public: // from MVedAudioClipInfoObserver 
+
+        void NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, TInt aError );
+
+	public: //from MVeiImageClipGeneratorObserver
+
+		void NotifyImageClipGeneratorInitializationComplete(CVeiImageClipGenerator& aGenerator, TInt aError);
+    
+	private: // From MCoeForegroundObserver
+
+		virtual void HandleGainingForeground();
+		virtual void HandleLosingForeground();
+
+	private: // Construct
+
+		CSimpleVideoEditorImpl(MSimpleVideoEditorExitObserver& aExitObserver);
+		void ConstructL();
+
+	private: // New functions
+
+		// Helper functions to keep RunL function smaller
+		void InitializeOperationL();
+		void GetMergeInputFileL();
+		void GetAudioFileL();
+		void GetTextL();
+
+		TInt ShowListQueryL( TInt& aPosition, TInt aHeadingResourceId, TInt aQueryResourceId ) const;	
+        
+        void StartMovieProcessingL(const TDesC& aSourceFile);
+        
+        void RestoreOrientation();
+        
+        /** FilterError
+		*
+		*	Sets error code based on current values of iState and iOperationMode
+		*	i.e this is a context sensitive error mapping function
+		*
+		*	@param 
+		*	@return new error code
+		*/
+        TInt FilterError() const;
+
+		/** CompleteRequest
+		*
+		*	Force RunL
+		*
+		*	@param -
+		*	@return -
+		*/
+		void CompleteRequest();
+
+		/**
+        *   Shows error note with given message.
+        * 
+        *   @param aResourceId No description.         
+        */
+        void ShowErrorNote( const TInt aResourceId ) const;
+
+		/**
+		*   HandleError
+		* 
+		*   @param aErr Error code         
+		*/
+		void HandleError();
+				
+		/*	QueryAudioInsertionL
+		*
+		*	Launches a query dialog in case audio clip is shorter or longer
+		*   than the video clip
+		*
+		*   @param - 
+		*   @return 0 if user selects "No", 
+		*           1 if video and audio clips are the same length or
+		*             the user selects "Yes"
+		*/												
+        TInt QueryAudioInsertionL( TTimeIntervalMicroSeconds aVideoDuration, 
+                                   TTimeIntervalMicroSeconds aAudioDuration );										
+		
+		/**
+		*   ProcessingOkL
+		* 
+		*   Called after succesfull processing
+		*/
+		void ProcessingOkL();
+		
+		/**
+		*   ProcessingFailed
+		* 
+		*   Called after unsuccesfull processing
+		*/
+		void ProcessingFailed();
+		
+	    /**	QueryAndSaveL
+		*   
+		*	Displays Avkon file handling queries
+		*
+		* 	@param aSourceFileName  name of the video clip that
+		*							is selected to be merged
+		*   @return TInt 1 if the video should be saved,
+		*				 0 if the user has cancelled the saving
+		*	
+		*/		
+		TInt QueryAndSaveL(const TDesC& aSourceFileName); 
+		
+		/*	LaunchSaveVideoQueryL 
+		*
+		*	Launches a query dialog "Save video:" with items
+		*	"Replace original" and "Save with a new name"
+		*
+		*   @param - 
+		*   @return - list query id or -1 if the user selects No
+		*/        		
+		TInt LaunchSaveVideoQueryL (); 
+		
+		/*	LaunchSaveChangesQueryL
+		*
+		*	Launches a query dialog "Save changes?" query.
+		*
+		*   @param - 
+		*   @return 0 if user selects "No", otherwise 1
+		*/		
+		TInt LaunchListQueryDialogL (MDesCArray *	aTextItems,
+										const TDesC &	aPrompt); 
+								
+		void ResolveCaptionNameL( TApaAppCaption& aCaption ) const;
+
+	private: // Data
+
+		enum TOperationMode
+			{
+			EOperationModeMin = 0, // invalid
+			EOperationModeMerge,
+			EOperationModeMergeWithVideo,
+			EOperationModeMergeWithImage,
+			EOperationModeChangeAudio,
+			EOperationModeAddText,
+			EOperationModeMax      // invalid
+			} iOperationMode;
+					
+		enum TState
+			{
+			EStateMin = 0, // Invalid
+			EStateInitializing,
+			EStateInsertInputFirst,
+			EStateInsertInputSecond,
+			EStateInsertVideo,
+			EStateCreateImageGenerator,
+			EStateInsertImage,
+			EStateCheckAudioLength,
+			EStateInsertAudio,
+			EStateInsertTextToBegin,
+			EStateInsertTextToEnd,
+			EStateProcessing,
+			EStateProcessingOk,
+			EStateProcessingFailed,
+			EStateFinalizing,
+			EStateReady,
+			EOpMax      // Invalid
+			} iState;
+
+		CEikonEnv&				iEnv;
+
+		// Dummy control to eat key presses while dialogs are not active
+		CDummyControl*			iDummyControl;
+
+		// Interface to notify completion
+		MSimpleVideoEditorExitObserver& iExitObserver;
+
+		RConeResourceLoader 	iResLoader;
+
+		// 
+		CVedMovie*              iMovie;
+
+        // Temporary file name for storing preview clip.
+        HBufC*                  iTempFile;
+
+		// Owned by iMovie
+		CVeiImageClipGenerator* iImageClipGenerator;
+		
+		// Owned by iMovie
+		CVeiTitleClipGenerator* iTextGenerator;
+
+		// Input and output file names
+		TFileName 				iSourceFileName;
+		TFileName				iMergeFileName;
+		TFileName 				iAudioFileName;
+		HBufC*					iAddText;
+		TFileName 				iOutputFileName;
+
+		// Store the original orientation when forcing to portrait
+		CAknAppUiBase::TAppUiOrientation iOriginalOrientation;
+
+		// For process priority manipulation
+		TProcessPriority 		iOriginalProcessPriority;
+		TBool 					iProcessPriorityAltered;
+
+		// Progress dialog.
+		CAknProgressDialog*		iProgressDialog;
+
+		// Progress dialog.
+		CExtProgressDialog*		iAnimatedProgressDialog;
+
+		// Wait dialog.
+		CAknWaitDialog*			iWaitDialog;
+
+		TInt 					iPercentagesProcessed;
+		TInt 					iCancelPercentage;
+		TInt					iError;
+		
+		// Position where the image or video will be merged
+		// 0 if to the beginning, 1 if to the end.
+		TInt					iVideoOrImageIndex; 
+			
+		/** Error UI */
+		CErrorUI*            iErrorUI; 
+        
+        /** Pointer to an instance of CVedAudioClipInfo */
+        CVedAudioClipInfo* iAudioClipInfo;
+
+		/** Allowed audio mime types, used as playback in video */
+		CDesCArrayFlat *iAcceptedAudioTypes;
+		
+		/** Used to figure out if the CVeiImageClipGenerator::NewL() has
+		 *  completed in a situation where the action is cancelled. */
+		TBool				iGeneratorComplete;
+		TBool				iDialogDismissed;
+	};
+
+//</IBUDSW>
+#endif
+
+// End of file