ximpfw/core/srcfrontend/srcmanager/ximpcntxteventobsarray.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:49 +0200
changeset 0 e6b17d312c8b
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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:  Presence context observer array.
*
*/

#ifndef XIMPPRESCNTXTEVENTOBSARRAY_H
#define XIMPPRESCNTXTEVENTOBSARRAY_H

#include <e32base.h>

class MXIMPContextObserver;
class MXIMPContext;
class RXIMPSrvContextClient;
class CXIMPContextEventFilter;
class MXIMPUndoTask;
class MXIMPBase;


/**
 * Presence context observer array.
 *
 * @lib ximpmanager.dll
 * @since S60 v3.2
 */
NONSHARABLE_CLASS( CXIMPCntxtEventObsArray )
    : public CBase
    {
    /** Private nested helper classes */
    class CObsEntry;


public:

    static CXIMPCntxtEventObsArray* NewL();
    virtual ~CXIMPCntxtEventObsArray();

private:

    CXIMPCntxtEventObsArray();


public:

    /**
     * Adds new observer to observer list.
     *
     * @param aObserver Client side observer to add.
     * @param aEventFilter Event filter for observer. Can be NULL.
     *
     * @return Undo object. When undo is activated, removes 
     *         just added observer from observers list. 
     */
    MXIMPUndoTask* AddObserverLC( MXIMPContextObserver& aObserver,
                                  const TArray< TInt32 >* aEventFilter );


    /**
     * Updates observer event filter.
     *
     * @param aObserver Client side observer which filter to update. 
     * @param aEventFilter New event filter for observer. Can be NULL.
     *
     * @return Undo object. When undo is activated, takes old 
     *         event filter in to use for observer. 
     */
    MXIMPUndoTask* UpdateObserverLC( MXIMPContextObserver& aObserver,
                                     const TArray< TInt32 >* aEventFilter );


    /**
     * Removes given observer from observers list.
     *
     * @param aObserver Client side observer to remove. 
     */
    void RemoveObserver( MXIMPContextObserver& aObserver );


    /**
     * Collects event filter from currently registered 
     * observers.
     *
     * @return Collected event filter instance.
     */
    CXIMPContextEventFilter* CollectEventFilterLC();


    /**
     * Delivers given event to registered observers.
     *
     * @param aCntxtInterface Source context interface for event.
     * @param aEvent The event object to deliver.
     */
    void DeliverEvent( MXIMPContext& aCntxtInterface,
                       MXIMPBase& aEvent );

    /**
     * Checks is there observers registered.
     * @return ETrue if there is observer registered. Else EFalse. 
     */
    TBool HasObservers() const;


    /**
     * Checks is the given observer registered or not.
     *
     * @param aObserver Observer to check.
     * @return ETrue if observer is registered. Else EFalse.
     */
    TBool IsReqistered( MXIMPContextObserver& aObserver ) const;



private:

    TInt FindEntryPosition( MXIMPContextObserver& aObserver ) const;


private: // data

    /**
     * The observers.
     * Own.
     */
    RPointerArray< CObsEntry > iObservers;
    };



#endif // XIMPPRESCNTXTEVENTOBSARRAY_H