diff -r f5050f1da672 -r 04becd199f91 javauis/lcdui_akn/javalcdui/inc/CMIDToLcduiObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/lcdui_akn/javalcdui/inc/CMIDToLcduiObserver.h Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,243 @@ +/* +* Copyright (c) 2009 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: Provides a way to invoke some functionality +* which can run in LCDUI ES thread only +* +*/ + + +#ifndef CMIDTOLCDUIOBSERVER_H +#define CMIDTOLCDUIOBSERVER_H + +// Using RPointerArray +#include +// Using RMsgQueue +#include + +#include "lcdui.h" + +// Forward declarations +class MUiEventConsumer; +class CCoeControl; + +/** + * Provides a way to make calls to functions which are able + * to run in LCDUI Event Server thread only and + * which may origin in non-lcdui 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 lcdui.dll + * @since S60 v5.0 + */ +class CMIDToLcduiObserver : public CActive, public MMIDToLcduiObserver +{ +public: + /** + * Constructor. + */ + CMIDToLcduiObserver(); + + /** + * Destructor. + */ + ~CMIDToLcduiObserver(); + +// from base MMIDToLcduiObserver + + /** + * From MMIDToLcduiObserver. + * Allows a control to be used during event processing. + * + * @since S60 5.0 + * @param aControl Control to be registered. + * @param aCallbackContainer MDirectContainer that is nofied in LCDUI thread + * about added MDirectContent. NULL, if notification + * is not needed. + */ +#ifdef RD_JAVA_NGA_ENABLED + virtual void RegisterControl(CCoeControl& aControl, + MDirectContainer* aCallbackContainer = NULL); +#else + virtual void RegisterControl(CCoeControl& aControl); +#endif + + /** + * From MMIDToLcduiObserver. + * Removes a control from the list of controls allowed + * to be used in event processing. + * Events which works with this control will be ignored. + * + * @since S60 5.0 + * @param aControl Control to be unregistered. + */ + virtual void UnregisterControl(CCoeControl& aControl); + + /** + * From MMIDToLcduiObserver. + * Flushes the control's graphics content on screen. + * The call may origin in other than LCDUI ES thread. + * + * @since S60 5.0 + * @param aControl Control used to get DSA resources from. + * @param aRect An area of the control to flush. + */ + virtual void FlushControl(CCoeControl& aControl, const TRect &aRect); + + /** + * From MMIDToLcduiObserver. + * Invokes aConsumer->MdcDSAResourcesCallback from LCDUI ES thread. + * The call may origin in other than LCDUI ES thread. + * + * @since S60 5.0 + * @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); + + /** + * From MMIDToLcduiObserver. + * Invokes aConsumer->MdcUICallback( aCallbackId ) from LCDUI ES thread. + * The call may origin in other than LCDUI ES thread. + * + * @since S60 5.0 + * @param aConsumer Consumer of the callback. + * @param aCallbackId Id which is provided to the callback + */ + void InvokeUICallback(MUiEventConsumer& aConsumer, TInt aCallbackId); + +private: + /** CMIDToLcduiObserver event datatype */ + enum TToLcduiEventType + { + EFlushEvent, + EDSAResourcesCallbackEvent, + EUICallbackEvent +#ifdef RD_JAVA_NGA_ENABLED + ,ENotifyContentAdded +#endif + }; + + /** CMIDToLcduiObserver event content datatype */ + struct TToLcduiEventData + { + TToLcduiEventType iType; + CCoeControl* iControl; + TRect iRect; + MUiEventConsumer* iConsumer; + TInt iId; +#ifdef RD_JAVA_NGA_ENABLED + MDirectContainer* iContainer; +#endif + }; + + /** + * Redraws area on component. + * + * @since S60 5.0 + * @param aControl Control to redraw. + * Must be registered by RegisterControl. + * @param aRect Area to redraw. + */ + void DoFlushControl(CCoeControl* aControl, const TRect& aRect); + + /** + * Invokes callback aConsumer->MdcDSAResourcesCallback. + * + * @since S60 5.0 + * @param aControl Control used to get DSA resources from. + * Must be registered by RegisterControl. + * @param aConsumer Consumer of the callback. + */ + void DoInvokeDSAResourcesCallback( + CCoeControl* aControl, + MUiEventConsumer *aConsumer); + + /** + * Invokes callback aConsumer->MdcUICallback. + * + * @since S60 5.0 + * @param aConsumer Consumer of the callback. + * @param aCallbackId Id which is provided to the callback + */ + void DoInvokeUICallback( + MUiEventConsumer *aConsumer, + TInt aCallbackId); + + +#ifdef RD_JAVA_NGA_ENABLED + /** + * Invokes MDirectContainer::MdcNotifyContentAdded in UI thread. + * + * @since S60 9.2 + * @param aControl CCoeControl pointer needed for checking that registered + * control has not unregistered yet. + * @param aContainer The container to be notifed. + */ + void DoInvokeNotifyContentAdded( + CCoeControl* aControl, + MDirectContainer *aContainer); +#endif + +// from base class CActive + + /** + * From CActive. + * Handles an active object’s request completion event. + * Processes the first available event in queue. + * + * @since S60 5.0 + */ + virtual void RunL(); + + /** + * From CActive. + * Implements cancellation of an outstanding request. + * + * @since S60 5.0 + */ + virtual void DoCancel(); + +private: + /** + * Event queue to store the call requests + * Own. + */ + RMsgQueue iEventQueue; + + /** + * List of controls registered to allowed its usage + * during event processing. + * Controls are not owned. + * Own. + */ + RPointerArray iRegisteredControls; +}; + + +#endif // CMIDTOLCDUIOBSERVER_H