diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/FeedsSrc/FeedsFeedView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserui/browser/FeedsSrc/FeedsFeedView.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,355 @@ +/* +* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: A view to browse a given feed. +* +*/ + + +#include +#include +#include +#include +#include +#include +#include + +#include "BrowserAppUi.h" +#include "CommonConstants.h" +#include "Browser.hrh" +#include +#include "BrowserUtil.h" +#include +#include +#include "FeedsFeedContainer.h" +#include "FeedsFeedView.h" + +#include "Logger.h" + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::NewL +// +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CFeedsFeedView* CFeedsFeedView::NewL( MApiProvider& aApiProvider, TRect& aRect ) + + { + CFeedsFeedView* self = new (ELeave) CFeedsFeedView(aApiProvider); + + CleanupStack::PushL(self); + self->ConstructL(aRect); + CleanupStack::Pop(); + + return self; + } + + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::CFeedsFeedView +// +// C++ default constructor. +// ----------------------------------------------------------------------------- +// +CFeedsFeedView::CFeedsFeedView(MApiProvider& aApiProvider) +: CBrowserViewBase( aApiProvider ),iPageScalerEnabled(EFalse),iPenEnabled(EFalse) + { + iPenEnabled = AknLayoutUtils::PenEnabled(); + } + + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::ConstructL +// +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CFeedsFeedView::ConstructL(TRect& aRect) + { + // this is here in case content view wasn't activated yet on browser startup. + iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserContentViewId ); + + BaseConstructL(R_FEEDS_FEED_VIEW); + + iContainer = CFeedsFeedContainer::NewL( this, ApiProvider() ); + iContainer->SetRect( aRect ); + iOrigRect.iTl = aRect.iTl; + iOrigRect.iBr = aRect.iBr; + iContainer->MakeVisible(EFalse); + + if(iPenEnabled) + { + Toolbar()->SetToolbarObserver(this);; + } + } + + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::~CFeedsFeedView +// +// Deconstructor. +// ----------------------------------------------------------------------------- +// +CFeedsFeedView::~CFeedsFeedView() + { + DoDeactivate(); + + delete iContainer; + } + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::Id +// +// Returns the id of the view. +// ----------------------------------------------------------------------------- +// +TUid CFeedsFeedView::Id() const + { + return KUidBrowserFeedsFeedViewId; + } + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::HandleCommandL +// +// Processes commands. +// ----------------------------------------------------------------------------- +// +void CFeedsFeedView::HandleCommandL(TInt aCommand) + { + TBool handled = EFalse; + + // Handle softkeys and other Symbian commands first. + switch (aCommand) + { + case EAknSoftkeyBack: + iApiProvider.FeedsClientUtilities().ShowTopicViewLocalL(iContainer->CurrentItem()); + handled = ETrue; + break; + + case EAknSoftkeyNext: + iContainer->ShowNextItemL(); + handled = ETrue; + break; + +#ifdef __SERIES60_HELP + case EAknCmdHelp: + { + iApiProvider.SetLastActiveViewId(Id()); + HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), + AppUi()->AppHelpContextL()); + handled = ETrue; + break; + } +#endif //__SERIES60_HELP + } + + if (handled) + { + return; + } + + switch (aCommand) + { + case EFeedsBack: + iApiProvider.FeedsClientUtilities().ShowTopicViewLocalL(iContainer->CurrentItem()); + break; + + case EFeedsShowNextItem: + iContainer->ShowNextItemL(); + break; + + case EFeedsShowPrevItem: + iContainer->ShowPrevItemL(); + break; + + case EFeedsSeeFullStory: + iContainer->iBrowserControl->HandleCommandL((TBrCtlDefs::ECommandIdBase + TBrCtlDefs::ECommandOpen)); + break; + + default: + iApiProvider.FeedsClientUtilities().HandleCommandL(Id(),aCommand); + break; + } + } + + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::DoActivateL +// +// Called when the view is activated. +// ----------------------------------------------------------------------------- +// +void CFeedsFeedView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/) + { + // fix bug RFON-7FJS2Z: need to activate status pane going back from full story page to feeds view + StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ); + StatusPane()->MakeVisible( ETrue ); + //Take Button group pointer + CEikButtonGroupContainer* pButtonGroupContainer = CEikButtonGroupContainer::Current(); + if (!iContainerOnStack) + { + AppUi()->AddToViewStackL(*this, iContainer); + //Make button group invisible in order to let container have correct Rect. + //Patch is based on comments received from AVKON + if(pButtonGroupContainer) pButtonGroupContainer->MakeVisible(EFalse); + iContainer->SetRect(iOrigRect); + if(iContainer->iBrowserControl->BrowserSettingL(TBrCtlDefs::ESettingsPageOverview)) + { + TRAP_IGNORE(iContainer->iBrowserControl->SetBrowserSettingL(TBrCtlDefs::ESettingsPageOverview, EFalse)); + iPageScalerEnabled = ETrue; + } + TRAP_IGNORE(iContainer->iBrowserControl->HandleCommandL( + (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandGainFocus)); + + iContainer->MakeVisible(ETrue); + //Again make Button group visible + if(pButtonGroupContainer) pButtonGroupContainer->MakeVisible(ETrue); + iContainerOnStack = ETrue; + // resize screen after calling SetRect. This way looks better + iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch); + } + + // Set the current feed. + iContainer->SetCurrentFeedL(*(iApiProvider.FeedsClientUtilities().CurrentFeed()), iInitialItem); + + iApiProvider.SetLastActiveViewId(Id()); + UpdateToolbarButtonsState(); + } + + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::DoDeactivate +// +// Called when the view is deactivated. +// ----------------------------------------------------------------------------- +// +void CFeedsFeedView::DoDeactivate() + { + if (iContainerOnStack) + { + iContainer->ClearNavigationPane(); + + if(iPageScalerEnabled) + { + TRAP_IGNORE(iContainer->iBrowserControl->SetBrowserSettingL(TBrCtlDefs::ESettingsPageOverview, ETrue)); + iPageScalerEnabled = EFalse; + } + TRAP_IGNORE(iContainer->iBrowserControl->HandleCommandL( + (TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandLoseFocus)); + + AppUi()->RemoveFromViewStack(*this, iContainer); + iContainer->MakeVisible(EFalse); + + iInitialItem = iContainer->CurrentItem(); + iContainerOnStack = EFalse; + + // when exit from feeds view, viewMgr might be deleted already + if ( !ApiProvider().ExitInProgress() ) + { + TRAP_IGNORE(iApiProvider.FeedsClientUtilities().ItemStatusWriteToServerL()); + } + } + } + + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::DynInitMenuPaneL +// +// Disables unrelated menu options. +// ----------------------------------------------------------------------------- +// +void CFeedsFeedView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) + { + __ASSERT_DEBUG( (aMenuPane != NULL), Util::Panic( Util::EUninitializedData )); + + // Handle the main menu. + if (aResourceId == R_FEEDS_FEED_VIEW_MENU) + { + // Back to Page (if page loaded) + if ( iApiProvider.IsPageLoaded() ) + { + iApiProvider.FeedsClientUtilities().AddItemL( *aMenuPane, EWmlCmdBackToPage, R_BROWSER_MENU_ITEM_BACK_TO_PAGE ); + } + } + + iApiProvider.FeedsClientUtilities().DynInitMenuPaneL(aResourceId, aMenuPane ); + } + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::SetInitialItem +// +// Sets the initial item once the view is activated. +// ----------------------------------------------------------------------------- +// +void CFeedsFeedView::SetInitialItem(TInt aItemIndex) + { + iInitialItem = aItemIndex; + } + +// ----------------------------------------------------------------------------- +// CFeedsTopicView::UpdateToolbarButtonsState +// +// Updates the state of the toolbar buttons depending on the situation +// ----------------------------------------------------------------------------- +// + +void CFeedsFeedView::UpdateToolbarButtonsState() + { + if ( iContainer->ItemCount() > 1 ) + { + Toolbar()->SetItemDimmed(EFeedsShowPrevItem, EFalse, ETrue); + Toolbar()->SetItemDimmed(EFeedsShowNextItem, EFalse, ETrue); + } + else + { + Toolbar()->SetItemDimmed(EFeedsShowPrevItem, ETrue, ETrue); + Toolbar()->SetItemDimmed(EFeedsShowNextItem, ETrue, ETrue); + } + Toolbar()->SetItemDimmed(EFeedsSeeFullStory, EFalse, ETrue); + } + +// --------------------------------------------------------------------------- +// CFeedsFeedView::CommandSetResourceIdL +// --------------------------------------------------------------------------- +TInt CFeedsFeedView::CommandSetResourceIdL() + { + // It is never called, but this function have to be implemented + return KWmlEmptyResourceId; + } + +// --------------------------------------------------------- +// CFeedsFeedView::HandleClientRectChange +// --------------------------------------------------------- +// +void CFeedsFeedView::HandleClientRectChange() + { + if( iContainer ) + { + iContainer->MakeVisible(EFalse); + iContainer->SetRect(ClientRect()); + iContainer->MakeVisible(ETrue); + } + } + +// ----------------------------------------------------------------------------- +// CFeedsFeedView::DisconnectL +// ----------------------------------------------------------------------------- +// +void CFeedsFeedView::DisconnectL() + { + if( iContainer ) + { + iContainer->iBrowserControl->HandleCommandL( TBrCtlDefs::ECommandDisconnect + TBrCtlDefs::ECommandIdBase ); + } + }