--- /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