diff -r 000000000000 -r 72b543305e3a mobilemessaging/unieditor/application/src/UniEditorChangeSlideOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/unieditor/application/src/UniEditorChangeSlideOperation.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2006,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: UniEditorChangeSlideOperation implementation +* +*/ + + + +// ========== INCLUDE FILES ================================ +#include + +#include + +#include "UniClientMtm.h" + +#include + +#include +#include +#include +#include + +#include "UniEditorHeader.h" +#include "UniEditorChangeSlideOperation.h" +#include "UniEditorEnum.h" + +// ========== EXTERNAL DATA STRUCTURES ===================== + +// ========== EXTERNAL FUNCTION PROTOTYPES ================= + +// ========== CONSTANTS ==================================== + +// ========== MACROS ======================================= + +// ========== LOCAL CONSTANTS AND MACROS =================== + +// ========== MODULE DATA STRUCTURES ======================= + +// ========== LOCAL FUNCTION PROTOTYPES ==================== + +// ========== LOCAL FUNCTIONS ============================== + +// ========== MEMBER FUNCTIONS ============================= + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::NewL +// +// Factory method. +// --------------------------------------------------------- +// +CUniEditorChangeSlideOperation* CUniEditorChangeSlideOperation::NewL( + MUniEditorOperationObserver& aOperationObserver, + CUniEditorDocument& aDocument, + CUniEditorHeader& aHeader, + CUniSlideLoader& aSlideLoader, + CMsgEditorView& aView, + RFs& aFs ) + { + CUniEditorChangeSlideOperation* self = + new ( ELeave ) CUniEditorChangeSlideOperation( aOperationObserver, + aDocument, + aHeader, + aSlideLoader, + aView, + aFs ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::CUniEditorChangeSlideOperation +// +// Constructor. +// --------------------------------------------------------- +// +CUniEditorChangeSlideOperation::CUniEditorChangeSlideOperation( + MUniEditorOperationObserver& aOperationObserver, + CUniEditorDocument& aDocument, + CUniEditorHeader& aHeader, + CUniSlideLoader& aSlideLoader, + CMsgEditorView& aView, + RFs& aFs ) : + CUniEditorOperation( aOperationObserver, aDocument, aFs, EUniEditorOperationChangeSlide ), + iHeader( aHeader ), + iSlideLoader( aSlideLoader ), + iView( aView ) + { + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::ConstructL +// +// 2nd phase constructor. +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::ConstructL() + { + BaseConstructL(); + iSaveOperation = CUniEditorSaveOperation::NewL( *this, iDocument, iHeader, iView, iFs ); + } + + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::~CUniEditorChangeSlideOperation +// --------------------------------------------------------- +// +CUniEditorChangeSlideOperation::~CUniEditorChangeSlideOperation() + { + Cancel(); + delete iSaveOperation; + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::ChangeSlide +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::ChangeSlide( TInt aNextNum ) + { + ResetErrors(); + + iNextNum = aNextNum; + iOperationState = EUniEditorChangeSlideSave; + + CompleteSelf( KErrNone ); + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::DoChangeSlideStepL +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::DoChangeSlideStepL() + { + switch ( iOperationState ) + { + case EUniEditorChangeSlideSave: + { + DoSaveL(); + break; + } + case EUniEditorChangeSlideLoad: + { + DoLoadL(); + break; + } + case EUniEditorChangeSlideFinalize: + { + DoFinalizeL(); + break; + } + case EUniEditorChangeSlideEnd: + { + iObserver.EditorOperationEvent( EUniEditorOperationChangeSlide, + EUniEditorOperationComplete ); + break; + } + default: + { + SetErrorAndReport( KErrUnknown ); + break; + } + } + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::DoLoadL +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::DoLoadL() + { + iSlideLoader.ResetViewL(); + + iSlideLoader.LoadSlideL( *this, iNextNum ); + SetPending(); + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::DoSaveL +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::DoSaveL() + { + iSaveOperation->Save( ERegularSave ); + SetPending(); + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::DoFinalizeL +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::DoFinalizeL() + { + // Moved to iSlideLoader.ResetViewL(), because sometimes removing + // causes new calculation of message size, which requires existence of + // text control, but it was already removed in ResetViewL() + iView.SetScrollParts( iDocument.DataModel()->SmilModel().SlideCount() ); + iView.SetCurrentPart( iNextNum ); + iDocument.SetCurrentSlide( iNextNum ); + + if ( iNextNum ) + { + iHeader.RemoveFromViewL(); + } + else + { + iHeader.AddToViewL(); + } + + iOperationState = EUniEditorChangeSlideEnd; + CompleteSelf( KErrNone ); + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::DoCancelCleanup +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::DoCancelCleanup() + { + if ( iSaveOperation ) + { + iSaveOperation->Cancel(); + } + + iSlideLoader.Cancel(); + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::RunL +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::RunL() + { + PrintOperationAndState(); + if ( !SetErrorAndReport( iStatus.Int() ) ) + { + DoChangeSlideStepL(); + } + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::HandleOperationEvent +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::HandleOperationEvent( TUniEditorOperationType /*aOperation*/, + TUniEditorOperationEvent /*aEvent*/ ) + { + CMDXMLDocument* dom = iSaveOperation->DetachDom(); + if ( dom ) + { + iDocument.DataModel()->SetDom( dom ); + } + + iOperationState = EUniEditorChangeSlideLoad; + CompleteOperation( KErrNone ); + } + +// --------------------------------------------------------- +// CUniEditorChangeSlideOperation::SlideLoadReady +// --------------------------------------------------------- +// +void CUniEditorChangeSlideOperation::SlideLoadReady( TInt aError ) + { + iOperationState = EUniEditorChangeSlideFinalize; + CompleteOperation( aError ); + } + + +// EOF