tsrc/consoleplayer/player/inc/playerwindow.h
changeset 35 b0f0be18af85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/consoleplayer/player/inc/playerwindow.h	Fri Sep 17 08:31:33 2010 +0300
@@ -0,0 +1,273 @@
+/*
+ * 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:
+ * Header specifying the abstract Player Window.
+ * 
+ */
+
+#ifndef __PLAYER_WINDOW_H__
+#define __PLAYER_WINDOW_H__
+
+#include <e32base.h>
+#include <f32file.h>
+#include <w32std.h>
+
+#include "testappbase.h"
+
+enum TPlayerWindowOperations
+    {
+    EOperation_PauseResume = KOperation_FirstCustomIndex+100,
+    EOperation_Pause,
+    EOperation_Resume,
+    EOperation_StopPlay,
+    EOperation_SeekBack,
+    EOperation_SeekForward,
+    EOperation_SeekStart,
+    EOperation_SeekEnd,
+    EOperation_Rotate,
+    EOperation_Autoscale,
+    EOperation_IncreaseHeightScale,
+    EOperation_DecreaseHeightScale,
+    EOperation_IncreaseWidthScale,
+    EOperation_DecreaseWidthScale,
+    EOperation_ClipRectangle,
+    EOperation_Extent,
+    EOperation_ResetToDefaults,
+    EOperation_IncreaseVolume,
+    EOperation_DecreaseVolume,
+    EOperation_MaximumVolume,
+    EOperation_Mute,
+    EOperation_BalanceLeft,
+    EOperation_BalanceRight,
+    EOperation_BalanceCenter,
+    EOperation_BalanceMaxLeft,
+    EOperation_BalanceMaxRight,
+    EOperation_FrameStepForward,
+    EOperation_FrameStepBackward,
+    EOperation_IncreasePlayVelocity,
+    EOperation_DecreasePlayVelocity,
+    EOperation_MoveWindowUp,
+    EOperation_MoveWindowDown,
+    EOperation_MoveWindowLeft,
+    EOperation_MoveWindowRight,
+    EOperation_ChangeWindowSize,
+    EOperation_ToggleWindowTransparency,
+    EOperation_DrawWhiteBorderAroundWindow,
+    EOperation_DrawRedBorderAroundWindow,
+    EOperation_ClearBorderAroundWindow
+    };
+
+class MPlayerWindowObserver
+    {
+public:
+    
+    virtual void PlayInitiated() = 0;
+    
+    virtual void PlayStateChanged() = 0;
+    
+    virtual void Error(TInt aError) = 0;
+    };
+
+class MPlayerCommands
+    {
+public:
+    
+    virtual TInt ExecuteOperation( TInt aOperation ) = 0;
+    
+    virtual void MoveWindow( TPoint aNewCenter ) = 0;
+    
+    virtual void SetOrdinalPosition( TInt aPosition ) = 0;
+    };
+
+class CPlayerWindow : public CBase, public MPlayerCommands
+    {
+public:
+
+    enum TPlayState
+        {
+        EStopped,
+        EPlaying,
+        EPaused
+        };
+
+    enum TAutoscaleMode
+        {
+        EDoNotAutoscale,
+        EBestFit,
+        EStretch
+        };
+    
+    virtual ~CPlayerWindow();
+
+    // inherited from MPlayerCommands
+    virtual TInt ExecuteOperation( TInt aOperation );
+    virtual void MoveWindow( TPoint aNewCenter );    
+    virtual void SetOrdinalPosition( TInt aPosition );
+
+    void StartWithFilenameL( const TDesC& aFullFilename,
+                             TAutoscaleMode aDefaultAutoscale,
+                             MPlayerWindowObserver* aObserver = NULL );
+
+    void StartWithUrlL( const TDesC& aUrl,
+                        TAutoscaleMode aDefaultAutoscale,
+                        MPlayerWindowObserver* aObserver = NULL );
+
+    RWindow& Window();
+
+    void WriteAdvancedText( CWindowGc& aGc, TInt aColumn, TInt& aRow, TInt aRowIncrement );        
+    
+    const TDesC& FullFilename();
+    
+    const TDesC& Filename();
+    
+    const TDesC& Url();
+    
+    TPlayState PlayState();
+
+    TSize VideoSize();
+        
+    TInt PositionInMs();
+    
+    TInt DurationInMs();
+    
+    virtual TInt SetVideoExtent( TRect aExtent ) = 0;
+
+    virtual TInt Play() = 0;
+    
+    virtual TInt Pause() = 0;
+
+protected:
+    
+    CPlayerWindow( RFs& aFs, RWsSession& aWs, CWsScreenDevice& aScreenDevice, bool aSuppressGraphicsContext );
+    
+    void CheckWindowLimits();
+    
+    void DrawBorderAroundWindow();
+    
+    // These functions must be called by subclasses
+    
+    void BaseConstructL( const RWindowTreeNode &aParentWindow, TPoint aTopLeft, TSize aSize, bool aTransparent, TRgb aBackgroundColor );
+    void PlayInitiated();
+    void PlayComplete();    
+    void CheckError( TInt aError, const char* pDescription );
+    void Error( TInt aError, const char* pDescription = NULL );
+    
+    // These functions must be implemented by subclasses
+    
+    virtual void InitializeParameters( TSize& aVideoSize, 
+                                       TTimeIntervalMicroSeconds& aDuration, 
+                                       TInt& aMaxVolume, 
+                                       TInt& aCurrentVolume,
+                                       TInt& aBalanceCenter,
+                                       TInt& aBalanceMaxLeft,
+                                       TInt& aBalanceMaxRight,
+                                       TInt& aDefaultBalance, 
+                                       TInt& aCurrentBalance ) = 0;
+    
+    virtual void SetDefaultAutoscaleMode( TAutoscaleMode aDefaultAutoscale ) = 0;
+    
+    virtual void PreparePlayerWithFile( RFile& aFile ) = 0;
+
+    virtual void PreparePlayerWithUrl( const TDesC& aUrl ) = 0;
+
+    virtual TInt DoExecuteOperation( TInt aOperation ) = 0;
+
+    virtual TTimeIntervalMicroSeconds Position() = 0; // microseconds
+    
+    virtual TInt SetVolume( TInt aVolume ) = 0;
+    
+    virtual TInt SetBalance( TInt aBalance ) = 0;
+    
+    virtual TInt RotationAngle() = 0;
+    
+    virtual TInt NextRotationAngle() = 0;
+    
+    virtual TInt ResetRotation() = 0;
+    
+    virtual TInt NextAutoscaleMode() = 0;
+    
+    virtual TInt ResetAutoscale() = 0;
+    
+    virtual void AppendAutoscaleModeText( TDes& aString ) = 0;
+    
+    virtual TInt SetClipRectangle( TRect aRect ) = 0;
+    
+    virtual TInt SetScaleFactor( TReal aWidthScaleFactor, TReal aHeightScaleFactor ) = 0;
+    
+    virtual TInt Stop() = 0;
+    
+    virtual TInt SetPosition( TTimeIntervalMicroSeconds ) = 0;
+    
+    virtual TInt StepForward() = 0;
+    
+    virtual TInt StepBackward() = 0;
+    
+    virtual TInt SetPlayVelocity( TInt aVelocity ) = 0;
+    
+    RFs&                    iFs;
+    RFile                   iFile;
+    RWsSession&             iWs;
+    CWsScreenDevice&        iScreenDevice;
+    CWindowGc*              iGc;
+    
+    RWindow                 iWindow;
+    TBuf<120>               iBuffer;
+
+private:
+    
+    TRect Rectangle( TInt aModeIndex );
+    
+    TInt Seek( TTimeIntervalMicroSeconds aPosition ); 
+    
+    TInt UpdateScaleFactor();
+
+    TInt ResetToDefaults();
+    
+    TFileName                 iFullFilename;
+    TFileName                 iFilename;
+    TFileName                 iUrl;
+    MPlayerWindowObserver*    iObserver;
+    bool                      iSuppressGraphicsContext;
+    
+    TPlayState                iPlayState;
+    TTimeIntervalMicroSeconds iDuration;
+    TInt                      iDurationInMs;
+    TInt                      iCurrentVelocity;
+    
+    // Video attributes
+    TSize                     iVideoSize;
+    TInt                      iWidthScaleIndex;
+    TInt                      iHeightScaleIndex;   
+    TInt                      iClipModeIndex;
+    TInt                      iExtentModeIndex;
+    TPoint                    iWindowTopLeft;
+    TSize                     iDefaultWindowSize;
+    TSize                     iWindowSize;
+    TInt                      iWindowSizeDivisor;
+    bool                      iWindowTransparent;
+    TRgb                  iBorderColor;
+        
+    // Audio attributes
+    TInt                      iMaxVolume;
+    TInt                      iDefaultVolume;
+    TInt                      iCurrentVolume;
+    TInt                      iBalanceCenter;
+    TInt                      iBalanceMaxRight;
+    TInt                      iBalanceMaxLeft;
+    TInt                      iDefaultBalance;
+    TInt                      iCurrentBalance;
+  
+    };
+
+#endif