diff -r 12f60d9a73b3 -r cbffe13eac63 csxhelp/src/CSXHDocument.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHDocument.cpp Wed Sep 01 12:30:56 2010 +0100 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 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: CCSXHDocument class definition +* +*/ + + +#include "CSXHDocument.h" +#include "CSXHAppUi.h" + +#include "CSXHHelpDataBase.h" +#include "CSXHKywdTOC1.h" +#include "CSXHViewIDs.h" +#include + +#include +#include + + +// Standard Symbian OS construction sequence +CCSXHDocument* CCSXHDocument::NewL(CEikApplication& aApp) + { + CCSXHDocument* self = NewLC(aApp); + CleanupStack::Pop(self); + return self; + } + +CCSXHDocument* CCSXHDocument::NewLC(CEikApplication& aApp) + { + CCSXHDocument* self = new (ELeave) CCSXHDocument(aApp); + CleanupStack::PushL(self); + return self; + } + +CCSXHDocument::CCSXHDocument(CEikApplication& aApp) : CAknDocument(aApp) + {// no implementation required + } + +CCSXHDocument::~CCSXHDocument() + { + delete iHelpDataBase; + } + +CEikAppUi* CCSXHDocument::CreateAppUiL() + { + // Create the application user interface, and return a pointer to it, + // the framework takes ownership of this object. ConstructL of the AppUi + // object will be called by the Application Framework + iHelpAppUi = new (ELeave) CCSXHAppUi; + + HBufC* appToc = CCSXHAppUi::GetCoeEnv()->AllocReadResourceLC( R_CSHELP_TOC_APP_HELPS ); + iHelpDataBase = CCSXHHelpDataBase::NewL(CCSXHAppUi::GetCoeEnv(),AppCaption(), *appToc); + CleanupStack::PopAndDestroy( appToc ); + + iDisplayTopic = iHelpDataBase->GetMainTopics(); + iPrevTopic = NULL; + + iProgressDialog = NULL; + + return iHelpAppUi; + } +// -------------------------------------------------------------------------- +// Sets the topic to be displayed next +// -------------------------------------------------------------------------- +void CCSXHDocument::SetDisplayTopic(CCSXHHelpContentBase* aDisplayTopic) + { + iDisplayTopic = aDisplayTopic; + iPrevTopic = NULL; + + if(iDisplayTopic == NULL) + iDisplayTopic = iHelpDataBase->GetMainTopics(); + } +// -------------------------------------------------------------------------- +// Sets the topic to be displayed next and the previous topic +// The previous topic is needed to highlight the correct item in the listbox +// -------------------------------------------------------------------------- +void CCSXHDocument::SetDisplayAndPrevTopic(CCSXHHelpContentBase* aDisplayTopic) + { + iPrevTopic = iDisplayTopic; + iDisplayTopic = aDisplayTopic; + + if(iDisplayTopic == NULL) + iDisplayTopic = iHelpDataBase->GetMainTopics(); + + } + +void CCSXHDocument::SendMessageToAppUiL(TInt aCommand) + { + iHelpAppUi->ProcessCommandL(aCommand); + } + +// -------------------------------------------------------------------------- +// Sets the context topic as the next topic to be displayed +// -------------------------------------------------------------------------- +TBool CCSXHDocument::SetContextTopicAsDisplayTopicL(const TDesC8& aContextMessage) + { + CCSXHHelpContentBase* topic = iHelpDataBase->GetContextTopic(aContextMessage); + if(topic) + { + SetDisplayTopic(topic); + return ETrue; + } + return EFalse; + } +CCSXHHelpContentBase* CCSXHDocument::GetHtmlTopicForUrlL(const TDesC& url) + { + return iHelpDataBase->GetHtmlTopicForUrlL(url); + } + +void CCSXHDocument::InitProgressBarL() + { + + iProgressDialog = new(ELeave)CAknProgressDialog( + REINTERPRET_CAST(CEikDialog**,&iProgressDialog)); + iProgressDialog->PrepareLC(R_CSHELP_SEARCH_PROGRESS_NOTE); + + CEikProgressInfo* pBar = iProgressDialog->GetProgressInfoL(); + iTotalKeywordsInResultView = iHelpDataBase->InitGenerateKeywordTOC2ListL( + STATIC_CAST(CCSXHKywdTOC1*,iDisplayTopic)); + pBar->SetFinalValue(iTotalKeywordsInResultView); + iIdle = CIdle::NewL(CActive::EPriorityLow); + TCallBack callback(CallBack, this); + iIdle->Start(callback); + iProgressDialog->RunDlgLD(CAknNoteDialog::ENoTone); + } + +void CCSXHDocument::FreeProgressBarL() + { + delete iIdle; + iIdle = NULL; + if(iProgressDialog) + { + iProgressDialog->ProcessFinishedL(); + iProgressDialog = NULL; + } + } + +TInt CCSXHDocument::CallBack(TAny* aThis) + { + TInt err(KErrNone); + TBool res(EFalse); + CCSXHDocument* self = STATIC_CAST(CCSXHDocument*, aThis); + TRAP( err, res = self->DoCallBackL() ); + if(err != KErrNone ) + { + TRAP_IGNORE(self->FreeProgressBarL()); + } + return res; + } +TBool CCSXHDocument::DoCallBackL() + { + if(!iProgressDialog) + { + delete iIdle; + iIdle = NULL; + return EFalse; + } + + CEikProgressInfo* pBar= iProgressDialog->GetProgressInfoL(); + pBar->SetAndDraw(iHelpDataBase->GetKeywordSearchCount()); + + if(iHelpDataBase->GetKeywordSearchCount() >= iTotalKeywordsInResultView) + { + FreeProgressBarL(); + return EFalse; + } + + return ETrue; + } +