diff -r 000000000000 -r 72b543305e3a mobilemessaging/mmsui/viewersrc/MmsViewerLaunchOperation.cpp --- /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 +#include +#include // for CMsgEditorView +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include "UniMmsViewerDocument.h" + +#include +#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( 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