javauis/eswt_akn/eswtdirectcontent/native/inc/swtdcobserver.h
branchRCL_3
changeset 19 04becd199f91
child 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_akn/eswtdirectcontent/native/inc/swtdcobserver.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2010 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:  THIS FILE IS NOT INCLUDED INTO ECLIPSE CVS DELIVERY
+*               Provides a way to invoke some functionality
+*               which can run in ESWT thread only
+*
+*/
+
+
+#ifndef SWTDCOBSERVER_H
+#define SWTDCOBSERVER_H
+
+// Using MSwtDcEventConsumer
+#include "swtdceventconsumer.h"
+// Using RPointerArray
+#include <e32std.h>
+// Using RMsgQueue
+#include <e32msgqueue.h>
+
+// Forward declarations
+class MUiEventConsumer;
+class CCoeControl;
+
+/**
+ * Provides a way to make calls to functions which are able
+ * to run in ESWT thread only and
+ * which may origin in non-ESWT thread (MMAPI for instance).
+ *
+ * The calls are kept in queue and processed serially.
+ *
+ * If the call works with some CCoeControl instance,
+ * ther control must be registered by RegisterControl().
+ *
+ * Some events may invoke a callback into specified callback interface.
+ * The receiver of this callback must not be deleted if there is
+ * a possibility of having some events, which will call this, in queue.
+ *
+ * The callback receiver can for example implement
+ * its instance deletion via event using this observer,
+ * so this deletion event will be the last one for that receiver.
+ *
+ * @lib    eswtdirectcontent.dll
+ * @since  S60 v5.2
+ */
+class CSwtDcObserver : public CActive
+{
+public:
+    /**
+     * Constructor.
+     */
+    CSwtDcObserver();
+
+    /**
+     * Destructor.
+     */
+    ~CSwtDcObserver();
+
+
+    /**
+     * Asynchronously sends an event into a consumer.
+     * The call may origin in other than ESWT thread.
+     *
+     * @since S60 5.2
+     * @param aConsumer Consumer which gets event asynchronously.
+     * @param aType An data indicating event type for consumer.
+     */
+    virtual void InvokeDcEvent(MSwtDcEventConsumer& aConsumer, TInt aType);
+
+    /**
+     * Invokes aConsumer->MdcDSAResourcesCallback from ESWT thread.
+     * The call may origin in other than ESWT thread.
+     *
+     * @since S60 5.2
+     * @param aControl Control used to get DSA resources from.
+     * @param aConsumer Consumer of the callback.  The instance
+     *                  must not be deleted before the event processed.
+     */
+    void InvokeDSAResourcesCallback(
+        CCoeControl& aControl,
+        MUiEventConsumer& aConsumer);
+
+    /**
+     * Invokes aConsumer->MdcUICallback( aCallbackId ) from ESWT thread.
+     * The call may origin in other than ESWT thread.
+     *
+     * @since S60 5.2
+     * @param aConsumer Consumer of the callback.
+     * @param aCallbackId Id which is provided to the callback
+     */
+    void InvokeUICallback(MUiEventConsumer& aConsumer, TInt aCallbackId);
+    
+private:
+    /** CSwtDcObserver event datatype */
+    enum TDcEventType
+    {
+        EDcEvent,
+        EDSAResourcesCallbackEvent,
+        EUICallbackEvent
+    };
+
+    /** CSwtDcObserver event content datatype */
+    struct TDcEventData
+    {
+        TDcEventType iType;
+        void* iConsumer;
+        void* iParam;
+    };
+
+    /**
+     * Sends an event into a consumer.
+     *
+     * @since S60 5.2
+     * @param aConsumer Consumer of the event.
+     * @param aType Type of event given to the invoke method.
+     */
+    void DoDcEvent(MSwtDcEventConsumer* aConsumer, TInt aType);
+
+    /**
+     * Invokes callback aConsumer->MdcDSAResourcesCallback.
+     *
+     * @since S60 5.2
+     * @param aControl Control used to get DSA resources from.
+     * @param aConsumer Consumer of the callback.
+     */
+    void DoInvokeDSAResourcesCallback(
+        CCoeControl* aControl,
+        MUiEventConsumer *aConsumer);
+
+    /**
+     * Invokes callback aConsumer->MdcUICallback.
+     *
+     * @since S60 5.2
+     * @param aConsumer Consumer of the callback.
+     * @param aCallbackId Id which is provided to the callback
+     */
+    void DoInvokeUICallback(
+        MUiEventConsumer *aConsumer,
+        TInt aCallbackId);
+
+    
+// from base class CActive
+
+    /**
+     * From CActive.
+     * Handles an active object’s request completion event.
+     * Processes the first available event in queue.
+     *
+     * @since S60 5.2
+     */
+    virtual void RunL();
+
+    /**
+     * From CActive.
+     * Implements cancellation of an outstanding request.
+     *
+     * @since S60 5.2
+     */
+    virtual void DoCancel();
+
+private:
+    /**
+     * Event queue to store the call requests
+     * Own.
+     */
+    RMsgQueue<TDcEventData> iEventQueue;
+};
+
+
+#endif // SWTDCOBSERVER_H