mobilemessaging/mmsui/viewersrc/MmsViewerLaunchOperation.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/mmsui/viewersrc/MmsViewerLaunchOperation.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,367 @@
+/*
+* Copyright (c) 2002-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:  
+*       CMmsViewerLaunchOperation, Storage for single attachment in presentation. 
+*
+*/
+
+
+
+// ========== INCLUDE FILES ================================
+
+#include <AknsConstants.h>
+#include <data_caging_path_literals.hrh> 
+#include <MsgEditorView.h>          // for CMsgEditorView
+#include <MsgBodyControl.h>
+#include <MuiuMsgEditorLauncher.h>
+
+#include <mmsconst.h>
+#include <mmsclient.h>
+#include <MmsViewer.rsg>
+
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknUtils.h>
+#include <MsgEditorCommon.h>
+#include <MsgMediaInfo.h>
+#include <msgimagecontrol.h>
+#include <unislideloader.h>
+#include "UniMmsViewerDocument.h"
+
+#include <mmsui.mbg>
+#include "MmsMtmConst.h"            // File logger
+
+#include "MmsMtmUi.h"
+#include "MmsViewerHeader.h"
+#include "MmsViewerLaunchOperation.h"
+
+_LIT( KMmsUiMbmFile, "mmsui.mbm" );
+
+// ========== EXTERNAL DATA STRUCTURES =====================
+
+// ========== EXTERNAL FUNCTION PROTOTYPES =================
+
+// ========== CONSTANTS ====================================
+
+// ========== MACROS =======================================
+
+// ========== LOCAL CONSTANTS AND MACROS ===================
+
+// ========== MODULE DATA STRUCTURES =======================
+
+// ========== LOCAL FUNCTION PROTOTYPES ====================
+
+// ========== LOCAL FUNCTIONS ==============================
+
+// ========== MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------
+// CMmsViewerLaunchOperation::CMmsViewerLaunchOperation
+//
+// Constructor.
+// ---------------------------------------------------------
+//
+CMmsViewerLaunchOperation::CMmsViewerLaunchOperation(
+        MUniObjectObserver*         aUniObjectObserver,
+        MMsgAsyncControlObserver&   aControlObserver,
+        MMmsViewerOperationObserver& aOperationObserver,
+        CMmsViewerDocument& aDocument,
+        CMsgEditorView& aView,
+        RFs& aFs ) :
+    CMmsViewerOperation( aOperationObserver, aDocument, aFs ),
+    iControlObserver( aControlObserver ),
+    iView( aView ),
+    iUniObjectObserver( aUniObjectObserver )
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CMmsViewerLaunchOperation::CMmsViewerLaunchOperation
+//
+// Destructor.
+// ---------------------------------------------------------
+//
+CMmsViewerLaunchOperation::~CMmsViewerLaunchOperation()
+    {
+#ifdef CANCEL_TEST_CODE
+    CancelCancelTest( );
+#endif
+    Cancel();
+    delete iSlideLoader;
+    delete iHeader;
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerLaunchOperation::Launch
+//
+// ---------------------------------------------------------
+//
+void CMmsViewerLaunchOperation::Launch()
+    {
+    iNextState = EMmsLaunchInitialize;
+    CompleteSelf( KErrNone );
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerLaunchOperation::Launch
+//
+// SaveL
+// ---------------------------------------------------------
+//
+void CMmsViewerLaunchOperation::DoLaunchStepL()
+    {
+    switch ( iNextState )
+        {
+        case EMmsLaunchInitialize:
+            {
+            LOGTEXT(_L8("CMmsViewerLaunchOperation::DoLaunchStepL EMmsLaunchInitialize") );
+            DoInitializeL();
+            break;
+            }
+        case EMmsLaunchPrepareHeader:
+            {
+            LOGTEXT(_L8("CMmsViewerLaunchOperation::DoLaunchStepL EMmsLaunchPrepareHeader") );
+            DoPrepareHeaderL();
+            break;
+            }
+        case EMmsLaunchPrepareBody:
+            {
+            LOGTEXT(_L8("CMmsViewerLaunchOperation::DoLaunchStepL EMmsLaunchPrepareBody") );
+            DoPrepareBodyL();
+            break;
+            }
+        case EMmsLaunchEnd:
+            {
+            LOGTEXT(_L8("CMmsViewerLaunchOperation::DoLaunchStepL EMmsLaunchEnd") );
+            iObserver.ViewerOperationEvent(
+                EMmsViewerOperationLaunch,
+                EMmsViewerOperationComplete,
+                KErrNone ); 
+            break;
+            }
+        default:
+            iObserver.ViewerOperationEvent(
+                EMmsViewerOperationLaunch,
+                EMmsViewerOperationError,
+                KErrUnknown ); 
+            break;
+        }
+
+    iNextState++;
+    }
+
+// ---------------------------------------------------------
+// DoInitializeL
+// ---------------------------------------------------------
+void CMmsViewerLaunchOperation::DoInitializeL()
+    {
+    // For messages without SMIL iDocument.InitializeL() completes immediately even before
+    // call of SetActiveNoCompleteSelf
+    iDocument.InitializeL( *this );
+    if ( !iIsInitialised )
+        {
+        SetActiveNoCompleteSelf();
+        }
+    }
+
+
+// ---------------------------------------------------------
+// DoPrepareHeaderL
+// ---------------------------------------------------------
+void CMmsViewerLaunchOperation::DoPrepareHeaderL()
+    {    
+    // Header is always drawn and populated
+    iHeader = CMmsViewerHeader::NewL(
+        iDocument.Mtm(),
+        iDocument.DataModel().AttachmentList(),
+        iView,
+        iFs );
+    CompleteSelf( KErrNone );
+    }
+
+// ---------------------------------------------------------
+// DoPrepareBodyL
+// ---------------------------------------------------------
+void CMmsViewerLaunchOperation::DoPrepareBodyL()
+    {
+    // Determine whether body objects should be drawn
+    // NOTE: Viewable if conformant even if forwarded.
+    if ( iDocument.ErrorResponseMessage() )
+        {
+        DoPrepareErrorResponseMessageL();
+        CompleteSelf( KErrNone );
+        }
+    else if ( iDocument.SmilType() == EMmsSmil )
+        {
+        if ( !iDocument.SmilModel()->SlideCount() )
+            {
+            iDocument.SmilModel()->AddSlideL();
+            }
+
+        iSlideLoader = CUniSlideLoader::NewL(
+            iUniObjectObserver,
+            iControlObserver,
+            iDocument.DataModel(),
+            iView,
+            EUniControlViewerMode );
+
+        iSlideLoader->LoadSlideL( *this, 0 );
+        SetActiveNoCompleteSelf( );
+        }
+    else
+        {
+        DoPrepare3GPPBodyL();
+        CompleteSelf( KErrNone );
+        }
+    }
+
+// ---------------------------------------------------------
+// DoPrepareErrorResponseMessageL
+// ---------------------------------------------------------
+void CMmsViewerLaunchOperation::DoPrepareErrorResponseMessageL()
+    {
+    CMsgBodyControl* textControl = CMsgBodyControl::NewL( &iView );
+    CleanupStack::PushL( textControl );
+    textControl->SetControlId( EMsgComponentIdBody );
+
+    textControl->InsertTextL(
+        static_cast<CMmsClientMtm&>( iDocument.Mtm() ).ResponseText() );
+
+    iView.AddControlL( textControl, EMsgComponentIdBody, EMsgFirstControl, EMsgBody );
+    CleanupStack::Pop( textControl );
+    }
+
+// ---------------------------------------------------------
+// DoPrepare3GPPBodyL
+// ---------------------------------------------------------
+void CMmsViewerLaunchOperation::DoPrepare3GPPBodyL()
+    {
+    CMsgImageControl* imageControl = CMsgImageControl::NewL( 
+        iView, 
+        &iControlObserver );
+    CleanupStack::PushL( imageControl );
+
+    TParse fileParse;
+
+    fileParse.Set( KMmsUiMbmFile, &KDC_APP_BITMAP_DIR, NULL );
+    imageControl->LoadIconL(
+        fileParse.FullName( ),
+        KAknsIIDQgnGrafMmsPlay,
+        EMbmMmsuiQgn_graf_mms_play,
+        EMbmMmsuiQgn_graf_mms_play_mask );
+
+    TAknWindowLineLayout layOut( AknLayoutScalable_Apps::msg_data_pane_g7().LayoutLine() );
+    TAknLayoutRect iconLayout;
+    iconLayout.LayoutRect( MsgEditorCommons::MsgDataPane(),
+                           layOut );
+
+    imageControl->SetIconSizeL( iconLayout.Rect().Size() );
+    imageControl->SetIconVisible( ETrue );
+    
+    imageControl->SetControlId( EMsgComponentIdImage );
+    //The ownership of imageControl is transferred to iView
+    iView.AddControlL( imageControl, EMsgComponentIdImage, EMsgFirstControl, EMsgBody );
+    CleanupStack::Pop( imageControl );
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerLaunchOperation::DoCancel
+//
+// ---------------------------------------------------------
+//
+void CMmsViewerLaunchOperation::DoCancel()
+    {
+    LOGTEXT(_L8("CMmsViewerLaunchOperation::DoCancel") );
+    if ( iSlideLoader )
+        {
+        iSlideLoader->Cancel();
+        }
+    iObserver.ViewerOperationEvent(
+        EMmsViewerOperationLaunch,
+        EMmsViewerOperationCancel,
+        KErrNone );
+    CompleteActiveSelf( KErrCancel );
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerLaunchOperation::RunL
+//
+// ---------------------------------------------------------
+//
+void CMmsViewerLaunchOperation::RunL()
+    {
+    LOGTEXT2( _L("CMmsViewerLaunchOperation::RunL iStatus=%d"), iStatus.Int() );
+    if ( iStatus.Int() == KErrCancel )
+        {
+        iObserver.ViewerOperationEvent(
+            EMmsViewerOperationLaunch,
+            EMmsViewerOperationCancel,
+            iStatus.Int() );
+        return;
+        }
+    else if ( iStatus.Int() != KErrNone )
+        {
+        User::Leave( iStatus.Int() );
+        }
+
+    DoLaunchStepL();
+    }
+
+// ---------------------------------------------------------
+// CMmsViewerLaunchOperation::RunError
+//
+// ---------------------------------------------------------
+//
+TInt CMmsViewerLaunchOperation::RunError( TInt aError )
+    {
+    LOGTEXT2(_L("CMmsViewerLaunchOperation::RunError aError %d"), aError );
+    if ( aError == KLeaveExit )
+        {
+        return KLeaveExit;
+        }
+    iObserver.ViewerOperationEvent(
+        EMmsViewerOperationLaunch,
+        EMmsViewerOperationError,
+        aError );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// InitializeReady
+// ---------------------------------------------------------
+//
+void CMmsViewerLaunchOperation::InitializeReady( TInt aParseResult, TInt aError )
+    {
+    LOGTEXT2(_L("CMmsViewerLaunchOperation::InitializeReady aError %d"), aError );
+    iIsInitialised = ETrue;
+    iParseResult = aParseResult;
+    if ( !IsActive() )
+        {
+        SetActiveNoCompleteSelf();
+        }
+    CompleteActiveSelf( aError );
+    }
+
+// ---------------------------------------------------------
+// UiSlideEvent
+// ---------------------------------------------------------
+//
+void CMmsViewerLaunchOperation::SlideLoadReady( TInt aError )
+    {
+    LOGTEXT2(_L("CMmsViewerLaunchOperation::SlideLoadReady aError %d"), aError );
+    CompleteActiveSelf( aError );
+    }
+
+// EOF