diff -r 522cd55cc3d7 -r 13ae750350c9 landmarksui/msgviewer/src/CLmkMsgViewerAppUi.cpp --- a/landmarksui/msgviewer/src/CLmkMsgViewerAppUi.cpp Tue Feb 02 00:16:03 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,503 +0,0 @@ -/* -* Copyright (c) 2002 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: LandmarksUi Content File - Provides LM UI class methods. -* -*/ - - - - - - - -// INCLUDE FILES -#include "CLmkMsgViewerAppUi.h" -#include "CLmkMsgViewerAppView.h" -#include "landmarks.hrh" -#include "CLmkMsgViewerDocument.h" -#include "CLmkParser.h" -#include "CLmkSender.h" -#include "CLmkPackageEditorImpl.h" -#include "CLmkDlgPackageSelectorImpl.h" -#include "LmkConsts.h" -#include "CLmkEditorDlg.h" -#include -#include -#include -#include -#include -#include -#include "LmkNotes.h" -#include - -#if defined(_DEBUG) -// CONSTANTS -/// Unnamed namespace for local definitions -namespace { - -_LIT( KPanicMsg, "CLmkMsgViewerAppUi"); - -void Panic( TPanicCode aReason ) - { - User::Panic( KPanicMsg, aReason ); - } -} // namespace -#endif - -// Constant for periodic timer -const TInt KOneMicroSec = 1; - -// ================= LOCAL FUNCTIONS ======================= - -//----------------------------------------------------------------------- -// ErrorNoteL -// ---------------------------------------------------------------------------- -// -void ErrorNoteL(const TInt aResourceId) - { - HBufC* noteText = CEikonEnv::Static()->AllocReadResourceLC(aResourceId); - - CAknErrorNote* dialog = - new( ELeave ) CAknErrorNote( R_AKN_INFORMATION_NOTE_WAIT ); - dialog->ExecuteLD( *noteText ); - - CleanupStack::PopAndDestroy(noteText); //noteText - } - -// ================= MEMBER FUNCTIONS ======================= - -// ---------------------------------------------------------- -// CLmkMsgViewerAppUi::ConstructL -// ---------------------------------------------------------- -// -void CLmkMsgViewerAppUi::ConstructL() - { - - BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible); - - iAppView = CLmkMsgViewerAppView::NewL( ClientRect() ); - - // Start an idle timer to start the dialog synchronously. - iIdleTimer = CPeriodic::NewL(CActive::EPriorityIdle); - iIdleTimer->Start(KOneMicroSec, KOneMicroSec, - TCallBack(CallBackFuncL,this)); - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::~CLmkMsgViewerAppUi -// Destructor -// Frees reserved resources -// ---------------------------------------------------- -// -CLmkMsgViewerAppUi::~CLmkMsgViewerAppUi() - { - if ( iIdleTimer ) - { - delete iIdleTimer; - iIdleTimer = NULL; - } - - TInt err = KErrNone; - TRAP(err, CloseWaitNoteL()); - - delete iAppView; - delete iLmkSender; - delete iParser; - delete iDb; - - if( iDoorObserver ) - { - iDoorObserver->NotifyExit( MApaEmbeddedDocObserver::EEmpty ); - } - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::HandleCommandL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::HandleCommandL( TInt aCommand ) - { - switch ( aCommand ) - { - // these all are same: save & exit - case EAknSoftkeyBack: - case EAknSoftkeyExit: - case EAknCmdExit: - case EEikCmdExit: - { - Exit(); - break; - } - default: - { - break; - } - } - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::LmkSender -// ---------------------------------------------------- -// -CLmkSender& CLmkMsgViewerAppUi::LmkSender() const - { - __ASSERT_DEBUG( iLmkSender, Panic( KLmkPanicNullMember ) ); - return *iLmkSender; - } - - -// ---------------------------------------------------------------------------- -// CLmkMsgViewerAppUi::OpenFileL -// This is called by framework when application is already open in background -// and user opens other file -// New file to been shown is passed via aFileName. -// ---------------------------------------------------------------------------- -// -void CLmkMsgViewerAppUi::OpenFileL( const TDesC& aFileName ) - { - // File changed. - - // TODO: What to do with the possibly existing package? - // Should we just leave or do something else? - if ( iParser ) - { - User::Leave( KErrAlreadyExists ); - } - else - { - Document()->OpenFileL( EFalse, aFileName, iEikonEnv->FsSession() ); - } - } - - -// ---------------------------------------------------------------------------- -// CLmkMsgViewerAppUi::OpenFileL -// This is called by framework when application is already open in background -// and user opens other file -// New file to been shown is passed via aFileName. -// ---------------------------------------------------------------------------- -// -void CLmkMsgViewerAppUi::OpenFileL(RFile& aFileHandle ) - { - // File changed. - if ( iParser ) - { - User::Leave( KErrAlreadyExists ); - } - else - { - CFileStore* aFileStore = NULL; - static_cast(Document())->OpenFileL(aFileStore, aFileHandle); - } - } - -// ---------------------------------------------------------------------------- -// CLmkMsgViewerAppUi::ProcessCommandParametersL -// This method must return true or documents OpenFileL() get wrong file name. -// ---------------------------------------------------------------------------- -// -TBool CLmkMsgViewerAppUi::ProcessCommandParametersL( - TApaCommand /*aCommand*/, - TFileName& /*aDocumentName*/, - const TDesC8& /*aTail*/ ) - { - // Never call CEikAppUi::ProcessCommandParametersL(..) because - // it is so harmful to overwrite and destroy aDocumentName. - - // Return ETrue so that CLmkMsgViewerAppUi::OpenFileL() gets - // the right document name. - return ETrue; - } - - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::HandleOperationL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::HandleOperationL( - TOperationTypes aType, - TReal32 /*aProgress*/, - TInt aStatus ) - { - __ASSERT_DEBUG( ( aType == EInitialize || - aType == EParse ) && - aStatus != KPosLmOperationNotComplete, - Panic( KLmkPanicAlreadyActive ) ); - - TInt err = KErrNone; - if (aType == EInitialize) - { - TRAP(err, HandleDbInitFinishedL(aStatus)); - } - else // (aType == EParse) - { - TRAP(err, HandleParseFinishedL(aStatus)); - } - - if (err) - { - CloseWaitNoteL(); // when wait note closes, application exits - } - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::HandleDbInitFinishedL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::HandleDbInitFinishedL( TInt aStatus ) - { - if (aStatus != KErrNone) - { - CCoeEnv::Static()->HandleError(aStatus); - User::Leave(aStatus); - } - iParser->StartParsingL(); - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::HandleParseFinishedL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::HandleParseFinishedL( TInt aStatus ) - { - if (aStatus != KErrNone) - { - ErrorNoteL(R_LMK_BADPACKAGE_ERROR); - User::Leave(aStatus); - } - // now everything's ready for viewing - iDataReadyForView = ETrue; - CloseWaitNoteL(); // when wait note closes, view dialog opens - } - -void CLmkMsgViewerAppUi::CloseWaitNoteL() - { - if (iWaitDialog) - { - iWaitDialog->ProcessFinishedL(); - iWaitDialog = NULL; - } - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::ExecuteLmViewerL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::ExecuteLmViewerL() - { - __ASSERT_DEBUG( iParser->NumOfParsedLandmarks() == 1, - Panic( KLmkPanicOutOfRange ) ); - - CLmkPackageEditorImpl* editorImpl = - CLmkPackageEditorImpl::NewL( *iDb, *iParser, *iLmkSender, 0 ); - - // Parser observing responsibility is given to the lm viewer, - // application is not interested in it anymore: - iParser->ChangeObserver( *editorImpl ); - editorImpl->ExecuteLD(); - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::ExecutePkgViewerL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::ExecutePkgViewerL() - { - __ASSERT_DEBUG( iParser->NumOfParsedLandmarks() > 1, - Panic( KLmkPanicOutOfRange ) ); - - CLmkDlgPackageSelectorImpl* pkgViewer = - CLmkDlgPackageSelectorImpl::NewL( *iDb, *iParser, *iLmkSender ); - CleanupStack::PushL( pkgViewer ); - - // Parser observing responsibility is given to the package viewer, - // application is not interested in it anymore: - iParser->ChangeObserver( *pkgViewer ); - - CArrayFix* selectedItems = - new( ELeave ) CArrayFixFlat( KLmkMultiSelectionGranularity ); - CleanupStack::PushL( selectedItems ); - - pkgViewer->ExecuteL( *selectedItems, iParser->PackageName()); - CleanupStack::PopAndDestroy( selectedItems ); - CleanupStack::PopAndDestroy( pkgViewer ); - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::OpenL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::OpenL( const TDesC& aFilename ) - { - iParser = CLmkParser::NewL( aFilename, *iDb, *this, EFalse ); - DoOpenL(); - Exit(); - } - -// ---------------------------------------------------- -// CLmkMsgViewerAppUi::OpenL -// ---------------------------------------------------- -// -void CLmkMsgViewerAppUi::OpenL(RFile& aFile) - { - iParser = CLmkParser::NewL( aFile, *iDb, *this, EFalse ); - DoOpenL(); - Exit(); - } - -void CLmkMsgViewerAppUi::DoOpenL() - { - // We need to initialize db before we start parsing: - iParser->InitializeDbL(); - - iWaitDialog = new( ELeave ) CAknWaitDialog( NULL, ETrue ); - if (!iWaitDialog->ExecuteLD( R_LMK_MSGVIEWER_WAIT )) - { - //making iWaitDialog null, since framework destroys waitnote - //dialog on pressing cancel. - - iWaitDialog = NULL; - } - - if( iDataReadyForView ) - { - if ( iParser->NumOfParsedLandmarks() == 1 ) - { - ExecuteLmViewerL(); - } - else if ( iParser->NumOfParsedLandmarks() > 1 ) - { - ExecutePkgViewerL(); - } - else - { - // exit - } - } - } - -// ----------------------------------------------------------------------------- -// CLmkMsgViewerAppUi::CallBackFuncL() -// Used to callback by the idle timer in order to launch -// the dialog -// ----------------------------------------------------------------------------- -// -TInt CLmkMsgViewerAppUi::CallBackFuncL(TAny *aPtr) - { - CLmkMsgViewerAppUi* appUi = - static_cast< CLmkMsgViewerAppUi* >( aPtr ); - - if ( appUi ) - { - return ( appUi->LaunchDialogL() ); - } - else - { - // To indicate that the timer is not - // called again, return false to the timer - // RunL - return ( EFalse ); - } - } - - -// ----------------------------------------------------------------------------- -// CLmkMsgViewerAppUi::LaunchDialogL() -// This function accesses the document and launches the -// content. -// ----------------------------------------------------------------------------- -// -TBool CLmkMsgViewerAppUi::LaunchDialogL() - { - if(!iIsDbOpen) - { - // Try to open DB - TRAPD( err, iDb = CPosLandmarkDatabase::OpenL() ); - - if( KErrNone != err ) - { - // Cancel the periodic timer - if ( iIdleTimer->IsActive() ) - { - iIdleTimer->Cancel(); - } - // Display general system error note - HBufC* noteText = StringLoader::LoadL( R_LMK_ERR_EIKON_GENERAL, iEikonEnv ); - CleanupStack::PushL( noteText ); - CAknErrorNote* dialog = new(ELeave)CAknErrorNote( ETrue ); - dialog->SetTone( CAknNoteDialog::EErrorTone ); - dialog->ExecuteLD( *noteText ); - CleanupStack::PopAndDestroy( noteText ); //noteText - // exit LmkMsgViewer app - Exit(); - } - // DB was opened successfully - iIsDbOpen = ETrue; - iLmkSender = CLmkSender::NewL( *iDb ); - } - CLmkMsgViewerDocument* document = - static_cast(iDocument); - - // Check if file-handle in document is valid - if (document->IsFileHandleValid()) - { - // Obtain the file-handle - RFile& fileHandle = document->GetLandmarkContentFileHandle(); - - // Cancel the periodic timer - if ( iIdleTimer->IsActive() ) - { - iIdleTimer->Cancel(); - } - // Launch the content - TRAPD(err,OpenL(fileHandle)); - if(err != KErrNone) - { - if( err == KErrNotSupported) - { - LmkNotes::InformationNoteL( iEikonEnv, R_LMK_BADPACKAGE_ERROR ); - } - Exit(); - } - // Delete and reset the idle-timer - delete iIdleTimer; - iIdleTimer = NULL; - - // Return False to indicate that - // timer need not callback further. - return EFalse; - } - else - { - // Return True to indicate that the - // timer needs to callback this function - // again, as the file-handle is not valid - // yet. - return ETrue; - } - } - -// ----------------------------------------------------------------------------- -// CLmkMsgViewerAppUi::HandleResourceChangeL() -// ----------------------------------------------------------------------------- -// -void CLmkMsgViewerAppUi::HandleResourceChangeL(TInt aType) - { - CAknAppUi::HandleResourceChangeL( aType ); - if ( aType == KEikDynamicLayoutVariantSwitch ) - { - iAppView->SetRect(ClientRect()); - } - } -// End of File