diff -r 000000000000 -r 72b543305e3a mobilemessaging/unieditor/utils/inc/UniSlideLoader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/unieditor/utils/inc/UniSlideLoader.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,394 @@ +/* +* Copyright (c) 2005-2007 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: Unified Message Editor slide loader. +* +*/ + + + +#ifndef C_UNISLIDELOADER_H +#define C_UNISLIDELOADER_H + +// INCLUDES + +#include +#include +#include +#include + +#include + +// CONSTANTS + +// MACROS + +// DATA TYPES + +enum TUniControlMode + { + EUniControlEditorMode = 0, + EUniControlViewerMode + }; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +class CMsgBaseControl; +//Hma class CMsgEditorView; +class CUniObject; +class CUniDataModel; +class CMsgMediaControl; +class MMsgAsyncControl; +class CMsgXhtmlBodyControl; +class MUniObjectObserver; + +// CLASS DECLARATION + +class MUniSlideLoaderObserver + { + public: + + /** + * Called when slide loading has finished. + * + * @since S60 3.1 + * + * @param aError KErrNone if no error happened, + * otherwise some systemwide error code. + */ + virtual void SlideLoadReady( TInt aError ) = 0; + }; + + +// ========================================================== + +/** +* Unified Editor slide loader class declaration. +* +* @lib UniUtils.lib +* +* @since S60 3.2 +*/ +NONSHARABLE_CLASS( CUniSlideLoader ): public CActive, + public MMsgAsyncControlObserver + { + public: // Constructor and destructor + + /** + * Two-phased constructor. + * + * @since S60 3.2 + * + * @param aControlObserver Observer for added control. + * @param aModel Reference to UniDataModel + * @param aView View to which controls are added. + * @param aControlMode TUniControlMode enumeration + * + * @return new object + */ + IMPORT_C static CUniSlideLoader* NewL( + MMsgAsyncControlObserver& aControlObserver, + CUniDataModel& aModel, + CMsgEditorView& aView, + TUniControlMode aControlMode ); + + /** + * Two-phased constructor. + * + * @since S60 5.0 + * + * @param aUniObjectObserver Observer for CUniObjet events. When slide is loaded + * observer is added to CUniObject. When ResetViewL() is called, observer is removed + * from CUniObject. When control is reloaded, observer remains untouched. + * @param aControlObserver Observer for added control. + * @param aModel Reference to UniDataModel + * @param aView View to which controls are added. + * @param aControlMode TUniControlMode enumeration + * + * @return new object + */ + IMPORT_C static CUniSlideLoader* NewL( + MUniObjectObserver* aUniObjectObserver, + MMsgAsyncControlObserver& aControlObserver, + CUniDataModel& aModel, + CMsgEditorView& aView, + TUniControlMode aControlMode ); + + + /** + * Destructor. + * + * @since S60 3.2 + */ + virtual ~CUniSlideLoader(); + + public: + + /** + * Loads all the slide from given slide. + * + * @since S60 3.2 + * + * @param aSlideObserver Slide loader observer. + * @param aSlideNum Loaded slide number + */ + IMPORT_C void LoadSlideL( + MUniSlideLoaderObserver& aSlideObserver, + TInt aSlideNum ); + + /** + * Loads given object. + * + * @since S60 3.2 + * + * @param aSlideObserver Slide loader observer. + * @param aObject Object to be loaded. + */ + IMPORT_C void LoadObject( + MUniSlideLoaderObserver& aSlideObserver, + CUniObject* aObject ); + + /** + * Removes all the controls from the view. + * + * @since S60 3.2 + */ + IMPORT_C void ResetViewL(); + + /** + * Updates correct icon for media control. + * + * @since S60 3.2 + * + * @param aMediaControl Control that icon is wanted to be updated. + * @param aObject Object related to the control + */ + IMPORT_C void UpdateControlIconL( CMsgMediaControl& aMediaControl, CUniObject* aObject ); + + /** + * Reloads one control without need to reload whole slide. + * + * @since S60 5.0 + * + * @param aMediaControl Control which needs to be reloaded. + * @param aObject Object related to the control + */ + IMPORT_C void ReLoadControlL( CMsgMediaControl* aControl, CUniObject* aObject ); + + public: + + /** + * From CActive. See e32base.h + * + * @since S60 3.2 + * + */ + void DoCancel(); + + /** + * From CActive. See e32base.h + * + * @since S60 3.2 + */ + void RunL(); + + /** + * From CActive. See e32base.h + * + * @since S60 3.2 + */ + TInt RunError( TInt aError ); + + /** + * From MMsgAsyncControlObserver. See MsgAsyncControlObserver.h + * + * @since S60 3.2 + */ + void MsgAsyncControlStateChanged( CMsgBaseControl& aControl, + TMsgAsyncControlState aNewState, + TMsgAsyncControlState aOldState ); + + /** + * From MMsgAsyncControlObserver. See MsgAsyncControlObserver.h + * + * @since S60 3.2 + */ + void MsgAsyncControlResourceChanged( CMsgBaseControl& aControl, TInt aType ); + + private: // Constructors + + /** + * Hidden C++ default constructor. + */ + CUniSlideLoader(); + + /** + * C++ constructor + */ + CUniSlideLoader( MUniObjectObserver* aUniObjectObserver, + MMsgAsyncControlObserver& aControlObserver, + CUniDataModel& aDataModel, + CMsgEditorView& aView, + TUniControlMode aControlMode ); + + /** + * Symbian constructor. + */ + void ConstructL(); + + /** + * Completed current active scheduler loop. + */ + void CompleteSelf(); + + /** + * Performs single load slide operation step. + */ + void LoadSlideStepL(); + + /** + * Performs single load object operation step. + */ + void LoadObjectStepL(); + + /** + * Loads object. Common function for all objects. + */ + void LoadObjectL( CUniObject* aObject ); + + /** + * Loads text object. + */ + void LoadTextL( CUniObject* aObject ); + + /** + * Loads image object. + */ + void LoadImageL( CUniObject* aObject ); + + /** + * Loads audio object. + */ + void LoadAudioL( CUniObject* aObject ); + + /** + * Loads video object. + */ + void LoadVideoL( CUniObject* aObject ); + + /** + * Loads the svg + */ + void LoadSvgL( CUniObject* aObject ); + + /** + * Loads content for media control. + */ + TBool LoadControlL( MMsgAsyncControl& aMediaControl, CUniObject* aObject ); + + /** + * Adds control to view. + */ + void AddToViewL( CMsgBaseControl* aControl, + TInt aControlId, + TMsgMediaType aType, + CUniObject* aObject ); + + /** + * Determines if error code is DRM error code or not. + */ + TBool IsDRMError( TInt aError ) const; + + /** + * Determines whether UniObject DRM rights are valid. + */ + TBool DrmRightsValid( CUniObject* aObject ) const; + + /** + * Consumes DRM righs from the UniObject. + */ + TBool ConsumeDrmRights( CUniObject* aObject ) const; + + /** + * Sets correct layout for media icon for specified control. + */ + void SetIconLayoutL( CMsgMediaControl& aMediaControl ); + + /** + * Performs media control resource change event handling + */ + void DoMsgAsyncControlResourceChangedL( CMsgBaseControl& aControl, TInt aType ); + + /** + * Resolves base control type and returns correct type pointer. + */ + void ResolveCorrectControlType( CMsgBaseControl& aControl, + CMsgMediaControl*& aMediaControl, + CMsgXhtmlBodyControl*& aXhtmlControl ); + + /** + * Implements part of reloading control code + * + * @since S60 5.0 + * + * @param aMediaControl Control which needs to be reloaded. + * @param aObject Object related to the control + */ + TBool DoReLoadControlL( MMsgAsyncControl& aMediaControl, CUniObject* aObject ); + + /** + * Removes observers of the slide + * + * @since S60 5.0 + */ + void RemoveObservers( ); + + /** + * Resolve CUniObject related to media control. + * + * @since S60 5.0 + * @param aControl control for which CUniObjects is needed + * @return CUniObject related to the given control + */ + CUniObject* ObjectByBaseControl( CMsgBaseControl* aControl ); + + private: //Data + + enum TMmsLoadOperation + { + ELoadSlide, + ELoadObject + }; + + MMsgAsyncControlObserver& iControlObserver; + CUniDataModel& iDataModel; + CMsgEditorView& iView; + TUniControlMode iControlMode; + + MUniSlideLoaderObserver* iSlideObserver; + + TInt iLoadedSlide; + TInt iObjectNum; + TMmsLoadOperation iOperation; + CUniObject* iLoadedObject; + + TInt iError; + + RConeResourceLoader iResourceLoader; + + MUniObjectObserver* iUniObjectObserver; + }; + +#endif // C_UNISLIDELOADER_H