diff -r 000000000000 -r 1f04cf54edd8 csxhelp/src/CSXHHtmlTopicView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/csxhelp/src/CSXHHtmlTopicView.cpp Tue Jan 26 15:15:23 2010 +0200 @@ -0,0 +1,375 @@ +/* +* 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: CCSXHHtmlTopicView class definition +* +*/ + +// INCLUDES +#include "CSXHHtmlTopicView.h" +#include "CSXHHtmlTopicContainer.h" +#include "CSXHHtmlTOC2.h" +#include "CSXHAppUi.h" +#include "CSXHDocument.h" +#include +#include "CsHelp.hrh" + +#include "CSXHViewIDs.h" +#include "CSXHKywdTOC1.h" +#include "CSXHHelpDataBase.h" +#include "CSXHContextTopic.h" +#include "CSXHHtmlTOC2.h" +#include "CSXHHtmlTOC1.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +TInt CCSXHHtmlTopicView::iFontSize = TBrCtlDefs::EFontSizeLevelNormal; + +CCSXHHtmlTopicView* CCSXHHtmlTopicView::NewL(const TUid& aUid, const TInt& aFlags,const +TRect& aRect) + { + CCSXHHtmlTopicView* temp = new(ELeave) CCSXHHtmlTopicView(aUid,aFlags); + CleanupStack::PushL(temp); + temp->ConstructL(aRect); + CleanupStack::Pop(temp); + return temp; + } + +CCSXHHtmlTopicView::CCSXHHtmlTopicView(const TUid& aUid, const TInt& aFlags): + iUid(aUid),iAppFlags(aFlags) + { + } +CCSXHHtmlTopicView::~CCSXHHtmlTopicView() + { + if(iBCContainer) + { + delete iBCContainer; + iBCContainer = NULL; + } + } + +void CCSXHHtmlTopicView::ConstructL(const TRect& /*aRect*/) + { + BaseConstructL(iAppFlags); + } + +void CCSXHHtmlTopicView::SetViewTypeL(TInt type) + { + if(type == iContextTopicView) + return; + + if(type == EContextHtmlView) + { + iContextTopicView = ETrue; + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK); + } + else + { + iContextTopicView = EFalse; + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_BACK_OPENLINK); + } + } + +TInt CCSXHHtmlTopicView::GetViewType() + { + return iContextTopicView ? EContextHtmlView : EHtmlView; + } + +TUid CCSXHHtmlTopicView::Id() const + { + return iUid; + } +// -------------------------------------------------------------------------- +// Launches an application based on the Application UID and a View ID +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::HandleCommandL(TInt aCommand ) + { + switch(aCommand) + { + case EAknSoftkeyBack: + { + if(iBCContainer->HandleBackKeyL()) + return; + CCSXHDocument *doc = static_cast(AppUi()->Document()); + //if not the current view, return + TUid viewId = doc->GetDisplayTopic()->GetViewID(); + if( viewId != KCSXHHtmlTopicViewID && viewId != KCSXHKywdToc2ViewID ) + { + return; + } + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + CCSXHKywdTOC1* kywdParent = displayTopic->GetKywdParent(); + if(kywdParent) + { + doc->SetDisplayAndPrevTopic(kywdParent); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + else + { + HandleCommandL(ECSXHOpenApplicationTopics); + } + break; + } + case ECSXHOpenApplicationTopics: + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(iBCContainer->GetCurrActiveObject()) + { + doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject()); + CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer(); + } + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + doc->SetDisplayAndPrevTopic(displayTopic->GetParent()); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + case ECSXHTOC1ListView: + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(iBCContainer->GetCurrActiveObject()) + { + doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject()); + CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer(); + } + + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + //These two steps are necessary to set the correct display and prev topics + doc->SetDisplayTopic(displayTopic->GetParent()); + doc->SetDisplayAndPrevTopic(doc->GetHelpDataBase()->GetMainTopics()); + AppUi()->HandleCommandL(ECSXHOpenItem); + } + break; + case ECsHelpCmdFontLarge: + { + TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize); + iBCContainer->SetSelectedFontSizeL(++CurrentFontSize); + iFontSize = CurrentFontSize; + } + break; + case ECsHelpCmdFontSmall: + { + TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize); + iBCContainer->SetSelectedFontSizeL(--CurrentFontSize); + iFontSize = CurrentFontSize; + } + break; + case ECSXHOpenHyperLink: + { + iBCContainer->HandleCommandOpenHyperLinkL(); + } + break; + case ECSXHSearchText: + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(iBCContainer->GetCurrActiveObject()) + { + doc->SetDisplayTopic(iBCContainer->GetCurrActiveObject()); + CCSXHAppUi::GetInstance()->ResetTOC2ViewContainer(); + } + } + AppUi()->HandleCommandL( aCommand ); + break; + case EAknSoftkeyExit: + case EAknSoftkeyClose: + AppUi()->HandleCommandL( aCommand ); + break; + default: + break; + } + } +// -------------------------------------------------------------------------- +// Handlign for view activation. For a context view, the actual display topic +// has to be modified +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::DoActivateL(const TVwsViewId& aPrevViewId,TUid,const TDesC8&) + { + iPrevious = aPrevViewId; + CCSXHDocument *doc = static_cast(AppUi()->Document()); + + if(!iBCContainer) + { + TRAPD(Result,iBCContainer = CCSXHHtmlTopicContainer::NewL(ClientRect(),*doc,this)); + if(KErrNone != Result) + return; + } + + //Set the correct display topic here for context sensitive launch + if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextHtmlTopicViewID) + { + CCSXHContextTopic *topic = STATIC_CAST(CCSXHContextTopic*,doc->GetDisplayTopic()); + doc->SetDisplayTopic(topic->GetTopic()); + iContextTopicView = ETrue; + } + else + { + iContextTopicView = EFalse; + } + + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + TRAPD(err,iBCContainer->SetAndLoadInitialTopicL(displayTopic)); + + if( KErrNone != err ) + { + delete iBCContainer; + iBCContainer = NULL; + return; + } + if( iContextTopicView ) + { + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK); + } + else + { + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_BACK_OPENLINK); + } + iBCContainer->SetMopParent(this); + iBCContainer->SetRect(ClientRect()); + AppUi()->AddToStackL(*this, iBCContainer); + iBCContainer->MakeVisible(ETrue); + } + +void CCSXHHtmlTopicView::DoDeactivate() + { + if(iBCContainer) + { + TRAP_IGNORE(iBCContainer->CancelFetchL()); + iBCContainer->MakeVisible(EFalse); + AppUi()->RemoveFromStack(iBCContainer); + } + } +// -------------------------------------------------------------------------- +// When a view which was previously activated, goes to background and gets +// activated again, the DoActivateL will not be called only ViewActivatedL +// will be called. Special handling is required for the context view for the +// scenario, open context help from any application, with out changing the +// help view, open context help from another application, the contents of the +// context view has to be refreshed with the new topic +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::ViewActivatedL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage) + { + + if(iBCContainer) + { + //This handling is required for the following scenario + //Context sensitive help launch more than once with no + //other view navigation in the help application + CCSXHDocument *doc = static_cast(AppUi()->Document()); + if(doc->GetDisplayTopic()->GetViewID() == KCSXHContextHtmlTopicViewID) + { + CCSXHContextTopic *topic = static_cast(doc->GetDisplayTopic()); + doc->SetDisplayTopic(topic->GetTopic()); + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + iBCContainer->RefreshL(displayTopic); + SetSoftKeysL(R_CSHELP_SOFTKEYS_OPTIONS_CLOSE_OPENLINK); + } + iBCContainer->CheckForMSK(); + } + CAknView::ViewActivatedL(aPrevViewId,aCustomMessageId,aCustomMessage); + } + +void CCSXHHtmlTopicView::SetSoftKeysL(TInt aSoftKeys) + { + if( Cba() ) + { + Cba()->SetCommandSetL( aSoftKeys ); + Cba()->DrawDeferred(); + } + } +// -------------------------------------------------------------------------- +// Dynamically updating Options menu item +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + + if( R_CSXH_MENU_HTMLTOPICVIEW == aResourceId) + { + TInt CurrentFontSize = iBCContainer->GetCurrentValueL(TBrCtlDefs::ESettingsFontSize); + + if(CurrentFontSize == TBrCtlDefs::EFontSizeLevelAllSmall) + { + aMenuPane->SetItemDimmed(ECsHelpCmdFontSmall,ETrue); + } + else if(CurrentFontSize == TBrCtlDefs::EFontSizeLevelAllLarge) + { + aMenuPane->SetItemDimmed(ECsHelpCmdFontLarge,ETrue); + } + + if(!iBCContainer->IsHyperLinkFocused()) + { + aMenuPane->SetItemDimmed(ECSXHOpenHyperLink,ETrue); + } + } + } +// -------------------------------------------------------------------------- +// MSK Handling +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::SetMiddleSoftKey(TBool aValue) + { +#ifndef __SERIES60_30__ + if(AknLayoutUtils::MSKEnabled()) + { + Cba()->MakeCommandVisible(ECSXHOpenHyperLink,aValue); + Cba()->DrawDeferred(); + } +#endif + } + +TInt CCSXHHtmlTopicView::GetCurrentFontSize() + { + return iFontSize; + } + +void CCSXHHtmlTopicView::ResourceChangeHdl(TInt aType) + { + if(iBCContainer) + iBCContainer->HandleResourceChangeImpl(aType); + } + +#ifdef FF_HELP_TUTORIAL_MERGE + // -------------------------------------------------------------------------- +// CCSXHAppUi::LaunchTutorial +// Lauch tutorial if exist, else popup a error message. +// -------------------------------------------------------------------------- +void CCSXHHtmlTopicView::LaunchTutorial() + { + CCSXHDocument *doc = static_cast(AppUi()->Document()); + CCSXHHtmlTOC2 *displayTopic = STATIC_CAST(CCSXHHtmlTOC2*,doc->GetDisplayTopic()); + TCoeHelpContext helpContext; + displayTopic->GetHelpContext(helpContext); + CCSXHAppUi::GetInstance()->SetHelpContext(helpContext); + if( CCSXHAppUi::GetInstance()->IsApplicationPresentInTutorialL() ) + { + CCSXHAppUi::GetInstance()->CallTutorialAiwProviderL(); + } + else + { + HBufC* ErrorMessage = iCoeEnv->AllocReadResourceLC(R_TYPE_NO_HELP_TOPICS); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL(EAknGlobalInformationNote, *ErrorMessage); + + CleanupStack::PopAndDestroy(note); + CleanupStack::PopAndDestroy(ErrorMessage); + } + } +#endif // FF_HELP_TUTORIAL_MERGE