diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/BrowserAppSrc/BrowserContentView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserui/browser/BrowserAppSrc/BrowserContentView.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,3467 @@ +/* +* Copyright (c) 2002-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: +* Browser content view +* +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // For Layout_Meta_Data landscape/portrait status + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include "CommsModel.h" +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "Browser.hrh" +#include "BrowserContentView.h" +#include "BrowserContentViewToolbar.h" +#include "BrowserContentViewContainer.h" +#include "BrowserContentViewZoomModeTimer.h" +#include "BrowserBookmarksView.h" +#include "CommonConstants.h" +#include "BrowserAppUi.h" +#include "BrowserGotoPane.h" +#include "Preferences.h" +#include "BrowserPreferences.h" +#include "Display.h" +#include +#include "BrowserBookmarksModel.h" +#include "BrowserDialogs.h" +#include "BrowserUtil.h" +#include "BrowserBmOTABinSender.h" +#include +#include "BrowserUiVariant.hrh" +#include "BrowserAdaptiveListPopup.h" +#include "BrowserApplication.h" +#include "logger.h" +#include +#include "BrowserWindowManager.h" +#include "BrowserWindow.h" +#include "BrowserPopupEngine.h" + +#include +#include +#include +#include +#ifdef RD_SCALABLE_UI_V2 +#include +#endif +#include + +#include "BrowserShortcutKeyMap.h" +_LIT( KSchemaIdentifier, "://" ); +const TInt KSchemaIdentifierLength = 3; + +// Time interval in milliseconds that status pane stays visible after download in fullscreen mode +const TInt KFullScreenStatusPaneTimeout( 3 * 1000000 ); // 3 seconds + +const TInt KAutoFullScreenTimeout( 5 * 1000000 ); // 5 seconds + +const TInt KAutoFullScreenIdleTimeout( 10 * 1000000 ); // 10 seconds +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CBrowserContentView::NewLC +// ----------------------------------------------------------------------------- +// +CBrowserContentView* CBrowserContentView::NewLC( MApiProvider& aApiProvider, + TRect& aRect ) + { + CBrowserContentView* view = + new (ELeave) CBrowserContentView( aApiProvider ); + CleanupStack::PushL(view); + view->ConstructL( aRect ); + + return view; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::CBrowserContentView +// ----------------------------------------------------------------------------- +// +// Scroll indicators may become deprecated +CBrowserContentView::CBrowserContentView( MApiProvider& aApiProvider ) : + CBrowserViewBase( aApiProvider ), + iZoomMode(EFalse), + iContentFullScreenMode( EFalse ), + iIsPluginFullScreenMode( EFalse), + iWasContentFullScreenMode( EFalse ), + iTitle( NULL ) + { + iFindItemIsInProgress = EFalse; + iWasInFeedsView = EFalse; + iPenEnabled = AknLayoutUtils::PenEnabled(); + iFullScreenBeforeEditModeEntry = EFalse; + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::Id +// ----------------------------------------------------------------------------- +// +TUid CBrowserContentView::Id() const + { + return KUidBrowserContentViewId; + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::~CBrowserContentView +// ----------------------------------------------------------------------------- +// +CBrowserContentView::~CBrowserContentView() + { + delete iBrowserContentViewToolbar; + delete iNaviDecorator; + delete iBookmarksModel; + delete iContainer; + delete iEnteredKeyword; + delete iTextZoomLevelArray; + delete iFontSizeArray; + delete iZoomModeTimer; + iNaviPane = NULL; + if ( iToolBarInfoNote ) + { + iToolBarInfoNote->HideInfoPopupNote(); + } + delete iToolBarInfoNote; + delete iStylusPopupMenu; + delete iPeriodic; + delete iAutoFSPeriodic; + delete iIdlePeriodic; + delete iTitle; + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::ConstructL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::ConstructL( TRect& aRect ) + { + + BaseConstructL( R_BROWSER_CONTENT_VIEW ); + + ConstructMenuAndCbaEarlyL(); + + iContainer = CBrowserContentViewContainer::NewL( this, ApiProvider() ); + + iEnteredKeyword = NULL; + + // get the StatusPane pointer + if ( !iNaviPane ) + { + CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv->EikAppUi())->StatusPane(); + // Fetch pointer to the default navi pane control + iNaviPane = + (CAknNavigationControlContainer*)sp->ControlL( + TUid::Uid(EEikStatusPaneUidNavi) ); + } + + // Array for zoom levels (..., 70%, 80%, 90%, 100%,... ) + iTextZoomLevelArray = new( ELeave )CArrayFixFlat ( 1 ); + // Array for zoom font sizes ( 1, 2, ... ) + iFontSizeArray = new( ELeave )CArrayFixFlat ( 1 ); + + // Get the possibile zoom levels + GetTextZoomLevelsL(); + iZoomModeTimer = CBrowserContentViewZoomModeTimer::NewL( this ); + + iToolBarInfoNote = CAknInfoPopupNoteController::NewL(); + HBufC* str = StringLoader::LoadLC(R_BROWSER_TOOLTIP_TOOLBAR); + iToolBarInfoNote->SetTextL(*str); + CleanupStack::PopAndDestroy(); + iBrowserContentViewToolbar = CBrowserContentViewToolbar::NewL(this); + if (iPenEnabled) + { + Toolbar()->SetToolbarObserver(this); + Toolbar()->SetFocusing(EFalse); + ShowToolbarOnViewActivation(ETrue); + } + iShortcutKeyMap = NULL; + iHistoryAtBeginning = EFalse; + iHistoryAtEnd = EFalse; + iZoomSliderVisible = EFalse; + iPeriodic = CPeriodic::NewL(CActive::EPriorityIdle); + iAutoFSPeriodic = CPeriodic::NewL(CActive::EPriorityIdle); + iIdlePeriodic = CPeriodic::NewL(CActive::EPriorityIdle); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::HandleCommandL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::HandleCommandL( TInt aCommand ) + { + // Disabling FullScreen for non-touch devices, before processing some dialog-based shortcut and toolbar actions + if ( !iPenEnabled && iContentFullScreenMode && ( ( aCommand == EWmlCmdFindKeyword ) || + ( aCommand == EWmlCmdHistory ) || + ( aCommand == EWmlCmdGoToAddress ) || + ( aCommand == EWmlCmdShowShortcutKeymap ) || + ( aCommand == EWmlCmdShowMiniature )|| + ( aCommand == EWmlCmdShowToolBar)) ) + { + iWasContentFullScreenMode = iContentFullScreenMode; + EnableFullScreenModeL( EFalse ); + } + + // resume js timers + ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandResumeScriptTimers ); + +#ifdef RD_SCALABLE_UI_V2 + // Close the extended toolbar whenever any item on it is selected + if ( iPenEnabled && Toolbar()->ToolbarExtension()->IsShown() ) + { + Toolbar()->ToolbarExtension()->SetShown( EFalse ); + StartAutoFullScreenTimer(); + } +#endif + +#ifdef __RSS_FEEDS + // Handle the subscribe to submenu. + TInt cmd = aCommand - TBrCtlDefs::ECommandIdBase; + + if ((cmd >= TBrCtlDefs::ECommandIdSubscribeToBase) && + (cmd < TBrCtlDefs::ECommandIdPluginBase)) + { + HandleSubscribeToL(cmd); + return; + } +#endif // __RSS_FEEDS + + if ( ( aCommand != EWmlCmdZoomSliderShow ) && ZoomSliderVisible() ) + { + MakeZoomSliderVisibleL( EFalse ); + } + switch ( aCommand ) + { + case EWmlCmdSetAsHomePage: + { + HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoUrl); + if ( url && url->Length() && TBrowserDialogs::ConfirmQueryYesNoL(R_BROWSER_QUERY_SET_AS_HOME_PAGE)) + { + ApiProvider().Preferences().SetHomePageUrlL(url->Des()); + ApiProvider().Preferences().SetHomePageTypeL( EWmlSettingsHomePageAddress ); + } + CleanupStack::PopAndDestroy(); // url + break; + } + case EWmlCmdFavourites: + { + ApiProvider().SetViewToBeActivatedIfNeededL( + KUidBrowserBookmarksViewId ); + break; + } + + case EWmlCmdHistory: + { + ViewHistoryL(); + break; + } + + case EWmlCmdHistoryBack: + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandHistoryNavigateBack + + (TInt)TBrCtlDefs::ECommandIdBase ); + UpdateTitleL( iApiProvider ); + break; + } + case EWmlCmdHistoryForward: + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandHistoryNavigateForward + + (TInt)TBrCtlDefs::ECommandIdBase ); + UpdateTitleL( iApiProvider ); + break; + } + // Set search pane active and then launch editor. + case EIsCmdSearchWeb: + { +#ifdef BRDO_SINGLE_CLICK_ENABLED_FF + CEikButtonGroupContainer* cba = Cba()->Current(); + CEikCba* eikCba = static_cast( cba->ButtonGroup() ); + if( eikCba ) + { + eikCba->EnableItemSpecificSoftkey( EFalse ); + } +#endif + iContainer->GotoPane()->SetSearchPaneActiveL(); + LaunchGotoAddressEditorL(); + break; + } + case EWmlCmdGoToAddress: + case EWmlCmdGoToAddressAndSearch: + { +#ifdef BRDO_SINGLE_CLICK_ENABLED_FF + CEikButtonGroupContainer* cba = Cba()->Current(); + CEikCba* eikCba = static_cast( cba->ButtonGroup() ); + if( eikCba ) + { + eikCba->EnableItemSpecificSoftkey( EFalse ); + } +#endif + iContainer->GotoPane()->SetGotoPaneActiveL(); + LaunchGotoAddressEditorL(); + + // pause js timer to allow quicke vkb response + ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandPauseScriptTimers ); + break; + } + + case EWmlCmdGotoPaneCancel: + { + CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() ); + // Cancel editing and sets Goto Pane text back. + if (iContainer->GotoPane()->PopupList() != NULL) + { + iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue ); + iContainer->GotoPane()->PopupList()->HidePopupL(); + } + iContainer->ShutDownGotoURLEditorL(); + UpdateCbaL(); + if (iPenEnabled) + { + Toolbar()->SetDimmed(EFalse); + Toolbar()->DrawNow(); + iBrowserContentViewToolbar->UpdateButtonsStateL(); + } + if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen ) + { + MakeCbaVisible( EFalse ); + } + if (iPenEnabled) + { + StartAutoFullScreenTimer(); + } + break; + } + + case EWmlCmdGotoPaneGoTo: + { + HBufC* input = iContainer->GotoPane()->GetTextL(); + CleanupStack::PushL( input ); + if( iContainer->GotoPane()->GotoPaneActive() ) + { + if ((input) && (input->CompareF(KWWWString)) && input->Length() ) + { + if (iPenEnabled) + { + Toolbar()->SetDimmed(EFalse); + Toolbar()->DrawNow(); + } + CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() ); + // Cancel editing and sets Goto Pane text back. + if (iContainer->GotoPane()->PopupList() != NULL) + { + iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue ); + iContainer->GotoPane()->PopupList()->HidePopupL(); + } + GotoUrlInGotoPaneL(); + if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen ) + { + MakeCbaVisible( EFalse ); + } + } + } + else + { + // Search Editor was active, So launch Search application with + // search parameters and cancel editing of search and goto. + if ( (input) && input->Length() ) + { + if (iPenEnabled) + { + Toolbar()->SetDimmed(EFalse); + Toolbar()->DrawNow(); + } + + CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() ); + if ( iContainer->GotoPane() ) + { + iContainer->ShutDownGotoURLEditorL(); + LaunchSearchApplicationL( *input ); + } + UpdateCbaL(); + UpdateFullScreenL(); + } + } + CleanupStack::PopAndDestroy( input ); + if (iPenEnabled) + { + StartAutoFullScreenTimer(); + } + break; + } + + case EWmlCmdGotoPaneSelect: + { + // Cancel editing and sets Goto Pane text back. + if (iContainer->GotoPane()->PopupList() != NULL) + { + iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue ); + iContainer->GotoPane()->PopupList()->HidePopupL(); + } + // set LSK to GOTO now + UpdateCbaL(); + break; + } + + //adaptive popuplist + case EWmlCmdOpenFolder: + { + if (iContainer->GotoPane()->PopupList() != NULL) + { + iContainer->GotoPane()->PopupList()->SetDirectoryModeL( EFalse ); + } + break; + } + + case EAknSoftkeyCancel: + { + if ( isZoomMode() ) + { + SaveCurrentZoomLevel(EFalse); + //reset the zooming to the original settings + SetZoomModeL( EFalse ); + //Exit in zooming, enable the cursor + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomSliderHide + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + + if (iSynchRequestViewIsUp) + { + ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandCancelFetch + (TInt)TBrCtlDefs::ECommandIdBase ); + } + else + { + ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandCancel + (TInt)TBrCtlDefs::ECommandIdBase ); + } + break; + } + + case EWmlCmdSaveAsBookmark: + { + AddNewBookmarkL(EFalse); + break; + } + + // UI notifies the BrCtl which calls the DialogsProvider with a list of images + case EWmlCmdShowImages: + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandShowImages + + (TInt)TBrCtlDefs::ECommandIdBase ); + break; + } + + case EWmlCmdShowMiniature: + { + if (ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ) && + !ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(ETrue)) + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandShowThumbnailView + (TInt)TBrCtlDefs::ECommandIdBase ); + } + break; + } + + // Download Manager UI Library shows a list of ongoing downloads + case EWmlCmdDownloads: + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandShowDownloads + + (TInt)TBrCtlDefs::ECommandIdBase ); + break; + } + + // Loads images on a page + case EWmlCmdLoadImages: + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandLoadImages + + (TInt)TBrCtlDefs::ECommandIdBase ); + ApiProvider().WindowMgr().CurrentWindow()->SetImagesLoaded(ETrue); + break; + } + + // UI notifies the BrCtl which calls the DialogsProvider to show the toolbar + case EWmlCmdShowToolBar: + { + if ( !PenEnabled() && iApiProvider.Preferences().ShowToolbarOnOff() && + !iApiProvider.WindowMgr().CurrentWindow()->WMLMode() ) + { + iToolBarInfoNote->ShowInfoPopupNote(); + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandShowToolBar + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + + break; + } + //zoom in and set the cursor's position for non-touch + case EWmlCmdZoomIn: + { + if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() ) + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomIn + + (TInt)TBrCtlDefs::ECommandIdBase ); + ZoomImagesInL(); + } + break; + } + + //zoom out and set the cursor's position for non-touch + case EWmlCmdZoomOut: + { + if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() ) + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomOut + + (TInt)TBrCtlDefs::ECommandIdBase ); + ZoomImagesOutL(); + } + break; + } + + /* Zoom Mode currently disabled + case EWmlCmdZoomMode: + { + // Disable the cursor: by using the zoom slider show cmd (temp) + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomSliderShow + + (TInt)TBrCtlDefs::ECommandIdBase ); + + // Disable any activated objects (i.e. plugins, input boxes) + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandCancel + + (TInt)TBrCtlDefs::ECommandIdBase ); + + // Display softkeys if in full screen mode. i.e. go to normal screen + if ( !iPenEnabled && iContentFullScreenMode ) + { + iWasContentFullScreenMode = iContentFullScreenMode; + EnableFullScreenModeL( EFalse ); + } + + // Enter zoom mode + ZoomModeImagesL(); + break; + } + */ + + case EWmlCmdZoomSliderShow: + { + // Toggle displaying the zoom slider, when the zoom button + // on toolbar is selected + MakeZoomSliderVisibleL( !iZoomSliderVisible ); + break; + } + case EWmlCmdZoomSliderHide: + { + // Currently not used + MakeZoomSliderVisibleL( EFalse ); + break; + } + + // Find keyword commands + case EWmlCmdFindKeyword: + { + LaunchFindKeywordEditorL(); + break; + } + + case EWmlCmdFindKeywordPaneFind : + { + break; + } + + case EWmlCmdFindKeywordPaneClose : + { + iContainer->FindKeywordPane()->ResetPrevText(); + CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->FindKeywordPane() ); + // Cancel editing and sets Goto Pane text back. + iContainer->ShutDownFindKeywordEditorL(); + UpdateCbaL(); + if (iPenEnabled) + { + iBrowserContentViewToolbar->UpdateButtonsStateL(); + } + + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandClearFind + + (TInt)TBrCtlDefs::ECommandIdBase ); + + if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen ) + { + MakeCbaVisible( EFalse ); + } + if (iPenEnabled) + { + StartAutoFullScreenTimer(); + } + break; + } + + case EWmlCmdFindNext : + { + // Find next keyword + FindKeywordL( NULL, ETrue ); + break; + } + case EWmlCmdFindPrevious : + { + // Find previous keyword + FindKeywordL( NULL, EFalse ); + break; + } + + case EAknSoftkeySelect: + { + if( iHistoryViewIsUp ) + { + if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode ) + { + EnableFullScreenModeL( ETrue ); + iWasContentFullScreenMode = EFalse; + } + + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandOpen + (TInt)TBrCtlDefs::ECommandIdBase ); + } + + // Save zoom factor and quit the zoom mode + if ( isZoomMode() ) + { + SaveCurrentZoomLevel(ETrue); + // Disable the zoom mode + SetZoomModeL( EFalse ); + // Return to full screen, if we were in full screen before + if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode ) + { + EnableFullScreenModeL( ETrue ); + iWasContentFullScreenMode = EFalse; + } + // Exiting zoom mode, enable the cursor + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomSliderHide + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + break; + } + case EAknSoftkeyOk: + { + if( iThumbnailViewIsUp ) + { + if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode ) + { + EnableFullScreenModeL( ETrue ); + iWasContentFullScreenMode = EFalse; + } + + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandOpen + (TInt)TBrCtlDefs::ECommandIdBase ); + } + break; + } + + case EAknSoftkeyClose: + { + if( iWasInFeedsView) + { + // FeedsView library + + } + else + { + if ( isZoomMode() ) + { + SetZoomModeL( EFalse ); + } + AppUi()->HandleCommandL( EWmlCmdCloseWindow ); + } + break; + } + + case EWmlCmdSendAddressViaUnifiedMessage: + { + SendAddressL( ); + } + break; + + case EWmlCmdBack: + { + if( iWasInFeedsView) + { + // FeedsView library + + } + else if( iImageMapActive ) + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandBack + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + else if( ApiProvider().BrCtlInterface().NavigationAvailable( + TBrCtlDefs::ENavigationBack ) ) + { + AppUi()->HandleCommandL( aCommand ); + } + else + { + AppUi()->HandleCommandL( EWmlCmdCloseWindow ); + } + break; + } + + case EWmlCmdOneStepBack: + { + if( ApiProvider().BrCtlInterface().NavigationAvailable(TBrCtlDefs::ENavigationBack ) ) + { + AppUi()->HandleCommandL( aCommand ); + } + break; + } + + case EAknCmdHelp: + { + if ( HELP ) + { + AppUi()->HandleCommandL( EAknCmdHelp ); + } + break; + } + + case EWmlCmdCancelFetch: + { + // give it to AppUi + AppUi()->HandleCommandL( aCommand ); + break; + } + + case EWmlCmdOpenLinkInNewWindow: + { + iApiProvider.BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandOpenNewWindow + (TInt)TBrCtlDefs::ECommandIdBase ); + break; + } + + case EWmlCmdOpenLink: + { + iApiProvider.BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandOpen + (TInt)TBrCtlDefs::ECommandIdBase ); + break; + } + + case EWmlCmdShowSubscribeList: + { + const RPointerArray& subscribeToList = iApiProvider.BrCtlInterface().SubscribeToMenuItemsL(); + TInt len(subscribeToList.Count()); + if (len > 0) + { + CArrayFixFlat* optList = new( ELeave ) CArrayFixFlat(10); + CleanupStack::PushL( optList ); + HBufC* title = StringLoader::LoadLC(R_BROWSER_SUBSCRIBE_LIST); + TInt i; + for(i = 0; i < len; i++) + { + if(subscribeToList[i]->Title().Length()) + { + TBrCtlSelectOptionData t(subscribeToList[i]->Title(), EFalse, EFalse, EFalse); + optList->AppendL(t); + } + else + { + TBrCtlSelectOptionData t(subscribeToList[i]->Url(), EFalse, EFalse, EFalse); + optList->AppendL(t); + } + } + TBool ret(ApiProvider().DialogsProvider().DialogSelectOptionL( *title, ESelectTypeNone, *optList)); + if( ret ) + { + TInt i; + for (i = 0; i < optList->Count(); i++) + { + if ((*optList)[i].IsSelected()) + { + HandleSubscribeToL(subscribeToList[i]->CommandID() - TBrCtlDefs::ECommandIdBase); + break; + } + } + } + optList->Reset(); + CleanupStack::PopAndDestroy( 2 ); // optList, title + } + break; + } + + case EWmlCmdHome: + if (ApiProvider().Preferences().HomePageType() == EWmlSettingsHomePageAddress ) + { + HBufC* url = HBufC::NewLC( KMaxHomePgUrlLength ); + TPtr ptr( url->Des() ); + User::LeaveIfError(ApiProvider().Preferences().HomePageUrlL( ptr )); + ApiProvider().FetchL( ptr ); + CleanupStack::PopAndDestroy(); // url + } + else + { + HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoUrl); + if ( url && url->Length() && TBrowserDialogs::ConfirmQueryYesNoL(R_BROWSER_QUERY_SET_AS_HOME_PAGE)) + { + ApiProvider().Preferences().SetHomePageUrlL(url->Des()); + ApiProvider().Preferences().SetHomePageTypeL( EWmlSettingsHomePageAddress ); + } + CleanupStack::PopAndDestroy(); // url + } + break; + + case EWmlCmdGo: + break; + + case EWmlCmdConfigureShortcutKeymap: + { + ApiProvider().SetViewToBeActivatedIfNeededL( KUidBrowserSettingsViewId, KUidSettingsGotoShortcutsGroup.iUid ); + break; + } + + case EWmlCmdShowShortcutKeymap: + { + ShowKeymap(); + break; + } + + case EWmlCmdHideShortcutKeymap: + { + HideKeymap(); + break; + } + + case EWmlCmdOpenFeedsFolder: + // Launch into feeds view, telling it that we came from content view + ApiProvider().FeedsClientUtilities().ShowFolderViewL(KUidBrowserContentViewId); + break; + + case EWmlCmdEnterFullScreenBrowsing: + { + if ( iPenEnabled ) + { + EnableFullScreenModeL( ETrue ); + } + else + { + if ( iContentFullScreenMode ) + { + EnableFullScreenModeL( EFalse ); + } + else + { + EnableFullScreenModeL( ETrue ); + } + } + break; + } + + case EWmlCmdExitFullScreenBrowsing: + EnableFullScreenModeL( EFalse ); + break; + + default: + { + // DO element and toolbar commands are passed to BrCtl via AppUi + AppUi()->HandleCommandL( aCommand ); + break; + } + } // end of switch (aCommand) + + // Enabling FullScreen for non-touch devices, after processing some dialog-based shortcut and toolbar actions + if ( !iPenEnabled && iWasContentFullScreenMode && !iContentFullScreenMode && + ( ( aCommand == EWmlCmdFindKeywordPaneClose ) || + ( aCommand == EWmlCmdHideShortcutKeymap ) || + ( aCommand == EWmlCmdGotoPaneGoTo ) || + ( aCommand == EWmlCmdGotoPaneCancel ) || + ( aCommand == EAknSoftkeyCancel ) ) ) + { + EnableFullScreenModeL( ETrue ); + iWasContentFullScreenMode = EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::ViewHistoryL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::ViewHistoryL() + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandShowHistory + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::DoActivateL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { +PERFLOG_LOCAL_INIT +PERFLOG_STOPWATCH_START + CBrowserAppUi* ui; + + ui = STATIC_CAST( CBrowserAppUi*, AppUi() ); + iPreviousViewID = ApiProvider().LastActiveViewId(); + if ( ui->LastActiveViewId() == KUidBrowserNullViewId ) + { + //No view has been yet set as startup view -> use bookmarks view + ui->SetLastActiveViewId ( KUidBrowserBookmarksViewId ); + ui->SetViewToBeActivatedIfNeededL( ui->LastActiveViewId() ); + ApiProvider().SetLastActiveViewId ( ui->LastActiveViewId() ); + } + else + { + HandleStatusPaneCallBack(); + ApiProvider().SetLastActiveViewId(Id()); + } + + iContainer->ActivateL(); + + AppUi()->AddToViewStackL( *this, iContainer ); + + //Reset the title before updating the title in case of view activation + delete iTitle; + iTitle = NULL; + + ApiProvider().Display().FSPaneOnL( ); + ApiProvider().Display().SetGPRSIndicatorOnL(); + + UpdateTitleL( ApiProvider() ); + + ApiProvider().BrCtlInterface().MakeVisible(ETrue); + ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandGainFocus + + (TInt)TBrCtlDefs::ECommandIdBase); + + if( ui->Connection().Connected() && + !ui->Preferences().HttpSecurityWarningsStatSupressed() ) + { + // Update security indicators + if ( ui->SomeItemsNotSecure() ) + { + ui->Display().UpdateSecureIndicatorL( EAknIndicatorStateOff ); + } + else + { + ui->Display().UpdateSecureIndicatorL( + ui->LoadObserver().LoadStatus( + CBrowserLoadObserver::ELoadStatusSecurePage ) ? + EAknIndicatorStateOn : EAknIndicatorStateOff ); + } + } + UpdateCbaL(); + if(KeymapIsUp()) + { + RedrawKeymap(); + } + + if (iPenEnabled) + { + StartAutoFullScreenTimer(); + } + iContainer->SetRect(ClientRect()); +PERFLOG_STOP_WRITE("ContentView::DoActivate") + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::UpdateFullScreenL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::UpdateFullScreenL() + { + TVwsViewId activeViewId; + if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone ) + { + if ( activeViewId.iViewUid == KUidBrowserContentViewId ) + { + if ( iContentFullScreenMode ) + { + SetContentContainerRect(); + if (iPenEnabled) + { + Toolbar()->SetToolbarVisibility( EFalse, EFalse ); + Toolbar()->MakeVisible( EFalse ); + } + if(Cba()->IsVisible()) + { + Cba()->MakeVisible( EFalse ); + UpdateCbaL(); + } + if (!ApiProvider().Fetching()) + { + if(StatusPane()->IsVisible()) + { + StatusPane()->MakeVisible(EFalse); + } + } + else + { + if(!StatusPane()->IsVisible()) + { + ShowFsStatusPane(ETrue); + } + } + } + else + { + Cba()->MakeVisible( ETrue ); + StatusPane()->MakeVisible( ETrue ); + } + + ApiProvider().Display().FSPaneOnL( ); + ApiProvider().Display().SetGPRSIndicatorOnL(); + + //Reset the title before updating the title in case of view activation + delete iTitle; + iTitle = NULL; + UpdateTitleL(ApiProvider()); + ApiProvider().Display().RestoreTitleL(); + StatusPane()->ApplyCurrentSettingsL(); + } + } + } + +TRect CBrowserContentView::ResizeClientRect() + { + TRect clientRect = ClientRect(); + + if(iContentFullScreenMode && (Toolbar() && Toolbar()->IsVisible()) && Cba()->IsVisible()) + { + TRect screenRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, screenRect); + clientRect = screenRect; + } + + if (Layout_Meta_Data::IsLandscapeOrientation() && + (StatusPane() && StatusPane()->IsVisible()) && !Cba()->IsVisible() && IsForeground()) + { + TRect screenRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, screenRect); + clientRect.iBr.iY = screenRect.iBr.iY; + + } + + return clientRect; + } + +void CBrowserContentView::SetContentContainerRect() + { + TRect clientRect = ResizeClientRect(); + iContainer->SetRect(clientRect); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SetFullScreenOffL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::SetFullScreenOffL() + { + TVwsViewId activeViewId; + if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone ) + { + Cba()->MakeVisible( ETrue ); + UpdateCbaL(); + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL); + StatusPane()->ApplyCurrentSettingsL(); + StatusPane()->MakeVisible( ETrue ); + iContainer->SetRect( ClientRect() ); + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SetZoomLevelL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::SetZoomLevelL() + { + // Get the current index of the array. + iCurrentZoomLevel = ApiProvider().BrCtlInterface(). + BrowserSettingL(TBrCtlDefs::ESettingsCurrentZoomLevelIndex); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::DoDeactivate +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::DoDeactivate() + { + if ( !ApiProvider().ExitInProgress() ) + { + TBrCtlDefs::TBrCtlElementType focusedElementType = + ApiProvider().BrCtlInterface().FocusedElementType(); + if (focusedElementType == TBrCtlDefs::EElementActivatedInputBox) + { + ApiProvider().BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandAccept + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + TRAP_IGNORE( ApiProvider().Display().UpdateSecureIndicatorL( + EAknIndicatorStateOff )); + iContainer->SetFocus( EFalse ); + + EnableFullScreenModeL( EFalse); + + TRAP_IGNORE( ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandLoseFocus + + (TInt)TBrCtlDefs::ECommandIdBase ) ); + ApiProvider().BrCtlInterface().MakeVisible(EFalse); + } + + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + +// ---------------------------------------------------------------------------- +// CBrowserContentView::CommandSetResourceIdL +// ---------------------------------------------------------------------------- +// +TInt CBrowserContentView::CommandSetResourceIdL() + { + LOG_ENTERFN("ContentView::CommandSetResourceIdL"); + + // default case for normal screen + TInt result( R_BROWSER_DEFAULT_BUTTONS ); + + // default case for full screen + if ( iContentFullScreenMode ) + { + result = R_BROWSER_SOFTKEYS_EXIT_FULL_SCREEN; + } + if ( isZoomMode() ) + { + return R_BROWSER_DEFAULT_BUTTONS_AT_ZOOM_MODE_ON; + } + if( KeymapIsUp() ) + { + return R_BROWSER_SOFTKEYS_CONFIGURE_HIDE; + } + if( iHistoryViewIsUp ) + { + return R_BROWSER_SOFTKEYS_SELECT_CANCEL_SELECT; + } + if( iPluginPlayerIsUp ) + { + return R_BROWSER_SOFTKEYS_CANCEL; + } + if( iSmartTextViewIsUp ) + { + return R_INPUT_ELEMENT_BUTTONS; + } + if( iThumbnailViewIsUp ) + { + return R_BROWSER_DEFAULT_BUTTONS_AT_THUMBNAIL_VIEW_ON; + } + if( iImageMapActive ) + { + return R_BROWSER_DEFAULT_BUTTONS; + } + if( iSynchRequestViewIsUp ) + { + if ( !iContentFullScreenMode ) + { + result = R_BROWSER_SOFTKEYS_CANCEL; + } + return result; + } + + if( iContainer->GotoPane()->IsVisible() ) + // when goto pane is up there is no focusable element or active fetching + // process in place + { + if( iContainer->GotoPane()->SearchPaneActive() ) + { + result = R_BROWSER_BOOKMARKS_CBA_SEARCH_PANE_SEARCH_CANCEL; + } + else + { + //check wheter there is an active popuplist + if( (iContainer->GotoPane()->PopupList() != NULL) && + ( iContainer->GotoPane()->PopupList()->IsOpenDirToShow() )) + { + result = R_BROWSER_BOOKMARKS_CBA_GOTO_PANE_OPENDIR_CANCEL; + } + else if(iContainer->GotoPane()->PopupList() && + iContainer->GotoPane()->PopupList()->IsPoppedUp() && + !iPenEnabled) + { + // LSK Select is only for non-touch devices + result = R_BROWSER_BOOKMARKS_CBA_GOTO_PANE_SELECT_CANCEL; + } + else + { + result = R_BROWSER_BOOKMARKS_CBA_GOTO_PANE_GOTO_CANCEL; + } + } + } + else if ( iContainer->FindKeywordPane()->IsVisible() ) + { + result = R_BROWSER_CBA_FIND_KEYWORD_PANE_OPTION_CLOSE; + } + else if ( ApiProvider().Fetching() ) + { + if ( !iContentFullScreenMode ) + { + // Enable Options menu during download can be done here + // otherwise use defualt Full Screen buttons + result = R_BROWSER_OPTIONS_MENU_DURING_DOWNLOAD; + } + } + else + { + TBrCtlDefs::TBrCtlElementType elementtype = + ApiProvider().BrCtlInterface().FocusedElementType(); + if( elementtype == TBrCtlDefs::EElementActivatedObjectBox ) + { + if ( !iContentFullScreenMode ) + { + result = R_INPUT_ELEMENT_BUTTONS; + } + } + else if ( !ApiProvider().BrCtlInterface().NavigationAvailable( + TBrCtlDefs::ENavigationBack ) ) + // at the beginning of the history list + { + if ( !iContentFullScreenMode ) + { + // Options + Close + result = R_BROWSER_DEFAULT_BUTTONS_AT_BEGINNING_OF_HISTORY; + } + } + } +BROWSER_LOG( ( _L(" ContentView's buttons:%d"), result ) ); + return result; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::ProcessCommandL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::ProcessCommandL(TInt aCommand) + { + CBrowserViewBase::ProcessCommandL( aCommand ); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::DynInitMenuPaneL +// ----------------------------------------------------------------------------- +void CBrowserContentView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + LOG_ENTERFN("CBrowserContentView::DynInitMenuPaneL"); + __ASSERT_DEBUG(aMenuPane, Util::Panic(Util::EUninitializedData)); + + // pasue js timers + ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandPauseScriptTimers ); + + if ( aResourceId == R_MENU_PANE ) + { + // web feeds + #ifndef __RSS_FEEDS + aMenuPane->SetItemDimmed( EWmlCmdShowSubscribeList, ETrue ); + #else + const RPointerArray& items = ApiProvider().BrCtlInterface().SubscribeToMenuItemsL(); + if ( items.Count() == 0 ) + { + aMenuPane->SetItemDimmed( EWmlCmdShowSubscribeList, ETrue ); + } + #endif // __RSS_FEEDS + + // downloads + aMenuPane->SetItemDimmed( EWmlCmdDownloads, + !ApiProvider().BrCtlInterface().BrowserSettingL( TBrCtlDefs::ESettingsNumOfDownloads ) ); + + // If we have a touch device, check to see if the zoom slider is up, if so disable + if ( PenEnabled() && ZoomSliderVisible() ) + { + MakeZoomSliderVisibleL( EFalse ); + } + + // find + aMenuPane->SetItemDimmed( EWmlCmdFindNext, ETrue ); + aMenuPane->SetItemDimmed( EWmlCmdFindPrevious, ETrue ); + +/* + // help menu sub-menu - depending if Independent Application Update is available + if (BRDO_BROWSER_UPDATE_UI_FF) + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EWmlCmdHelpMenu, ETrue ); + } +*/ + if ( iContainer->FindKeywordPane()->IsVisible() ) + { + CEikMenuPaneItem::SData menuFindNext = + aMenuPane->ItemData( EWmlCmdFindNext ); + CEikMenuPaneItem::SData menuFindPrevious = + aMenuPane->ItemData( EWmlCmdFindPrevious ); + + // Delete all menu items + aMenuPane->DeleteBetweenMenuItems( 0, + aMenuPane->NumberOfItemsInPane() - 1 ); + + aMenuPane->AddMenuItemL( menuFindNext ); + aMenuPane->AddMenuItemL( menuFindPrevious ); + aMenuPane->SetItemDimmed( EWmlCmdFindNext, EFalse ); + aMenuPane->SetItemDimmed( EWmlCmdFindPrevious, EFalse ); + return; + } + + // wml option menu items + if ( ApiProvider().BrCtlInterface().WMLOptionMenuItemsL()->Count() < 1 ) + { + // there isn't DO element, or only the first one with PREV exist + aMenuPane->SetItemDimmed( EWmlCmdServiceOptions, ETrue ); + } + + // find window + if (ApiProvider().WindowMgr().CurrentWindow()->WMLMode()) + { + aMenuPane->SetItemDimmed(EWmlCmdFindKeyword, ETrue); + } + + // shortcut key map + if (PenEnabled() || ApiProvider().IsEmbeddedModeOn()) + { + aMenuPane->SetItemDimmed( EWmlCmdShowShortcutKeymap, ETrue); + } + + // BrCtl adds menu items to UI options menu list + ApiProvider().BrCtlInterface().AddOptionMenuItemsL( *aMenuPane, aResourceId ); + } + else if ( aResourceId == R_DO_ELEMENTS ) + { + RPointerArray* wmlElements; + wmlElements = ApiProvider().BrCtlInterface().WMLOptionMenuItemsL(); + + for ( TInt i=0; iCount(); i++ ) + { + TBrCtlWmlServiceOption* option = (*wmlElements)[i]; + if ( option != NULL) + { + CEikMenuPaneItem::SData item; + item.iText.Copy( option->Text() ); + item.iCommandId = option->ElemID(); + item.iFlags = 0; + item.iCascadeId = 0; + aMenuPane->InsertMenuItemL(item, 0); + } + } + } + else if ( aResourceId == R_GOTO_SUBMENU ) + { + // back to page + aMenuPane->SetItemDimmed( EWmlCmdBackToPage, ETrue ); + + // bookmarks/webfeeds + if( ApiProvider().IsEmbeddedModeOn() ) + { + aMenuPane->SetItemDimmed( EWmlCmdFavourites, ETrue ); + aMenuPane->SetItemDimmed( EWmlCmdOpenFeedsFolder, ETrue ); + } + + // home + aMenuPane->SetItemDimmed( EWmlCmdLaunchHomePage, ApiProvider().IsLaunchHomePageDimmedL() ); + //search + if ( ! ApiProvider().Preferences().SearchFeature() ) + { + aMenuPane->SetItemDimmed( EIsCmdSearchWeb, ETrue ); + } + } + else if ( aResourceId == R_PAGEACTIONS_SUBMENU ) + { + // bookmark + if ( ApiProvider().IsEmbeddedModeOn() && CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu() ) + { + aMenuPane->SetItemDimmed( EWmlCmdSaveAsBookmark, ETrue ); + } + HBufC *pageUrl = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl ); + if( ( pageUrl == NULL ) || ( pageUrl->Length() == 0 ) ) + { + aMenuPane->SetItemDimmed( EWmlCmdSaveAsBookmark, ETrue ); + } + CleanupStack::PopAndDestroy( pageUrl ); + + // send + aMenuPane->SetItemDimmed( EWmlCmdSendBookmarkViaUnifiedMessage, ETrue ); + + if (ApiProvider().IsEmbeddedModeOn()) + { + aMenuPane->SetItemDimmed( EWmlCmdSendAddressViaUnifiedMessage, ETrue ); + } + + // set as home page + //aMenuPane->SetItemDimmed( EWmlCmdSetAsHomePage, ETrue); + + + // pop-up blocking + if ( ApiProvider().IsEmbeddedModeOn() || ApiProvider().WindowMgr().CurrentWindow()->WMLMode()) + { + aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, ETrue ); + aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, ETrue ); + } + else + { + aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, EFalse ); + aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, EFalse ); + + if ( ApiProvider().Preferences().PopupBlocking()) + { + HBufC* url = ApiProvider().WindowMgr().CurrentWindow()->BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl ); + TBool dimAllow = EFalse; + if( url ) + { + // 'Allow Popups' needed if the current URL is not on the whitelist + TRAPD( errWhite, dimAllow = ApiProvider().PopupEngine().IsUrlOnWhiteListL( *url );); + // Error handling + if ( !errWhite ) + { + aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, !dimAllow ); + aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, dimAllow ); + } + } + // else no url (strange case), so no popup specific menuitem + CleanupStack::PopAndDestroy( url ); + } + else + { + //not shown any popupblocks related menu items when it's setting noblock + aMenuPane->SetItemDimmed( EWmlCmdBlockPopups, ETrue ); + aMenuPane->SetItemDimmed( EWmlCmdAllowPopups, ETrue ); + } + } + } + else if ( aResourceId == R_VIEW_SUBMENU ) + { + // toolbar + if ( !PenEnabled() && iApiProvider.Preferences().ShowToolbarOnOff() ) + { + aMenuPane->SetItemDimmed( EWmlCmdShowToolBar, ApiProvider().WindowMgr().CurrentWindow()->WMLMode() ); + } + else + { + aMenuPane->SetItemDimmed( EWmlCmdShowToolBar, ETrue); + } + + // disable fullscreen mode for touch only -- which has auto fullscreen now + if (iPenEnabled) + { + aMenuPane->SetItemDimmed(EWmlCmdEnterFullScreenBrowsing, ETrue); + } + + // rotate + if (!ApiProvider().Preferences().RotateDisplay() ) + { + aMenuPane->SetItemDimmed( EWmlCmdRotateDisplay, ETrue ); + } + + // page overview + if ( !ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ) || + ApiProvider().WindowMgr().CurrentWindow()->WMLMode() ) + { + aMenuPane->SetItemDimmed( EWmlCmdShowMiniature, ETrue); + } + + // show images + if( !ApiProvider().BrCtlInterface().ImageCountL() ) + { + aMenuPane->SetItemDimmed( EWmlCmdShowImages, ETrue ); + } + + // load images + if (( ApiProvider().Preferences().AutoLoadContent() == EWmlSettingsAutoloadImagesNoFlash) || + (ApiProvider().Preferences().AutoLoadContent() == EWmlSettingsAutoloadAll) || + ApiProvider().WindowMgr().CurrentWindow()->HasLoadedImages() ) + { + aMenuPane->SetItemDimmed( EWmlCmdLoadImages, ETrue ); + } + + // window + if ( !ApiProvider().Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) || + ApiProvider().IsEmbeddedModeOn() || + ApiProvider().WindowMgr().WindowCount() < 2) + { + aMenuPane->SetItemDimmed( EWmlCmdSwitchWindow, ETrue ); + } + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::CheckForEmptyWindowsMenuL +// Checks for the existence of Windows Submenu Items return true if no submenu items exist +// ----------------------------------------------------------------------------- +// +TBool CBrowserContentView::CheckForEmptyWindowsMenuL(TWindowsMenuItemsDimCheck* aWindowMenuItems) + { + + __ASSERT_DEBUG( (aWindowMenuItems != NULL), Util::Panic( Util::EUninitializedData )); + + // 'OpenLinkInNewWindow is not available for 'non-anchor' elements or + // if current page has wml content. + //TBrCtlDefs::TBrCtlElementType elementtype = + // ApiProvider().BrCtlInterface().FocusedElementType(); + + // The commented part below enables the "Open link in new window" option. + // Currently the option is permanently dimmed + // UI change request AHUN-6U3NT4, S60 bug AHUN-6UYT6N + aWindowMenuItems->dimOpenInNewWin = ETrue; /*( (elementtype != TBrCtlDefs::EElementAnchor) || + (ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(EFalse)) ); */ + + + // Multiple Windows Supported + if ( ApiProvider().Preferences().UiLocalFeatureSupported( + KBrowserMultipleWindows ) ) + { + TInt winCount = ApiProvider().WindowMgr().WindowCount(); + + // 'Close Window' & Switch Window needed if are 2+ open windows + if ( winCount > 1 ) + { + aWindowMenuItems->dimCloseWin = EFalse; + // don't allow window switching if current window has wml. must close this window first + aWindowMenuItems->dimSwitchWin = ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(EFalse /*is any page wml?*/);//EFalse; + } + + // Pop-up blocking is enabled + if ( ApiProvider().Preferences().PopupBlocking() ) + { + //--------------------------------------------------------------------- + // Popup Blocking Menu items + HBufC* url = ApiProvider().WindowMgr().CurrentWindow()-> + BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl ); + if( url ) + { + // 'Allow Popups' needed if the current URL is not on the whitelist + TRAPD( errWhite, + aWindowMenuItems->dimAllowPopups = ApiProvider().PopupEngine().IsUrlOnWhiteListL( *url ); + ); + // Error handling + if ( errWhite ) + { + // Better to have the menu item than not + aWindowMenuItems->dimAllowPopups = aWindowMenuItems->dimBlockPopups = EFalse; + } + else + { + aWindowMenuItems->dimBlockPopups = !aWindowMenuItems->dimAllowPopups; + } + } + // else no url (strange case), so no popup specific menuitem + + CleanupStack::PopAndDestroy( url ); + } + //========================================================================= + } + return (aWindowMenuItems->dimOpenInNewWin && + aWindowMenuItems->dimSwitchWin && + aWindowMenuItems->dimCloseWin && + aWindowMenuItems->dimAllowPopups && + aWindowMenuItems->dimBlockPopups); + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::DimMultipleWindowsMenuItems +// Dims the items of the windows submenu according to aWindowMenuItems +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::DimMultipleWindowsMenuItems( CEikMenuPane& aMenuPane, TWindowsMenuItemsDimCheck aWindowMenuItems ) + { + aMenuPane.SetItemDimmed( EWmlCmdOpenLinkInNewWindow, aWindowMenuItems.dimOpenInNewWin ); + aMenuPane.SetItemDimmed( EWmlCmdSwitchWindow, aWindowMenuItems.dimSwitchWin ); + aMenuPane.SetItemDimmed( EWmlCmdCloseWindow, aWindowMenuItems.dimCloseWin ); + aMenuPane.SetItemDimmed( EWmlCmdAllowPopups, aWindowMenuItems.dimAllowPopups ); + aMenuPane.SetItemDimmed( EWmlCmdBlockPopups, aWindowMenuItems.dimBlockPopups ); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::OptionListInit +// Callback - we should initialize the list of DO elements +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::OptionListInitL() + { + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::HandleGotoPaneEventL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::HandleGotoPaneEventL( + CBrowserGotoPane* /*aGotoPane*/, + MGotoPaneObserver::TEvent aEvent ) + { + switch ( aEvent ) + { + case MGotoPaneObserver::EEventEnterKeyPressed: + { + if( !MenuBar()->MenuPane()->IsVisible() ) + { + if (iContainer->GotoPane()->PopupList() != NULL) + { + if ( iContainer->GotoPane()->PopupList()->IsOpenDirToShow() ) + { + HandleCommandL( EWmlCmdOpenFolder ); + } + else + { + HandleCommandL( EWmlCmdGotoPaneGoTo ); + } + } + } + break; + } + + default: + { + break; + } + } + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::OnScreenPosition +// ----------------------------------------------------------------------------- +// +TPoint CBrowserContentView::OnScreenPosition() + { + TRect rect = AppUi()->ApplicationRect(); + TPoint point (rect.iTl); + if (iPenEnabled) + { + if (AppUi()->TouchPane()) + { + TRect touchRect = AppUi()->TouchPane()->Rect(); + if (touchRect.iTl == rect.iTl) + { + if (touchRect.Width() > touchRect.Height()) // Horizontal, on top + { + point = TPoint(rect.iTl.iX, touchRect.iBr.iY); + } + else // Vertical, on the left + { + point = TPoint(touchRect.iBr.iX, rect.iTl.iY); + } + } + } + } + return point; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::GotoUrlInGotoPaneL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::GotoUrlInGotoPaneL() + { + if ( iContainer->GotoPane() ) + { + HBufC* url = iContainer->GotoPane()->GetTextL(); // the url + if( url ) + { + iContainer->ShutDownGotoURLEditorL(); + + TFavouritesWapAp accessPoint; + // if current ap exists then use it. other ways use default ap. + if( ApiProvider().Connection().CurrentAPId() ) + { + TUint apId = ApiProvider().Connection().CurrentAPId(); + apId = Util::WapIdFromIapIdL( ApiProvider(), apId ); + accessPoint.SetApId( apId ); + } + else + { + accessPoint.SetApId( + ApiProvider().Preferences().DefaultAccessPoint() ); + } + UpdateCbaL(); + UpdateFullScreenL(); + + ApiProvider().FetchL( url->Des(), + KNullDesC, + KNullDesC, + accessPoint, + CBrowserLoadObserver::ELoadUrlTypeOther ); + + } + else // no URL entered + { + iContainer->ShutDownGotoURLEditorL(); + UpdateCbaL(); + UpdateFullScreenL(); + } + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::UpdateGotoPaneL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::UpdateGotoPaneL() + { + // Reset goto pane content + if( AUTOCOMP ) //ask the feature manager + { + //2.1 does not put http:// there + iContainer->GotoPane()->SetTextL( KNullDesC ); + } + else + { + //2.0 does need http:// + iContainer->GotoPane()->SetTextL( KHttpString ); + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::LaunchGotoAddressEditorL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::LaunchGotoAddressEditorL() + { + // Cancel editing and sets Goto Pane text back. + if (iContainer->GotoPane()->PopupList() != NULL) + { + iContainer->GotoPane()->PopupList()->SetDirectoryModeL( ETrue ); + iContainer->GotoPane()->PopupList()->HidePopupL(); + } + + if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen ) + { + MakeCbaVisible( ETrue ); + } + + CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->GotoPane() ); + CCoeEnv::Static()->AppUi()->AddToStackL( iContainer->GotoPane(), ECoeStackPriorityMenu ); + iContainer->GotoPane()->MakeVisible( ETrue ); + HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC( + TBrCtlDefs::EPageInfoUrl ); + if ( url && url->Length() ) + { + iContainer->GotoPane()->SetTextL(*url); + iContainer->GotoPane()->SelectAllL(); + } + else + { + // nor url; use default name. + // set "http://www." per Browser UI spec + iContainer->GotoPane()->SetTextL(KWWWString ); + } + CleanupStack::PopAndDestroy(); // url + iContainer->GotoPane()->SetFocus( ETrue ); + UpdateCbaL(); + + if (iPenEnabled) + { + Toolbar()->SetDimmed(ETrue); + Toolbar()->DrawNow(); + } + + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::LaunchFindKeywordEditorL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::LaunchFindKeywordEditorL() + { + // Cancel editing and sets Goto Pane text back. + if (iContainer->FindKeywordPane()->PopupList() != NULL) + { + iContainer->FindKeywordPane()->PopupList()->SetDirectoryModeL( ETrue ); + iContainer->FindKeywordPane()->PopupList()->HidePopupL(); + } + + if ( ApiProvider().Preferences().FullScreen() == EWmlSettingsFullScreenFullScreen ) + { + MakeCbaVisible( ETrue ); + } + + CCoeEnv::Static()->AppUi()->RemoveFromStack( iContainer->FindKeywordPane() ); + CCoeEnv::Static()->AppUi()->AddToStackL( iContainer->FindKeywordPane(), ECoeStackPriorityMenu ); + iContainer->FindKeywordPane()->MakeVisible( ETrue ); + iContainer->FindKeywordPane()->SetFocus( ETrue ); + UpdateCbaL(); + if (iPenEnabled) + { +#ifdef RD_SCALABLE_UI_V2 + Toolbar()->ToolbarExtension()->SetShown(EFalse); +#endif + iBrowserContentViewToolbar->UpdateButtonsStateL(); + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::UpdateTitleL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::UpdateTitleL( MApiProvider& aApiProvider ) + { + HBufC* title = aApiProvider.BrCtlInterface().PageInfoLC( + TBrCtlDefs::EPageInfoTitle ); + if ( title && title->Length() ) + { + if( !iTitle || (iTitle && (iTitle->Des().Compare( title->Des())!= 0))) + { + delete iTitle; + iTitle = title->Des().AllocL(); + aApiProvider.Display().SetTitleL( title->Des() ); + } + } + else + { + + TInt offset = 0; + HBufC* titleUrl = aApiProvider.BrCtlInterface().PageInfoLC( + TBrCtlDefs::EPageInfoUrl ); + if( titleUrl == NULL ) // is this really possible? + { + CleanupStack::PopAndDestroy( titleUrl ); + titleUrl = KNullDesC().AllocLC(); + } + offset = titleUrl->Find( KSchemaIdentifier ); + if(offset != KErrNotFound ) + { + titleUrl->Des().Delete(0,offset + KSchemaIdentifierLength); + } + aApiProvider.Display().SetTitleL( titleUrl->Des() ); + CleanupStack::PopAndDestroy( ); // titleUrl + } + + CleanupStack::PopAndDestroy(); // title + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::AddNewBookmarkL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::AddNewBookmarkL( TBool aAsLastVisited, HBufC* aUrl ) + { + TInt pop = 0; + HBufC* cardTitle = NULL; + TPtrC cardTitlePtr( KNullDesC ); + + // Make a bookmark model. + iBookmarksModel = CBrowserBookmarksModel::NewL(ApiProvider()); + + // Create a bookmark item. + CFavouritesItem* item = CFavouritesItem::NewLC(); + + HBufC* theUrl = NULL; + if (aUrl == NULL) + { + // Set URL. + theUrl = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl ); + if( !theUrl || !theUrl->Length() ) + { + CleanupStack::PopAndDestroy( theUrl ); + theUrl = KNullDesC().AllocLC(); + } + pop++; + // Get the title + cardTitle = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoTitle ); + pop++; + } + else + { + theUrl = aUrl; + } + + if ( cardTitle ) + { + cardTitle->Des().Trim(); + cardTitlePtr.Set( cardTitle->Des() ); + } + + if ( cardTitlePtr.Length() ) + { + // Current card has non-empty title, use that as bookmark name. + item->SetNameL( cardTitlePtr.Left(KFavouritesMaxName) ); + } + else + { + // Get the URL + HBufC* url = theUrl->AllocLC(); + pop++; + + if ( url && url->Length() ) + { + TUriParser16 urlParser; + urlParser.Parse(*url); + url->Des().SetLength( 0 ); + url->Des().Append( urlParser.Extract( EUriHost) ); + url->Des().Append( urlParser.Extract( EUriPath ) ); + item->SetNameL( url->Left(KFavouritesMaxName) ); + } + else + { + // No title, nor url; use default name. + iBookmarksModel->SetNameToDefaultL( *item ); + } + } + + // set url, username, password + Util::RetreiveUsernameAndPasswordFromUrlL( *theUrl, *item ); + CleanupStack::PopAndDestroy(pop); // url, cardTitle, theUrl + + item->SetParentFolder( KFavouritesRootUid ); + + // Set WAP AP. + TFavouritesWapAp ap; // default AP + item->SetWapAp( ap ); + + if ( aAsLastVisited ) + { + iBookmarksModel->SetLastVisitedL( *item, EFalse, + CBrowserFavouritesModel::EAutoRename ); + } + + else + { + HBufC* prompt = StringLoader::LoadLC( R_WML_ENTER_BOOKMARK_NAME ); + TBuf retString; + retString.Copy( item->Name() ); + + TBool queryName = ETrue; + while( queryName ) + { + TInt result = TBrowserDialogs::DialogPromptReqL( + prompt->Des(), + &retString, + EFalse, + KFavouritesMaxBookmarkNameDefine ); + if( result ) + { + item->SetNameL(retString.Left(KFavouritesMaxName)); + TInt err = iBookmarksModel->AddL( + *item, + ETrue, + CBrowserFavouritesModel::EDontRename ); + if ( !err ) + { + TBrowserDialogs::InfoNoteL( + R_BROWSER_OK_NOTE, + iBookmarksModel->StringResourceId + ( *item, CBrowserFavouritesModel::ESaved ) ); + queryName = EFalse; + AddBMUidToLastPlaceToCurrentListL( item->Uid() ); + + // To retain FavIcon in iconDatabase, we need to reference icon bitmap reference at least once + HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC(TBrCtlDefs::EPageInfoUrl); + CGulIcon *icon = ApiProvider().BrCtlInterface().GetBitmapData(*url, TBrCtlDefs::EBitmapFavicon); + CleanupStack::PopAndDestroy(); //url + delete icon; + } + else if( KErrAlreadyExists == err ) + { + TBrowserDialogs::InfoNoteL( + R_BROWSER_INFO_NOTE, R_WML_NAME_ALREADY_IN_USE ); + } + else + { + TBrowserDialogs::ErrorNoteL( + iBookmarksModel->StringResourceId( + *item, + CBrowserFavouritesModel::ENotSaved ) ); + + } + } + else + queryName = EFalse; + } + CleanupStack::PopAndDestroy(); // prompt + } + + CleanupStack::PopAndDestroy(); // item + + delete iBookmarksModel; + iBookmarksModel = NULL; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::AddBMUidToLastPlaceToCurrentListL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::AddBMUidToLastPlaceToCurrentListL(const TInt aUid ) + { + CArrayFixFlat* orderArray = new (ELeave) CArrayFixFlat(KGranularityHigh); + CleanupStack::PushL( orderArray ); + + CBrowserBookmarksOrder* currentOrder = CBrowserBookmarksOrder::NewLC(); + if ( iBookmarksModel->Database().GetData( KFavouritesRootUid ,*currentOrder ) == KErrNone) + { + if ( currentOrder->GetBookMarksOrder().Count() > 0 ) + { + orderArray->AppendL( &( currentOrder->GetBookMarksOrder()[0] ), + currentOrder->GetBookMarksOrder().Count() ); + } + } + iBookmarksModel->AddUidToLastPlaceL(aUid, orderArray, currentOrder ); + currentOrder->SetBookMarksOrderL( *orderArray ); + iBookmarksModel->Database().SetData( KFavouritesRootUid ,*currentOrder ); + CleanupStack::PopAndDestroy( 2 );// currentOrder, orderArray + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SendAddressL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::SendAddressL( ) + { + HBufC* url = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl ); + if( url == NULL ) + { + CleanupStack::PopAndDestroy( url ); // remove previous + url = KNullDesC().AllocLC(); + } + +#ifndef _BOOKMARK_SENT_ASCII + if( url->Length() <= KMaxUrlLenghtInOTA ) +#endif // _BOOKMARK_SENT_ASCII + { + HBufC* title = ApiProvider().BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoTitle ); + if( title == NULL ) + { + CleanupStack::PopAndDestroy( title ); // remove previous + title = KNullDesC().AllocLC(); + } + + //CBrowserAppUi* ui = reinterpret_cast(AppUi()); + MBmOTABinSender& sender = ApiProvider().BmOTABinSenderL(); + + sender.ResetAndDestroy(); + sender.AppendL( url->Des(), title->Des() ); + sender.SendAddressL( ); + CleanupStack::PopAndDestroy( title ); // title + } +#ifndef _BOOKMARK_SENT_ASCII + else + { +#pragma message ( __FILE__ ": Length of bookmark addr cannot exceed 255bytes!") + _LIT( KErrMsg, "URL address of bookmark is too long. It cannot be sent."); + + TBrowserDialogs::ErrorNoteL( KErrMsg ); + } +#endif // _BOOKMARK_SENT_ASCII + CleanupStack::PopAndDestroy( url ); // url + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::UpdateOptionMenuItemLabelL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::UpdateOptionMenuItemLabelL(CEikMenuPane* aMenuPane, const TInt aCommandId, const TInt aResourceId) + { + + __ASSERT_DEBUG( (aMenuPane != NULL), Util::Panic( Util::EUninitializedData )); + + HBufC* browserLabel = CCoeEnv::Static()->AllocReadResourceLC(aResourceId); + aMenuPane->SetItemTextL(aCommandId, *browserLabel); + CleanupStack::PopAndDestroy(); + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::DoSearchL +// Do search for specified items in current page +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::DoSearchL( + CFindItemEngine::TFindItemSearchCase aSearchCase ) + { + HBufC* findText = NULL; + findText = ApiProvider().BrCtlInterface().PageInfoLC( + TBrCtlDefs::EPageInfoContent ); + if( findText == NULL ) + { + CleanupStack::PopAndDestroy( findText ); + return; + } + + if( findText->Length() != 0 ) + { + + TPtr findTextDes = findText->Des(); + + for( int i = 0; i < findText->Length(); ++i ) + { + if( (*findText)[i] == TUint16( 0x0a ) ) + { + findTextDes[i] = TUint16( CEditableText::EParagraphDelimiter ); + } + + else if( (*findText)[i] == TUint16( CEditableText::ETabCharacter ) ) + { + findTextDes[i] = TUint16( CEditableText::ESpace ); + } + else if( (*findText)[i] == TUint16( CEditableText::ELineBreak ) ) + { + findTextDes[i] = TUint16( CEditableText::EParagraphDelimiter ); + } + } + } + + SetFullScreenOffL(); + CFindItemDialog* dialog = CFindItemDialog::NewL( *findText, aSearchCase ); + dialog->ExecuteLD(); + UpdateFullScreenL(); + UpdateTitleL( ApiProvider() ); + + CleanupStack::PopAndDestroy( findText ); + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SetLastVisitedBookmarkL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::SetLastVisitedBookmarkL() + { + AddNewBookmarkL( ETrue ); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::UpdateNaviPaneL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::UpdateNaviPaneL( TDesC& aStatusMsg ) + { + //Set text that will be shown in navipane + iStatusMsg.Des().Copy(aStatusMsg.Left(KStatusMessageMaxLength));//Might be longer than iStatusMsg + SetNavipaneViewL(); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SetNavipaneViewL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::SetNavipaneViewL() + { + TVwsViewId activeViewId; + if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone ) + { + if ( (activeViewId.iViewUid == KUidBrowserContentViewId) ) + { + if (!iNaviDecorator) + { + delete iNaviDecorator; + iNaviDecorator = NULL; + + if( iNaviPane ) + { + if (iStatusMsg.Length()) + { + iNaviDecorator = iNaviPane->CreateNavigationLabelL( + iStatusMsg ); + } + else + { + iNaviDecorator = iNaviPane->CreateNavigationLabelL(_L("")); + } + iNaviPane->PushL( *iNaviDecorator ); + } + } + else + { + CAknNaviLabel* naviLabel = STATIC_CAST( CAknNaviLabel*, + iNaviDecorator->DecoratedControl()); + naviLabel->SetTextL(iStatusMsg); + // make sure at top and redraw + iNaviPane->PushL( *iNaviDecorator ); + } + + iNaviDecorator->MakeScrollButtonVisible(ETrue); + } + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::FindItemIsInProgress +// ----------------------------------------------------------------------------- +// +TBool CBrowserContentView::FindItemIsInProgress() + { + return iFindItemIsInProgress; + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::HandleStatusPaneSizeChange +// --------------------------------------------------------------------------- +// +void CBrowserContentView::HandleStatusPaneSizeChange() + { + SetContentContainerRect(); + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::StateChanged +// --------------------------------------------------------------------------- +// +void CBrowserContentView::StateChanged( + TBrCtlDefs::TBrCtlState aState, + TInt aValue ) + { +LOG_ENTERFN(" CBrowserContentView::StateChanged" ); +LOG_WRITE_FORMAT(" state: %d", aState ); +LOG_WRITE_FORMAT(" value: %d", aValue ); + switch(aState) + { + case TBrCtlDefs::EStateImageMapView: + { + iImageMapActive = (TBool) aValue; + TRAP_IGNORE( UpdateCbaL() ); + break; + } + case TBrCtlDefs::EStateHistoryView: + { + iHistoryViewIsUp = (TBool) aValue; + iHistoryAtBeginning = EFalse; + iHistoryAtEnd = EFalse; + if ( iPenEnabled ) + { + TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() ); + } + TRAP_IGNORE( UpdateCbaL() ); + TRAP_IGNORE( UpdateTitleL( ApiProvider() ) ); + if (iPenEnabled) + { + StartAutoFullScreenTimer(); + } + break; + } + case TBrCtlDefs::EStateThumbnailView: + { + iThumbnailViewIsUp = (TBool) aValue; + if ( iPenEnabled ) + { + TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() ); + } + TRAP_IGNORE( UpdateCbaL() ); + TRAP_IGNORE( UpdateTitleL( ApiProvider() ) ); + if (iPenEnabled) + { + StartAutoFullScreenTimer(); + } + break; + } + case TBrCtlDefs::EStatePluginPlayer: + { + iPluginPlayerIsUp = (TBool) aValue; + TRAP_IGNORE( UpdateCbaL() ); + TRAP_IGNORE( UpdateTitleL( ApiProvider() ) ); + break; + } + case TBrCtlDefs::EStateSmartTextView: + { + iSmartTextViewIsUp = (TBool) aValue; + TRAP_IGNORE( UpdateCbaL() ); + TRAP_IGNORE( UpdateTitleL( ApiProvider() ) ); + break; + } + case TBrCtlDefs::EStateToolBarMode: + { + if(!aValue) + { + TRAP_IGNORE( UpdateCbaL() ); + } + break; + } + case TBrCtlDefs::EStateScriptLog: + { + TRAP_IGNORE( ApiProvider().Preferences().SetScriptLogL( aValue ) ); + break; + } + case TBrCtlDefs::EStateZoomSliderMode: + { + if ( aValue ) + { + iZoomSliderVisible = ETrue; + } + else + { + iZoomSliderVisible = EFalse; + if (iPenEnabled) + { + StartAutoFullScreenTimer(); + } + } + // Inform Toolbar of this fact + if ( iPenEnabled ) + { + TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() ); + } + break; + } + case TBrCtlDefs::EStateFullscreenBrowsing: + { + if (!iPenEnabled && IsEditMode()) + { + if (!aValue) + { // exit fullscreen so remember what to go back to after edit mode is exited + iFullScreenBeforeEditModeEntry = iContentFullScreenMode; + TRAP_IGNORE( EnableFullScreenModeL( EFalse ) ); + } + else if (aValue && iFullScreenBeforeEditModeEntry) + { + TRAP_IGNORE( EnableFullScreenModeL( ETrue ) ); + } + } + else if (!aValue) + { + TRAP_IGNORE( EnableFullScreenModeL( EFalse ) ); + } + break; + } + case TBrCtlDefs::EStateHistoryBeginning: + { + if(aValue) + { + iHistoryAtBeginning = ETrue; + } + else + { + iHistoryAtBeginning = EFalse; + } + if (iPenEnabled) + { + TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() ); + } + TRAP_IGNORE( UpdateTitleL( ApiProvider() ) ); + break; + } + case TBrCtlDefs::EStateHistoryEnd: + { + if(aValue) + { + iHistoryAtEnd = ETrue; + } + else + { + iHistoryAtEnd = EFalse; + } + if (iPenEnabled) + { + TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() ); + } + TRAP_IGNORE( UpdateTitleL( ApiProvider() ) ); + break; + } + case TBrCtlDefs::EStateSynchRequestMode: + { + iSynchRequestViewIsUp = (TBool) aValue; + if (iPenEnabled) + { + TRAP_IGNORE( iBrowserContentViewToolbar->UpdateButtonsStateL() ); + } + TRAP_IGNORE( UpdateCbaL() ); + TRAP_IGNORE( UpdateTitleL( ApiProvider() ) ); + break; + } + case TBrCtlDefs::EStatePluginFullScreen: + HandlePluginFullScreen((TBool) aValue); + break; + default: + break; + } + + ApiProvider().WindowMgr().SetCurrentWindowViewState(aState, aValue); + if (iPenEnabled && ApiProvider().WindowMgr().CurrentWindow()->WMLMode()) + { + EnableFullScreenModeL( EFalse ); + } + + } + +// ------------------------------------------------------------------- +// CBrowserContentView::HandleCommandL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::HandleCommandL( + TBrCtlDefs::TBrCtlClientCommands aCommand, + const CArrayFix& /*aAttributesNames*/, + const CArrayFix& aAttributeValues) + { + + // resume js timers + ApiProvider().BrCtlInterface().HandleCommandL((TInt)TBrCtlDefs::ECommandIdBase + (TInt)TBrCtlDefs::ECommandResumeScriptTimers ); + + switch(aCommand) + { + case TBrCtlDefs::EClientCommandLaunchFindKeyword: + { + // Find Keyword not initiated from options menu so don't set menupane to visible. + LaunchFindKeywordEditorL(); + MenuBar()->MenuPane()->MakeVisible(EFalse); + break; + } + case TBrCtlDefs::EClientCommandGotoWebAddress: + { + HandleCommandL(EWmlCmdGoToAddress); + break; + } + + case TBrCtlDefs::EClientCommandSaveAsBookmark: + { + HandleCommandL(EWmlCmdSaveAsBookmark); + break; + } + + case TBrCtlDefs::EClientCommandManageBookmarks: + { + HandleCommandL(EWmlCmdFavourites); + break; + } + + case TBrCtlDefs::EClientCommandZoomIn: + { + ZoomImagesInL(); + break; + } + + case TBrCtlDefs::EClientCommandZoomOut: + { + ZoomImagesOutL(); + break; + } + + case TBrCtlDefs::EClientCommandZoomMode: + { + ZoomModeImagesL(); + break; + } + + case TBrCtlDefs::EClientCommandGoToHompage: + { + HandleCommandL(EWmlCmdLaunchHomePage); + break; + } + case TBrCtlDefs::EClientCommandRotateScreen: + { + HandleCommandL(EWmlCmdRotateDisplay); + break; + } + case TBrCtlDefs::EClientCommandSavePage: + { + HandleCommandL(EWmlCmdSavePage); + break; + } + case TBrCtlDefs::EClientCommandSwitchWindow: + { + HandleCommandL(EWmlCmdSwitchWindow); + break; + } + case TBrCtlDefs::EClientCommandShowHelp: + { + HandleCommandL(EAknCmdHelp); + break; + } + + case TBrCtlDefs::EClientCommandToolbarConfigure: + { + // open settings view in toolbar group + AppUi()->HandleCommandL( EWmlCmdPreferencesToolbar ); + break; + } + + case TBrCtlDefs::EClientCommandToolbarShowKeymap: + { + ShowKeymap(); + break; + } + + case TBrCtlDefs::EClientCommandSubscribeToFeeds: + { +#ifdef __RSS_FEEDS + const TPtrC16 name(aAttributeValues.At(0)); + const TPtrC16 url(aAttributeValues.At(1)); + + ApiProvider().SetLastActiveViewId( KUidBrowserFeedsFolderViewId ); + ApiProvider().FeedsClientUtilities().SubscribeToL( name, url ); + // switch back to FeedsView, so change layout + SetFullScreenOffL(); +#endif + break; + } + + case TBrCtlDefs::EClientCommandShowContextMenu: + { + // Get ElementType + const TPtrC elTypePtr(aAttributeValues.At(0)); + TLex lex(elTypePtr); + TInt elType; + TInt resourceId = 0; + if (lex.Val(elType) == KErrNone) + { + switch (elType) + { + case TBrCtlDefs::EElementNone: + resourceId = R_BROWSER_EMPTY_SPACE_STYLUS_POPUP_MENU; + break; + case TBrCtlDefs::EElementAnchor: + case TBrCtlDefs::EElementTelAnchor: + case TBrCtlDefs::EElementMailtoAnchor: + resourceId = R_BROWSER_ANCHOR_STYLUS_POPUP_MENU; + break; + case TBrCtlDefs::EElementSmartLinkTel: + resourceId = R_BROWSER_PHONE_NUMBER_STYLUS_POPUP_MENU; + break; + case TBrCtlDefs::EElementSmartLinkEmail: + resourceId = R_BROWSER_EMAIL_ADDRESS_STYLUS_POPUP_MENU; + break; + case TBrCtlDefs::EElementImageBox: + resourceId = R_BROWSER_IMAGE_STYLUS_POPUP_MENU; + break; + case TBrCtlDefs::EElementBrokenImage: + if (ApiProvider().Preferences().AutoLoadContent() == EWmlSettingsAutoloadText) + { + if (ApiProvider().FlashPresent()) + { + resourceId = R_BROWSER_IMAGE_PLACEHOLDER_STYLUS_POPUP_MENU_WITH_FLASH; + } + else + { + resourceId = R_BROWSER_IMAGE_PLACEHOLDER_STYLUS_POPUP_MENU_NO_FLASH; + } + } + break; + case TBrCtlDefs::EElementAreaBox: + resourceId = R_BROWSER_IMAGEMAP_STYLUS_POPUP_MENU; + break; + default: + break; + } + if (resourceId != 0) + { + TPoint point; + // Get point X + const TPtrC xPtr(aAttributeValues.At(1)); + lex.Assign(xPtr); + lex.Val(point.iX); + // Get point Y + const TPtrC yPtr(aAttributeValues.At(2)); + lex.Assign(yPtr); + lex.Val(point.iY); + + delete iStylusPopupMenu; + iStylusPopupMenu = NULL; + iStylusPopupMenu = CAknStylusPopUpMenu::NewL( this, point); + TResourceReader rr; + CCoeEnv::Static()->CreateResourceReaderLC(rr, resourceId); + iStylusPopupMenu->ConstructFromResourceL( rr ); + CleanupStack::PopAndDestroy(); // resource reader + iStylusPopupMenu->SetPosition( point); + iStylusPopupMenu->ShowMenu(); + } + } + break; + } + + case TBrCtlDefs::EClientCommandToolbarSettings: + { + // Launch Settings View + HandleCommandL(EWmlCmdPreferences); + break; + } + + case TBrCtlDefs::EClientCommandFullScreen: + { + HandleCommandL(EWmlCmdEnterFullScreenBrowsing); + break; + } + + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::HandleSubscribeToL +// Handles a selection from the subscribe to sub-menu. +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::HandleSubscribeToL( TInt aCommand ) + { +#ifndef __RSS_FEEDS + (void) aCommand; +#else // __RSS_FEEDS + TInt index; + + // Get the corresponding feed info. + const RPointerArray& items = ApiProvider(). + BrCtlInterface().SubscribeToMenuItemsL(); + + index = aCommand - TBrCtlDefs::ECommandIdSubscribeToBase; + if ((index >= 0) && (index < items.Count())) + { + const TPtrC16 name(items[index]->Title()); + const TPtrC16 url(items[index]->Url()); + + ApiProvider().SetLastActiveViewId( KUidBrowserFeedsFolderViewId ); + ApiProvider().FeedsClientUtilities().SubscribeToL( name, url ); + // switch back to FeedsView, so change layout + SetFullScreenOffL(); + } +#endif // __RSS_FEEDS + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::HandleSubscribeToUrlL +// Handles subscribing to a feed from a ur +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::HandleSubscribeToWithUrlL( TPtrC aUrl ) + { +#ifndef __RSS_FEEDS + (void) aUrl; +#else // __RSS_FEEDS + + ApiProvider().SetLastActiveViewId( KUidBrowserFeedsFolderViewId ); + + //Get the 'Title' info by comparing aUrl with the url's populated in array 'items' + const RPointerArray& items = ApiProvider().BrCtlInterface().SubscribeToMenuItemsL(); + TInt index = 0; + TInt itemCount = items.Count(); + + while (itemCount != 0 && index < itemCount) + { + if (!(aUrl.Compare(items[index]->Url()))) + { + break; + } + else + { + index++; + } + } + + + if (itemCount == 0 || index >= itemCount ) + { + ApiProvider().FeedsClientUtilities().SubscribeToL( KNullDesC, aUrl ); + } + else + { + const TPtrC16 name(items[index]->Title()); + ApiProvider().FeedsClientUtilities().SubscribeToL(name , aUrl ); + } + +#endif // __RSS_FEEDS + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::DynInitToolbarL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ ) + { + // If we have a touch device, check to see if the zoom slider is up, + // if displayed, close it, so the extended toolbar shows without the + // zoomslider displaying on top of it. + if ( PenEnabled() && ZoomSliderVisible() ) + { + MakeZoomSliderVisibleL( EFalse ); + } + + if ( iPenEnabled ) + { + iBrowserContentViewToolbar->UpdateButtonsStateL() ; + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::WindowEventHandlerL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::WindowEventHandlerL( TWindowEvent /*aEvent*/, TInt aWindowId ) + { + if ( aWindowId == ApiProvider().WindowMgr().CurrentWindow()->WindowId() ) + { + if ( iPenEnabled ) + { + iBrowserContentViewToolbar->UpdateButtonsStateL(); + } + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::IsHistoryViewUp +// --------------------------------------------------------------------------- +// +TBool CBrowserContentView::IsHistoryViewUp() + { + return iHistoryViewIsUp; + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::IsHistoryAtBeginning +// --------------------------------------------------------------------------- +// +TBool CBrowserContentView::IsHistoryAtBeginning() + { + return iHistoryAtBeginning; + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::IsHistoryAtEnd +// --------------------------------------------------------------------------- +// +TBool CBrowserContentView::IsHistoryAtEnd() + { + return iHistoryAtEnd; + } + + +// --------------------------------------------------------------------------- +// CBrowserContentView::FindKeywordL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::FindKeywordL( HBufC* aFindString, TBool aFindDirection ) + { + TInt findResponse = 0; + + if ( aFindString ) + { + // Find string + delete iEnteredKeyword; + iEnteredKeyword = NULL; + iEnteredKeyword = aFindString; + findResponse = ApiProvider().BrCtlInterface().FindKeyword( iEnteredKeyword->Des() ); + } + else + { + // Search next/previous + findResponse = ApiProvider().BrCtlInterface().FindKeywordAgain( aFindDirection ); + } + + HBufC* toolTipText = NULL; + + switch ( findResponse ) + { + case TBrCtlDefs::EFindNoMatches: + toolTipText = StringLoader::LoadLC( R_QTN_BROWSER_KEYWORD_FIND_NO_MATCHES ); + break; + case TBrCtlDefs::EFindWrapAround: + toolTipText = StringLoader::LoadLC( R_QTN_BROWSER_KEYWORD_FIND_WRAPAROUND ); + break; + case TBrCtlDefs::EFindAllMatches: + toolTipText = StringLoader::LoadLC( R_QTN_BROWSER_KEYWORD_FIND_ALL_CONTENT_SEARCHED ); + break; + } + + // Show the result of the search. + if ( toolTipText ) + { + ApiProvider().DialogsProvider().ShowTooltipL( *toolTipText ); + CleanupStack::PopAndDestroy( toolTipText ); + } + + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::HandleClientRectChange +// --------------------------------------------------------------------------- +// +void CBrowserContentView::HandleClientRectChange() + { + if( iContainer ) + { + iContainer->HandleResourceChange(KEikDynamicLayoutVariantSwitch); + UpdateFullScreenL(); + if(KeymapIsUp()) + { + RedrawKeymap(); + } + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::SetZoomModeL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::SetZoomModeL( TBool aZoomMode ) + { + // if ( !ApiProvider().Fetching() ) + if (ApiProvider().ContentDisplayed()) + { + iZoomMode = aZoomMode; + TRAP_IGNORE( UpdateCbaL() ); + if ( aZoomMode ) + { + // Show the current zoom level in tooltip + SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL); + //MakeZoomSliderVisibleL( ETrue ); + } + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::MakeZoomSliderVisibleL +// Informs Browser Control if the Zoom Slider should be visible or not. +// --------------------------------------------------------------------------- +// +void CBrowserContentView::MakeZoomSliderVisibleL( TBool aVisible ) + { + if ( aVisible && !iZoomSliderVisible ) + { + // If the page is being fetched then don't show the zoom slider + if ( ApiProvider().ContentDisplayed()) + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomSliderShow + + (TInt)TBrCtlDefs::ECommandIdBase ); + iZoomSliderVisible = ETrue; + } + } + // Set the zoom slider to invisible only if the toggle is false, + // and the zoom slider used to be visible + else if (!aVisible && iZoomSliderVisible ) + { + ApiProvider().BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomSliderHide + + (TInt)TBrCtlDefs::ECommandIdBase ); + iZoomSliderVisible = EFalse; + } + + if ( iPenEnabled ) + { + iBrowserContentViewToolbar->UpdateButtonsStateL(); + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::ZoomImagesInL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::ZoomImagesInL( TInt aDuration ) + { + if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() ) + { + iZoomLevelArray = ApiProvider().BrCtlInterface().ZoomLevels(); + + // Change zoom level + ZoomImagesL( 1, 0, iZoomLevelArray->Count()-2, aDuration ); + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::ZoomImagesOutL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::ZoomImagesOutL( TInt aDuration ) + { + if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() ) + { + iZoomLevelArray = ApiProvider().BrCtlInterface().ZoomLevels(); + + // Change zoom level + ZoomImagesL( -1, 1, iZoomLevelArray->Count()-1, aDuration ); + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::ZoomModeImagesL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::ZoomModeImagesL() + { + if ( ApiProvider().ContentDisplayed() && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() ) + { + // Retrieve the current zooming index value + iCurrentZoomLevel = ApiProvider().BrCtlInterface().BrowserSettingL( + TBrCtlDefs::ESettingsCurrentZoomLevelIndex ); + iSavedZoomLevel = iCurrentZoomLevel; + + // Toggle current zoom mode. Zoom Mode allows the user to change + // the zoom level using the navikey or HW zoom key + SetZoomModeL( ETrue ); + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::ZoomImagesL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::ZoomImagesL( TInt aDirection, TUint aLow, + TUint aHigh, TInt aDuration ) + { + // Retrieve the current zooming index value, it takes effect right away + iCurrentZoomLevel = ApiProvider().BrCtlInterface().BrowserSettingL( + TBrCtlDefs::ESettingsCurrentZoomLevelIndex ); + TInt currentZoomIndex = FindCurrentZoomIndex(iCurrentZoomLevel); + + // Zoom can be increment, decrement or a direct change to a specific value. + if ( currentZoomIndex >= aLow && currentZoomIndex <= aHigh ) + { + // Set current zoom level. + currentZoomIndex += aDirection; + iCurrentZoomLevel = (*iZoomLevelArray)[currentZoomIndex]; + + // Set actual zoom level. + ApiProvider().BrCtlInterface().SetBrowserSettingL( + TBrCtlDefs::ESettingsCurrentZoomLevelIndex, iCurrentZoomLevel ); + + // Retrieve the current zooming index value, because each page has its + // minimum zoom level, if smaller than it, engine will ignore + // so we have to retrieve the correct zoom level + iCurrentZoomLevel = ApiProvider().BrCtlInterface().BrowserSettingL( + TBrCtlDefs::ESettingsCurrentZoomLevelIndex ); + } + + // Display the zoom indicator + if ( currentZoomIndex <= 0 ) + { + // Display minimum zoom indicator, it will dismiss after aDuration + SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL_MIN, aDuration ); + } + else if ( currentZoomIndex >= iZoomLevelArray->Count()-1 ) + { + TInt arrayCount = iZoomLevelArray->Count()-1; + // Display maximum zoom indicator, it will dismiss after aDuration + SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL_MAX, aDuration ); + } + else + { + // Display zoom percentage indicator, it will dismiss after aDuration + // We turned off displaying zoom indicator for each level + // SetZoomLevelTitleTextL( R_BROWSER_ZOOM_LEVEL, aDuration ); + } + } + +// --------------------------------------------------------------------------- +// SaveCurrentZoomLevel +// --------------------------------------------------------------------------- +void CBrowserContentView::SaveCurrentZoomLevel(TBool saveZoom) +{ + if (saveZoom) + { + //save the current zoom level by clicking softkey to confirm + ApiProvider().BrCtlInterface().SetBrowserSettingL( + TBrCtlDefs::ESettingsCurrentZoomLevelIndex, iCurrentZoomLevel ); + } + else + { + iCurrentZoomLevel = iSavedZoomLevel; + ApiProvider().BrCtlInterface().SetBrowserSettingL( + TBrCtlDefs::ESettingsCurrentZoomLevelIndex, iCurrentZoomLevel ); + } +} + +// --------------------------------------------------------------------------- +// FindCurrentZoomIndex +// --------------------------------------------------------------------------- +TInt CBrowserContentView::FindCurrentZoomIndex(TInt aCurrentZoomLevel) +{ + TInt index = -1; + for ( index = 0; indexCount()-1; index++) + { + if (aCurrentZoomLevel <=(*iZoomLevelArray)[index] ) + { + break; + } + } + return index; +} + +// --------------------------------------------------------------------------- +// CBrowserContentView::SetZoomLevelTitleTextL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::SetZoomLevelTitleTextL( TInt aResourceId, TInt aDuration ) + { + HBufC* zoomLevelFormat = NULL; + + if ( aResourceId == R_BROWSER_ZOOM_LEVEL_MIN || + aResourceId == R_BROWSER_ZOOM_LEVEL_MAX ) + { + // Display the zoom max or min string + zoomLevelFormat = StringLoader::LoadLC( aResourceId ); + + // Show zoom indicator for aDuration seconds + ApiProvider().WindowMgr().CurrentWindow()->ChangeTitlePaneTextUntilL( zoomLevelFormat->Des(), aDuration ); + + CleanupStack::PopAndDestroy( ); // zoomLevelFormat + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::GetTextZoomLevelsL +// --------------------------------------------------------------------------- +// +void CBrowserContentView::GetTextZoomLevelsL( ) + { + // Creating the text level + // Levels must be equal to TFontSize, with step percent 25% or 50% + // depending on chinese build. + // This is a temporary solution until make sure if engine + // provides text zoom levels. So it is currently hardcoded. + //------ + // China build has only three font sizes: + // 0, 2, 4 (all small, normal, all large) + TInt fontSize = 0; + if ( !AVKONAPAC ) + { + // font sizes 0,1,2,3,4 + for ( TInt level = 50; level <= 150; level = level + 25 ) + { + iTextZoomLevelArray->AppendL( level ); + iFontSizeArray->AppendL( fontSize ); + fontSize++; + } + } + else + { + // font sizes 0,2,4 + for ( TInt level = 50; level <= 150; level = level + 50 ) + { + iTextZoomLevelArray->AppendL( level ); + iFontSizeArray->AppendL( fontSize ); + fontSize = fontSize + 2; + } + } + + // Get initial text zoom level index, bt comparing + // the preferences value, with the one in iFontSizeArray, + // and get the index (i) + TBool found = EFalse; + for ( TInt i = 0; i < iFontSizeArray->Count(); i++ ) + { + if ( ApiProvider().Preferences().FontSize() == (*iFontSizeArray)[i] ) + { + iCurrentTextZoomLevelIndex = i; + found = ETrue; + } + } + // If the initial font size value is not found, then the cenrep + // default is not right, by default initial cenrep font size value + // should be 0,2,4. So general, and chinese values are the same. + // Because if for example default cenrep value of font size is 1, + // then that is not supported in chinese build. + // General font size values are: 0,1,2,3,4 + // Chinese font size values are: 0,2,4 + if ( !found ) + { + User::Leave( KErrGeneral ); + } + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::KeymapIsUp +// --------------------------------------------------------------------------- +// +TBool CBrowserContentView::KeymapIsUp() + { + return (iShortcutKeyMap != NULL); + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::isZoomMode +// --------------------------------------------------------------------------- +// +TBool CBrowserContentView::isZoomMode() + { + // Zoom Mode currently disabled + // return iZoomMode; + return EFalse; + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::ShowKeymap +// --------------------------------------------------------------------------- +// +void CBrowserContentView::ShowKeymap() + { + iShortcutKeyMap = CBrowserShortcutKeyMap::NewL(iContainer, iApiProvider); + UpdateCbaL(); + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::HideKeymap +// --------------------------------------------------------------------------- +// +void CBrowserContentView::HideKeymap() + { + delete(iShortcutKeyMap); + iShortcutKeyMap = NULL; + TRAP_IGNORE(UpdateCbaL()); + TRAP_IGNORE(UpdateFullScreenL()); + } + +// --------------------------------------------------------------------------- +// CBrowserContentView::RedrawKeymap +// --------------------------------------------------------------------------- +// +void CBrowserContentView::RedrawKeymap() + { + HideKeymap(); + ShowKeymap(); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::EnableFullScreenModeL +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::EnableFullScreenModeL( TBool aEnableFullScreen ) + { + if( iContentFullScreenMode == aEnableFullScreen ) + return; + + TInt command( KErrNotFound ); + if ( aEnableFullScreen ) + { + iContentFullScreenMode = ETrue; + UpdateFullScreenL(); + command = TBrCtlDefs::ECommandEnterFullscreenBrowsing; + } + else + { + if (iPenEnabled) + { + Toolbar()->SetToolbarVisibility( ETrue, EFalse ); + } + iContentFullScreenMode = EFalse; + SetFullScreenOffL(); + command = TBrCtlDefs::ECommandLeaveFullscreenBrowsing; + if (iPenEnabled) + { + StartAutoFullScreenIdleTimer(); + } + } + ApiProvider().BrCtlInterface().HandleCommandL( + command + (TInt)TBrCtlDefs::ECommandIdBase ); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::HandlePluginFullScreen +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::HandlePluginFullScreen(TBool aFullScreen) +{ + iIsPluginFullScreenMode = aFullScreen; + if (aFullScreen) { + if (AppUi()->Orientation() != CAknAppUiBase::EAppUiOrientationLandscape) { + iOrientation = AppUi()->Orientation(); + TRAP_IGNORE(AppUi()->SetOrientationL(CAknAppUiBase::EAppUiOrientationLandscape)); + } + if (iPenEnabled) { + Toolbar()->SetToolbarVisibility( EFalse, EFalse ); + } + iContentFullScreenMode = ETrue; + UpdateFullScreenL(); + } + else { + TInt command( KErrNotFound ); + command = TBrCtlDefs::ECommandLeaveFullscreenBrowsing; + ApiProvider().BrCtlInterface().HandleCommandL( + command + (TInt)TBrCtlDefs::ECommandIdBase ); + TRAP_IGNORE(AppUi()->SetOrientationL(iOrientation)); + if (iPenEnabled) { + Toolbar()->SetToolbarVisibility( ETrue, EFalse ); + } + iContentFullScreenMode = EFalse; + SetFullScreenOffL(); + if (iPenEnabled) + { + StartAutoFullScreenIdleTimer(); + } + } +} + +// ----------------------------------------------------------------------------- +// CBrowserContentView::ShowFsStatusPane +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::ShowFsStatusPane(TBool aShow) + { + + if (aShow) + { +#ifdef RD_SCALABLE_UI_V2 + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + StatusPane()->SwitchLayoutL(R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT_NO_SOFTKEYS); +#endif + StatusPane()->MakeVisible( ETrue ); + + SetContentContainerRect(); + + // Remove any timer that has already been set + if ( iPeriodic ) + { + iPeriodic->Cancel(); + } + } + else + { + // Kick off timer for 3 seconds before hiding status pane again + if ( iPeriodic ) + { + iPeriodic->Cancel(); + } + iPeriodic->Start(KFullScreenStatusPaneTimeout, 0,TCallBack(CallHideFsStatusPane,this)); + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::CallHideFsStatusPane +// ----------------------------------------------------------------------------- +TInt CBrowserContentView::CallHideFsStatusPane(TAny* aCBrowserContentView) + { + __ASSERT_DEBUG(aCBrowserContentView, Util::Panic( Util::EUninitializedData )); + TRAP_IGNORE( + ((CBrowserContentView*)aCBrowserContentView)->HideFsStatusPane(); + ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::HideFsStatusPane +// ----------------------------------------------------------------------------- +void CBrowserContentView::HideFsStatusPane() + { + iPeriodic->Cancel(); + if (iContentFullScreenMode && ApiProvider().LastActiveViewId() == KUidBrowserContentViewId ) + { + StatusPane()->MakeVisible( EFalse ); + + SetContentContainerRect(); + } + } +// ----------------------------------------------------------------------------- +// CBrowserContentView::StartAutoFullScreenTimer +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::StartAutoFullScreenTimer() + { + SuspendAutoFullScreenIdleTimer(); + if ( iAutoFSPeriodic ) + { + iAutoFSPeriodic->Cancel(); + } + iAutoFSPeriodic->Start(KAutoFullScreenTimeout, 0,TCallBack(CallActivateAutoFullScreen,this)); + + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::StartAutoFullScreenIdleTimer +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::StartAutoFullScreenIdleTimer() + { + if ( iIdlePeriodic ) + { + iIdlePeriodic->Cancel(); + } + iIdlePeriodic->Start(KAutoFullScreenIdleTimeout, 0,TCallBack(CallActivateAutoFullScreen,this)); + + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SuspendAutoFullScreenTimer +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::SuspendAutoFullScreenTimer() + { + if ( iAutoFSPeriodic ) + { + iAutoFSPeriodic->Cancel(); + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SuspendAutoFullScreenIdleTimer +// ----------------------------------------------------------------------------- +// +void CBrowserContentView::SuspendAutoFullScreenIdleTimer() + { + if ( iIdlePeriodic ) + { + iIdlePeriodic->Cancel(); + } + } + + +// ----------------------------------------------------------------------------- +// CBrowserContentView::CallSwitchToAutoFullScreen +// ----------------------------------------------------------------------------- +// +TInt CBrowserContentView::CallActivateAutoFullScreen(TAny* aCBrowserContentView) + { + __ASSERT_DEBUG(aCBrowserContentView, Util::Panic( Util::EUninitializedData )); + TRAP_IGNORE( + ((CBrowserContentView*)aCBrowserContentView)->ActivateAutoFullScreenMode(); + ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::ActivateAutoFullScreen +// ----------------------------------------------------------------------------- +void CBrowserContentView::ActivateAutoFullScreenMode() + { + if ( iAutoFSPeriodic ) + { + iAutoFSPeriodic->Cancel(); + } + if ( iIdlePeriodic ) + { + iIdlePeriodic->Cancel(); + } + + if ( ApiProvider().LastActiveViewId() == KUidBrowserContentViewId ) + { + if( IsForeground() + && ApiProvider().LoadObserver().ContentDisplayed() + && !iZoomSliderVisible + && !iHistoryViewIsUp + && !iContainer->GotoPane()->IsVisible() + && !iContainer->FindKeywordPane()->IsVisible() +#ifdef RD_SCALABLE_UI_V2 + && !Toolbar()->ToolbarExtension()->IsShown() +#endif + && !iThumbnailViewIsUp + && !iOptionsMenuActive + && !ApiProvider().IsDisplayingMenuOrDialog() + && !ApiProvider().WindowMgr().CurrentWindow()->WMLMode() + && !iIsPluginFullScreenMode) + { + EnableFullScreenModeL( ETrue); + } + else + { + if (iIsPluginFullScreenMode || !IsForeground()) + { + //Hide the FullscreenExit Button + ApiProvider().BrCtlInterface().HandleCommandL( + TBrCtlDefs::ECommandLeaveFullscreenBrowsing + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + StartAutoFullScreenTimer(); + } + } + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::SetEmphasis +// ----------------------------------------------------------------------------- + +void CBrowserContentView::SetEmphasis(CCoeControl* aMenuControl, TBool aEmphasis) + { + if (iPenEnabled) + { + if(aEmphasis) + { + iOptionsMenuActive = ETrue; + SuspendAutoFullScreenTimer(); + } + else + { + iOptionsMenuActive = EFalse; + StartAutoFullScreenTimer(); + } + } + CAknView::SetEmphasis(aMenuControl, aEmphasis); + } + +// ----------------------------------------------------------------------------- +// CBrowserContentView::IsEditMode +// ----------------------------------------------------------------------------- +TBool CBrowserContentView::IsEditMode() + { + TBrCtlDefs::TBrCtlElementType focusedElementType = + ApiProvider().BrCtlInterface().FocusedElementType(); + + TBool retVal = ((focusedElementType == TBrCtlDefs:: EElementActivatedInputBox) || + (focusedElementType == TBrCtlDefs:: EElementInputBox) || + (focusedElementType == TBrCtlDefs:: EElementTextAreaBox)); + return (retVal); + } + +void CBrowserContentView::HandleStatusPaneCallBack() + { + TVwsViewId activeViewId; + TBool resIdChanged(EFalse); + TInt resId = StatusPane()->CurrentLayoutResId(); + + if ( AppUi()->GetActiveViewId( activeViewId ) == KErrNone ) + { + if ( activeViewId.iViewUid == KUidBrowserContentViewId ) + { + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + resIdChanged = resId != R_AVKON_STATUS_PANE_LAYOUT_USUAL; + StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL); + } + else //Portrait + { + resIdChanged = resId != R_AVKON_STATUS_PANE_LAYOUT_SMALL; + StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_SMALL); + } + } + } + if(resIdChanged) + SetContentContainerRect(); +} + +// End of File