diff -r 000000000000 -r 71ca22bcf22a mmfenh/enhancedmediaclient/Client/src/Components/EventNotifier/EventNotifier.h --- /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 +#include + +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 iObserversList; + RArray 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* iEventQueue; + }; + } // namespace multimedia + +#endif // EVENTNOTIFIER_H + + // End of file