camerauis/cameraapp/generic/inc/CamRecordingIconDecoration.h
changeset 0 1ddebce53859
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/inc/CamRecordingIconDecoration.h	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2007 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:  Camera UI recording icon decoration*
+*/
+
+
+
+
+#ifndef CAMRECORDINGICONDECORATION_H
+#define CAMRECORDINGICONDECORATION_H
+
+// INCLUDES
+#include <e32base.h>
+#include "CamObservable.h"
+#include "CamControllerObservers.h"
+
+// FORWARD DECLARATIONS
+class MObserver;
+class CCamObserverHandler;
+class CBitmapContext;
+class CFbsBitmap;
+class CPeriodic;
+class CCamAppController;
+
+// CLASS DECLARATION
+class CCamRecordingIconDecoration : public CBase,
+                                    public MCamObservable,
+                                    public MCamControllerObserver
+    {
+    private:
+        // The internal recording states used
+        enum TCamRecordState
+            {
+            ECamNotRecording,
+            ECamRecording,
+            ECamRecordPaused
+            };
+    
+    public:
+        /**
+        * Symbian OS two-phased constructor
+        * @since 2.8
+        * @param aPosition The postition of the icon
+        * @param aObserver Any interested observer
+        * @return New instance of class
+        */
+    	static CCamRecordingIconDecoration* NewL( const TRect& aPosition, 
+    	                                          CCamAppController& aController );
+
+        /**
+        * Destructor
+        */
+        ~CCamRecordingIconDecoration();
+        
+    protected:
+        /**
+        * Constructor
+        */
+        CCamRecordingIconDecoration( CCamAppController& aController );
+
+        /**
+        * Second-phase constructor
+        * @param aPosition The postition of the icon
+        * @param aController Reference to the controller
+        */
+        void ConstructL( const TRect& aPosition );
+        
+    public: // New methods
+        /**
+        * Draws the recording icon
+        * @param aGc The context to use while drawing
+        * @param aDrawRect Ignored
+        */
+        void Draw(CBitmapContext& aGc, const TRect& aDrawRect);
+
+        /**
+        * Callback for pause flash timer.
+        * @since 2.8
+        * @param aVideoContainer- the CCamVideoPreCaptureContainer
+        * @return KErrNone
+        */
+        static TInt PauseFlashCallBack( TAny* aRecordingIconDecorator );
+
+        /**
+        * Toggles the paused icon called from PauseFlashCallBack
+        * @since 2.8
+        */
+        void TogglePauseIconFlash();
+    
+    private: // New methods
+        /**
+        * Changes iRecordState, tells observers to update
+        * @param aNewState The new state to change to
+        */
+        void ChangeRecordState(TCamRecordState aNewState);
+            
+    public: // From MCamObservable
+        /**
+        * From MCamObservable
+        * @param aObserver Observer to register
+        * @since 3.0
+        */
+        void RegisterObserverL(MCamObserver* aObserver);
+
+        /**
+        * From MCamObservable
+        * @param aObserver Observer to deregister
+        * @since 3.0
+        */
+        void DeregisterObserver(MCamObserver* aObserver);
+
+        /**
+        * From MCamObservable
+        * @param aEvent Event code to broadcast
+        * @since 3.0
+        */
+        void BroadcastEvent(TCamObserverEvent aEvent);
+        
+    public: // From MCamControllerObserver
+        /**
+        * Handle an event from CCamAppControllerBase.
+        * @since 2.8
+        * @param aEvent the controller event that has occurred
+        * @param aError any reported error
+        */
+        virtual void HandleControllerEventL( TCamControllerEvent aEvent,
+                                            TInt aError );
+                                            
+    private: // Data
+        // Handles requests to the MCamObservable interface
+        CCamObserverHandler* iObserverHandler;    
+        
+        // Where to put the icon
+        TPoint iPosition;   
+        TRect iSize;
+
+        // Bitmap and mask for record icon
+        CFbsBitmap* iRecBitmap;
+        CFbsBitmap* iRecBitmapMask;
+
+        // Bitmap amd mask for record paused icon
+        CFbsBitmap* iRecPauseBitmap;
+        CFbsBitmap* iRecPauseBitmapMask;
+
+        // Current recording state
+        TCamRecordState iRecordState;
+
+        // Whether to show paused icon (toggled via periodic timer)
+        TBool iShowPaused;
+
+        // Periodic timer used to toggle paused icon
+        CPeriodic* iPauseFlashPeriodic;
+        
+        // Pointer to the controller
+        CCamAppController& iController;
+    };
+    
+
+#endif // CAMRECORDINGICONDECORATION_H