mobilemessaging/unieditor/utils/inc/UniSlideLoader.h
changeset 0 72b543305e3a
--- /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 <e32base.h>
+#include <MsgMedia.hrh>
+#include <msgasynccontrolobserver.h>
+#include <ConeResLoader.h>
+
+#include <MsgEditorView.h>
+
+// 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