videditor/TrimForMms/inc/VeiTrimForMmsContainer.h
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 14:08:33 +0200
changeset 0 951a5db380a0
permissions -rw-r--r--
Committing the Video Editor package under the Eclipse Public License

/*
* 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 VEITRIMFORMMSCONTAINER_H
#define VEITRIMFORMMSCONTAINER_H

// INCLUDES
// System includes
#include <AknUtils.h>   // TAknLayoutText
#include <coecntrl.h>
#include <AknProgressDialog.h> 
#include <VedMovie.h>
#include <VedVideoClipInfo.h>
// User includes
#include "VeiVideoDisplay.h"
#include "VeiFrameTaker.h"
#include "VeiTrimForMmsView.h"
#include "VeiDisplayLighter.h"

// FORWARD DECLARATIONS
class CVeiCutterBar;
class CVeiTrimForMmsView;
class CVeiTrimForMmsView;
class CAknsBasicBackgroundControlContext;
class CAknProgressDialog;
//class CEikProgressInfo;

// CLASS DECLARATION

/**
 *
 */
class CVeiTrimForMmsContainer : public CCoeControl,
                                public MVedMovieObserver,
                                public MVeiVideoDisplayObserver,
								public MVeiFrameTakerObserver,
								public MProgressDialogCallback
    {
    public:

        static CVeiTrimForMmsContainer* NewL( const TRect& aRect,
                                              CVedMovie& aMovie,
											  CVeiTrimForMmsView& aView );

        static CVeiTrimForMmsContainer* NewLC( const TRect& aRect,
                                               CVedMovie& aMovie,
											   CVeiTrimForMmsView& aView);

        ~CVeiTrimForMmsContainer();

    public:     // New functions

        const TTimeIntervalMicroSeconds& CutInTime() const;

        const TTimeIntervalMicroSeconds& CutOutTime() const;

		void SetMaxMmsSize( TInt aMaxSizeInBytes );

		/**
		 * Start full screen preview. Calls CVeiVideoDisplay. 
		 *
		 * @param aFilename filename.
		 * @param aRect full screen size.
		 */
		void PlayL( const TDesC& aFilename, const TRect& aRect  );

		/**
		 *	Stop preview. Stops CVeiVideoDisplay
		 *
		 * @param aCloseStream 
		 */
		void Stop( TBool aCloseStream );

		/**
		 *
		 */
		void PauseL();

		/**
         * Return the video display state of CVeiTrimForMmsContainer. 
         *
         * @param 
         */
		TInt PreviewState() const;

		void StartFrameTakerL( TInt aIndex );

    private:    // From CCoeControl

		virtual void DialogDismissedL( TInt aButtonId );

        CCoeControl* ComponentControl(TInt aIndex) const;    

        TInt CountComponentControls() const;

        /**
         * Gets the control's help context. Associates the control with a 
         * particular Help file and topic in a context sensitive application.
         *
         * @param aContext The control's help context.
         */
        void GetHelpContext( TCoeHelpContext& aContext ) const;

        void Draw( const TRect& aRect ) const;

        void SizeChanged();

        TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, 
											TEventCode aType);

    private:    // From MVeiVideoDisplayObserver
      
        virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo = 0 );

		virtual void NotifyFramesCompleted( CFbsBitmap* aFirstFrame, CFbsBitmap* aLastFrame, 
            CFbsBitmap* /*aTimelineFrame*/, TInt aError );


		/**
		 * Gets an object whose type is encapsulated by the specified TTypeUid 
		 * object.
		 *
		 * @param aId Encapsulates the Uid that identifies the type of object
		 * required.
		 *
		 * @return
		 */
		virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId );

    protected:  // From MVedMovieObserver

        virtual void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex);

	    virtual void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError);

    	virtual void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex);
	
	    virtual void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, 
									           TInt aNewIndex);

    	virtual void NotifyVideoClipTimingsChanged(CVedMovie& aMovie,
											   TInt aIndex);

    	virtual void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie,
												   TInt aIndex);
	
	    virtual void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie,
											         TInt aIndex);

	    virtual void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie,
											             TInt aIndex);

	    virtual void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie,
																TInt aIndex);

	    virtual void NotifyStartTransitionEffectChanged(CVedMovie& aMovie);

	    virtual void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, 
													 TInt aIndex);

	    virtual void NotifyEndTransitionEffectChanged(CVedMovie& aMovie);

	    virtual void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex);

	    virtual void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError);

	    virtual void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex);

        virtual void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, 
									           TInt aNewIndex);

	    virtual void NotifyAudioClipTimingsChanged(CVedMovie& aMovie,
											   TInt aIndex);

        virtual void NotifyMovieQualityChanged(CVedMovie& aMovie);

        virtual void NotifyMovieReseted(CVedMovie& aMovie);

		virtual void NotifyMovieOutputParametersChanged(CVedMovie& aMovie);

	    virtual void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, 
                                                         TInt aClipIndex, 
                                                         TInt aMarkIndex);

		virtual void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, 
                                                        TInt aClipIndex, 
                                                        TInt aMarkIndex);

		virtual void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, 
                                                         TInt aClipIndex, 
                                                         TInt aMarkIndex);

		virtual void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, 
                                                        TInt aClipIndex, 
                                                        TInt aMarkIndex);  

    private:    // New functions
		TInt TimeIncrement(TInt aKeyCount) const;

    private:    // Constructors

        CVeiTrimForMmsContainer( CVedMovie& aMovie, CVeiTrimForMmsView& aView);

        void ConstructL( const TRect& aRect );

    private:    // Enumeration
        
        enum TTrimForMmsControls
            {
            ECutFrame,
            EVideoDisplayStart,
            EVideoDisplayEnd,
			EVideoPreview,
            ENumberOfControls   // This is always the last one!
            };

	public:
		enum TPreviewState
			{
			EIdle = 0,
			ELoading,
			EPreview,
			EPlaying,
			EStop,
			EStopAndExit,
			EOpeningFile,
			EPause
			};

    private:    // Data

        /**
         * Whether or not the last key pressed was left or right navi-key.
         */
        TBool                   iLastKeyLeftOrRight;

        /**
         *
         */
        TInt                    iVideoDisplayStartIndex;        

        /**
         *
         */
        TInt                    iVideoDisplayEndIndex;

        /**
         *
         */
        TRect                   iVideoDisplayEndRect;

        /**
         * Text layout for main pane's end text.
         */
        TAknLayoutText          iLayoutTextEnd;

        /**
         * Text layout for main pane's start text.
         */
        TAknLayoutText          iLayoutTextStart;

        /**
         * Layout for start thumbnail.
         */
        TAknLayoutRect          iLayoutRectStart;

        /**
         * Layout for end thumbnail.
         */
        TAknLayoutRect          iLayoutRectEnd;

        /**
         * Layout for trim timeline icon.
         */
        TAknLayoutRect          iLayoutRectIcon;

        /**
         * Layout for cut frame.
         */
        TAknLayoutRect iLayoutRectCutFrame;

        /**
         * Text shown above the end thumbnail.
         */
        HBufC*                  iEndText;

        /**
         * Text shown above the start thumbnail.
         */
        HBufC*                  iStartText;

        /**
         *
         */
		CVeiCutterBar*			iCutterBar;
        /**
         *
         */
        CVedMovie&              iMovie;

        /**
         *
         */
        CVeiVideoDisplay*       iVideoDisplayStart;

        /**
         *
         */
        CVeiVideoDisplay*       iVideoDisplayEnd;

		CVeiVideoDisplay*		iVideoDisplay;

		TPreviewState			iPreviewState;
				
		TRect					iPreviewRect;

		CVeiFrameTaker*			iFrameTaker;

		/*
		 * Updated by NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ) 
		 */
		TInt					iClipIndex;

		CVeiTrimForMmsView&		iView;


		TRect					iStartTextBox;
		TRect					iEndTextBox;
		TRect					iVideoDisplayStartRect;
		TRect					iTimelineRect;
		TRect					iCutIconRect;
		TRect					iAdjustRect;

		TPoint					iCutIconPoint;
		TSize					iCutIconSize;

		TTimeIntervalMicroSeconds	iSeekPos;
		TTimeIntervalMicroSeconds	iSeekEndPos;
		TTimeIntervalMicroSeconds	iDuration;
		TInt					iKeyRepeatCount;
		/** Background context. Skin stuff. */
		CAknsBasicBackgroundControlContext*	iBgContext;

		CVeiDisplayLighter*		iScreenLight;
		TInt					iMaxMmsSize;
		TBool 					iBlack;


		TBool					iSeekEvent;
		  /**
         * Progress dialog.
         */
        CAknProgressDialog*		iProgressNote;

		/** Progress info for the progress note. */
		CEikProgressInfo* 		iProgressInfo;
		TBool 					iKeyEnable;
    };

#endif