csxhelp/src/CSXHDocument.cpp
branchRCL_3
changeset 18 cbffe13eac63
--- /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 <eikprogi.h>
+
+#include <cshelp.rsg>
+#include <AknProgressDialog.h>
+
+
+// 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;    
+    }    
+