mmfenh/enhancedmediaclient/Client/src/Components/EventNotifier/EventNotifier.h
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/enhancedmediaclient/Client/src/Components/EventNotifier/EventNotifier.h	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2006 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 of EventNotifier class.
+*
+*/
+
+
+
+#ifndef EVENTNOTIFIER_H
+#define EVENTNOTIFIER_H
+
+#include <e32base.h>
+#include <Events.h>
+
+namespace multimedia
+    {
+    class MControlObserver;
+    class CEventBase;
+    class MControl;
+    
+    class CObserverManager : public CBase
+        {
+        public:
+            static CObserverManager* NewL();
+            ~CObserverManager();
+            
+            // Adds observer to list
+            TInt AddObserver( const MControlObserver& aObserver );
+            // Marks observer as inactive in the list
+            TInt RemoveObserver( const MControlObserver& aObserver );
+            
+            // Moves the pointer to element before the first in list
+            void Init();
+            // Returns true and moves pointer to next active observer.
+            TBool Next();
+            // aObserver will contain pointer to current observer
+            void Observer( MControlObserver*& aObserver );
+            
+            // Returns the count of active observers
+            TInt Count();
+            // Purge inactive observers in the list
+            void Purge();
+            // Resets the list
+            void Reset();
+            
+        private:
+            CObserverManager();
+            void ConstructL();
+            
+        private:
+            TInt    iObserverCount;
+            TInt    iCurrentObserverIndex;
+            // For now we maintain 2 RPointerArray lists
+            // better option is to merge into one data structure
+            RPointerArray<MControlObserver> iObserversList;
+            RArray<TInt>                    iActiveList;
+        };
+    
+    class CEventQueueItem : public CBase
+        {
+        public:
+            static CEventQueueItem* NewL( MControl* aControl, TUint aEvent, CEventBase* aEventObject );
+            ~CEventQueueItem();
+
+        TUint EventType();
+        CEventBase* EventObject();
+        MControl* ControlObject();
+            TAny* GetInterface();
+            
+        private:
+            CEventQueueItem( MControl* aControl,TUint aEvent, CEventBase* aEventObject );
+            void ConstructL();
+            
+        public:
+            // next item
+            TSglQueLink* iLink;
+            
+        private:
+            TUint  iEvent;
+            CEventBase*       iEventObject;
+            MControl* iControl;
+        };
+    
+    class CEventNotifier : public CActive
+        {
+        public:
+            static CEventNotifier* NewL();
+            ~CEventNotifier();
+            
+            // Adds observer
+            TInt AddObserver( const MControlObserver& aObserver );
+            // Remove observer
+            TInt RemoveObserver( const MControlObserver& aObserver );
+            // Send notification to observers. If another event is
+            // being processed, this will add event to pending events
+            // and observers will be notified later.
+            // Takes ownership of aEventObject
+            TInt Event( MControl* aControl, TUint aEvent, CEventBase* aEventObject );
+            
+            // From CActive
+            void RunL();
+            void DoCancel();
+            TInt RunError(TInt aError);
+            
+        private:
+            CEventNotifier();
+            void ConstructL();
+            
+            // Signals to continue processing.
+            void KickSignal();
+            // Signals the event has been notified to all observers
+            void EventNotified();
+            
+            void EmptyQueue();
+            
+        private:
+            // Pointer to observer manager
+            CObserverManager* iObserverManager;
+            // List holding events to be notified
+            TSglQue<CEventQueueItem>* iEventQueue;
+        };
+    } // namespace multimedia
+    
+#endif // EVENTNOTIFIER_H
+    
+    // End of file