csxhelp/HelpEngine/src/CSXHLegacyContentParser.cpp
changeset 0 1f04cf54edd8
child 5 d06b1526f62c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/csxhelp/HelpEngine/src/CSXHLegacyContentParser.cpp	Tue Jan 26 15:15:23 2010 +0200
@@ -0,0 +1,273 @@
+/*
+* 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:  CCSXHLegacyContentParser class definition
+*
+*/
+
+#include "CSXHLegacyContentParser.h"
+#include "CSXHLegacyTOC1.h"
+#include "CSXHLegacyTOC2.h"
+#include "CSXHKywdTOC1.h"
+#include "CSXHHelpDataBase.h"
+
+#include <coehelp.h>
+#include <coemain.h>
+#include <f32file.h> 
+#include <badesca.h>
+#include <txtrich.h>
+
+CCSXHLegacyContentParser* CCSXHLegacyContentParser::NewL(CCSXHHelpDataBase
+*aDataBase)
+    {
+    CCSXHLegacyContentParser* self = CCSXHLegacyContentParser::NewLC(aDataBase);
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+CCSXHLegacyContentParser* CCSXHLegacyContentParser::NewLC(CCSXHHelpDataBase
+*aDataBase)
+    {
+    CCSXHLegacyContentParser* self = new (ELeave) CCSXHLegacyContentParser(aDataBase);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+    
+void CCSXHLegacyContentParser::ConstructL()
+    {
+    iModel = CHlpModel::NewL(CCoeEnv::Static()->FsSession(), this);     
+    iModel->OpenL();
+    }
+    
+CCSXHLegacyContentParser::CCSXHLegacyContentParser(CCSXHHelpDataBase* aDataBase)
+                        :iTopic(NULL)
+    {
+    iDataBase = aDataBase;
+    iHlpList = NULL;
+    }
+    
+CCSXHLegacyContentParser::~CCSXHLegacyContentParser()
+    {
+    if(iTopic)
+        delete iTopic;
+    if(iHlpList)
+        delete iHlpList;
+    
+    //No need to delete the entries here, it will be done by the database
+    iLegacyTOC1List.Close();    
+    
+    if(iModel)  
+        {
+        TRAP_IGNORE(iModel->CloseL());
+        delete iModel;  
+        }
+    }
+// --------------------------------------------------------------------------
+// Gets the available kywds from the legacy content and sends them to the
+// database
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateKywdTOC1ListL(CCSXHHelpDataBase* aDataBase)
+    {
+    CHlpList* HlpList; 
+    HlpList = CHlpList::NewL();
+    iModel->SearchL(EIndexList);
+    iModel->LoadListL(HlpList); 
+    
+    TInt nCount(HlpList->MdcaCount());
+    for (TInt i(0); i < nCount; i++)
+        {           
+        TBuf<KMaxFileName> appName;
+        appName = HlpList->MdcaPoint(i);
+        TRAP_IGNORE(aDataBase->InsertKeywordL(appName,i,HlpList->Item(i)->HelpFileUid()));
+        }   
+    delete HlpList;
+    }
+// --------------------------------------------------------------------------
+// Gets the available TOC1 from the legacy content and sends them to the
+// database. Local copy of the TOC1 objects is maintained for generating TOC2
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateTOC1ListL(CCSXHHelpDataBase* aDataBase)
+    {    
+    const TInt twoColumnFlatArray = 2;
+    CDesCArray* categoryList = new(ELeave) CDesCArrayFlat(twoColumnFlatArray);
+    CleanupStack::PushL(categoryList);
+    iModel->CategoryListL(categoryList);
+    CCSXHLegacyTOC1* CategoryObj;
+    TBuf<KMaxFileName> appName;
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>);          
+    for (TInt i(0); i < categoryList->Count(); i++)
+        {           
+        appName = categoryList->MdcaPoint(i);                           
+        CategoryObj = CCSXHLegacyTOC1::NewL(appName);
+        if(aDataBase->GetMainTopics()->InsertChild(CategoryObj))
+                iLegacyTOC1List.Append(CategoryObj);//Keep a local copy*/       
+        }
+    CleanupStack::Pop(categoryList);            
+    delete categoryList;
+    }
+// --------------------------------------------------------------------------
+// Gets the available TOC2 objects for the TOC1 object
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateTOC2ListL(CCSXHGenericTOC1& aGenericTOC1Object,
+                                 RPointerArray<CCSXHHelpContentBase>* GenericTOC2List)
+    {
+    iModel->SearchL(ETopicListForCategory, aGenericTOC1Object.GetName());
+    if(iHlpList)
+        {
+        delete iHlpList;
+        //Next line is Needed for code scanner
+        iHlpList = NULL;
+        }
+    iHlpList = CHlpList::NewL();
+    iModel->LoadListL(iHlpList);
+    
+    TInt count(iHlpList->MdcaCount());
+    CCSXHGenericTOC2* PLegacyTOC2;
+    TLinearOrder<CCSXHHelpContentBase> anOrder(Orderer<CCSXHHelpContentBase>); 
+    for (TInt i(0); i < count; i++)
+        {    
+        PLegacyTOC2 = CCSXHLegacyTOC2::NewL(&aGenericTOC1Object,iHlpList->MdcaPoint(i));
+        if (KErrNone != GenericTOC2List->InsertInOrder(PLegacyTOC2,anOrder))
+            delete PLegacyTOC2;
+        }        
+    }       
+// --------------------------------------------------------------------------
+// Gets the RTF content for the given topic
+// --------------------------------------------------------------------------    
+TAny* CCSXHLegacyContentParser::GetTopicContentL(CCSXHGenericTOC2* aTopic)
+    {
+    TInt nCount(iHlpList->MdcaCount());
+    TInt nIndex(0);
+    for(nIndex=0;nIndex < nCount; nIndex++)
+        {
+        TBuf<KMaxFileName> appName; 
+        appName.Append(iHlpList->MdcaPoint(nIndex));
+        if(appName.Compare(aTopic->GetName())==0)
+            break;
+        }
+    if(iTopic)
+        {
+        delete iTopic;
+        //Next line is Needed for code scanner
+        iTopic = NULL;
+        }
+    iTopic = CHlpTopic::NewL();
+    CHlpItem* item = iHlpList->Item(nIndex); 
+    iModel->TopicSearchL(*item);    
+    iModel->LoadTopicL(iTopic);    
+    return iTopic->TopicText();    
+    }
+
+void CCSXHLegacyContentParser::HandleModelEventL(TInt aEvent)
+    {
+    iStatus = aEvent;   
+    }
+
+// --------------------------------------------------------------------------
+// Gets the number of kywd subtopics for the given kywd
+// --------------------------------------------------------------------------    
+TInt CCSXHLegacyContentParser::InitGenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* aKywdTOC1Object)
+    {
+    if(aKywdTOC1Object->LegacyIndex() == -1 || (!iLegacyTOC1List.Count()))      
+        return 0;
+    CHlpList* SearchList; 
+    
+    if(iHlpList)
+        {
+        delete iHlpList;
+        //Next line is Needed for code scanner
+        iHlpList = NULL;
+        }
+    iHlpList = CHlpList::NewL();
+    SearchList = CHlpList::NewLC();
+    iModel->SearchL(EIndexList);
+    iModel->LoadListL(SearchList);  
+    //Search Panel    
+    CHlpItem* item = SearchList->Item(aKywdTOC1Object->LegacyIndex());
+    iModel->IndexSearchL(*item);    
+    iModel->LoadListL(iHlpList);        
+    
+    CleanupStack::PopAndDestroy(SearchList);
+    return iHlpList->MdcaCount();
+    }
+    
+    
+// --------------------------------------------------------------------------
+// Gets the available kywd subtopics for the given kywd
+// --------------------------------------------------------------------------    
+void CCSXHLegacyContentParser::GenerateTOC2ListForKeywordSearchL(CCSXHKywdTOC1* aKywdTOC1Object)
+    {
+    if(aKywdTOC1Object->LegacyIndex() == -1 || (!iLegacyTOC1List.Count()))      
+        return;
+    
+    TInt nCount(iHlpList->MdcaCount());
+    CCSXHGenericTOC2* PLegacyTOC2;
+    TLinearOrder<CCSXHGenericTOC2> anOrder(Orderer<CCSXHGenericTOC2>); 
+    for (TInt i(0); i < nCount; i++)
+        {   
+        PLegacyTOC2 = CCSXHLegacyTOC2::NewL(aKywdTOC1Object,iHlpList->MdcaPoint(i),ETrue);
+        iDataBase->InsertKeywordTopic(aKywdTOC1Object,PLegacyTOC2);
+        iDataBase->IncrementKeywordSearchCount();
+        }    
+  
+    }
+   
+CCSXHLegacyTOC1* CCSXHLegacyContentParser::GetTOC1ForTOC2(CCSXHLegacyTOC2*)
+    {
+    TInt count = iLegacyTOC1List.Count();
+    CCSXHLegacyTOC1* toc1; 
+    for(TInt i = 0; i<count ; ++i)
+        {
+        toc1 = iLegacyTOC1List[i];
+        if(iTopic->Category().Compare(toc1->GetName())==0)
+            return toc1;
+        }
+    return NULL;    
+    }
+    
+CCSXHHelpContentBase* CCSXHLegacyContentParser::GetContextTopic(TCoeHelpContext& aContext)
+    {
+        TRAPD(err,LoadContextTopicL(aContext));
+        if(err != KErrNone || NULL == iTopic)
+            return NULL;
+        
+        TInt count = iLegacyTOC1List.Count();
+        CCSXHLegacyTOC1* toc1; 
+        for(TInt i = 0; i<count ; ++i)
+            {
+            toc1 = iLegacyTOC1List[i];
+            if(iTopic->Category().Compare(toc1->GetName())==0)
+                {
+                return toc1->GetContextTopic(iTopic->TopicTitle());
+                }
+            }
+        return NULL;
+    }
+
+void CCSXHLegacyContentParser::LoadContextTopicL(TCoeHelpContext& aContext)
+    {
+    if(iTopic)
+        {
+        delete iTopic;
+        //Next line is Needed for code scanner
+        iTopic = NULL;
+        }
+    
+    iModel->ContextSearchL(aContext);
+    if(ETopicAvailable == iStatus )
+        {
+        iTopic = CHlpTopic::NewL();
+        iModel->LoadTopicL(iTopic);     
+        }
+    }