diff -r 000000000000 -r 1f04cf54edd8 csxhelp/HelpEngine/src/CSXHLegacyContentParser.cpp --- /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 +#include +#include +#include +#include + +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 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 appName; + TLinearOrder anOrder(Orderer); + 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* 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 anOrder(Orderer); + 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 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 anOrder(Orderer); + 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; iCategory().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; iCategory().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); + } + }