diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/BrowserAppSrc/BrowserContentViewContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserui/browser/BrowserAppSrc/BrowserContentViewContainer.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,903 @@ +/* +* Copyright (c) 2002 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: +* +* +*/ + +#include "BrowserContentViewContainer.h" +#include "BrowserAppUi.h" +#include "BrowserAppViewBase.h" +#include "BrowserGotoPane.h" +#include "CommonConstants.h" +#include "BrowserContentView.h" +#include "Display.h" +#include "Preferences.h" +#include "BrowserUtil.h" + +#include "BrowserPreferences.h" +#include "BrowserWindow.h" +#include "BrowserWindowManager.h" +#include + +#include // For Layout_Meta_Data landscape/portrait status + +#include +#include +#include + +#include + +#include "BrowserUIVariant.hrh" + +#ifdef __SERIES60_HELP +// Context-Sensitve Help File +#include "BrowserApplication.h" +#include +#include +#endif // __SERIES60_HELP + +#include "eikon.hrh" + + +//Constant +// The interval zoom tooltip is visible, it will disappear after KZoomLevelShowTime seconds +const TInt KZoomLevelShowTime( 2 * 1000 ); // 2 seconds + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::NewL() +// --------------------------------------------------------------------------- +// +CBrowserContentViewContainer* +CBrowserContentViewContainer::NewL(CBrowserContentView* aView, + MApiProvider& aApiProvider ) + { + CBrowserContentViewContainer* container = + new (ELeave) CBrowserContentViewContainer( aView, aApiProvider ); + CleanupStack::PushL( container ); + container->ConstructL(); + CleanupStack::Pop(); // container + + return container; + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::CBrowserContentViewContainer() +// --------------------------------------------------------------------------- +// +CBrowserContentViewContainer:: +CBrowserContentViewContainer(CBrowserContentView* aView, + MApiProvider& aApiProvider ) : + iView( aView ), + iApiProvider( aApiProvider ) + { + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::~CBrowserContentViewContainer() +// --------------------------------------------------------------------------- +// +CBrowserContentViewContainer::~CBrowserContentViewContainer() + { + delete iGotoPane; + delete iFindKeywordPane; + iView = NULL; // Not owned + + iShortCutFuncMap.Close(); + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::ConstructL() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::ConstructL() + { + CreateWindowL(); + +#if defined(BRDO_MULTITOUCH_ENABLED_FF) && !defined (__WINSCW__) + //Enable advance pointer info for multi-touch. + Window().EnableAdvancedPointers(); +#endif + + SetAllowStrayPointers(); + SetMopParent( iView ); + + } + +// ----------------------------------------------------------------------------- +// CBrowserContentViewContainer::HandlePointerEventL +// Handles pointer events +// ----------------------------------------------------------------------------- +void CBrowserContentViewContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + switch ( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Down: + { + // Do nothing + break; + } + case TPointerEvent::EDrag: + { + // Do nothing + break; + } + case TPointerEvent::EButton1Up: + { + // Close the zoom silder when the user selects anywhere in the + // BrowserContainerView + if ( iView->ZoomSliderVisible() ) + { + iView->MakeZoomSliderVisibleL( EFalse ); + } + break; + } + default: + { + break; + } + } // end of switch + + // Must pass the pointer event to the CoeControl + CCoeControl::HandlePointerEventL( aPointerEvent ); + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::OfferKeyEventL() +// --------------------------------------------------------------------------- +// +TKeyResponse CBrowserContentViewContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + CBrowserAppUi* ui = CBrowserAppUi::Static(); + TKeyResponse result( EKeyWasNotConsumed ); + + if (ui->OfferApplicationSpecificKeyEventL(aKeyEvent, aType) == EKeyWasConsumed) + { + return EKeyWasConsumed; + } + + // For Short Cut + if (!iShortCutFuncsReady) + { + CreateShortCutFuncsHashTable(); + iShortCutFuncsReady = ETrue; + } + + // Turn off some controls, if we receive events + if ( aType == EEventKey ) + { + // Turn off the keymap if on + if ( iView->KeymapIsUp() ) + { + iView->HandleCommandL( EWmlCmdHideShortcutKeymap ); + } + + // Turn off the zoom slider if on + if ( iView->ZoomSliderVisible() ) + { + iView->MakeZoomSliderVisibleL( EFalse ); + } + } + + // If goto pane is visible, offer key events to it + if ( iGotoPane->IsVisible() ) + { + return iGotoPane->OfferKeyEventL( aKeyEvent, aType ); + } + + TKeyEvent keyEvent( aKeyEvent ); + TBrCtlDefs::TBrCtlElementType elementtype = + iApiProvider.BrCtlInterface().FocusedElementType(); + + // Don't allow virtual keyboard backspace key event to close the window + // And don't close window if editing in an input box or textarea input + if ( !AknLayoutUtils::PenEnabled() && aType == EEventKey + && keyEvent.iCode == EKeyBackspace + && elementtype != TBrCtlDefs::EElementActivatedInputBox + && elementtype != TBrCtlDefs::EElementTextAreaBox ) + { + if ( iApiProvider.Preferences().UiLocalFeatureSupported( + KBrowserMultipleWindows ) ) + { + TInt winCount = iApiProvider.WindowMgr().WindowCount(); + if ( ( winCount > 1 ) && ( !iView->IsMiniatureViewUp() ) ) + { + ui->CloseWindowL(); + result = EKeyWasConsumed; + } + } + } + + // Handle zooming events + // 1. RemConInterface will translate dedicated HW key press to OfferKeyEventL(). + // See eikon.hrh for mapping. + // 2. When the browser is in Zoom Mode (slider or tooltip displayed), the + // navi-keys will zoom. + if ( aType == EEventKey ) + { + // Handle dedicated HW key zoom-in: if not in zoom mode, HW zoom key takes + // zooming immediately without going to zoom mode + // if it's already in zoom mode, then HW zoom key acts the same as up + // and down navigation key mode + // Zoom mode can display tooltip (current) or slider (future) + if ( iView->isZoomMode() ) + { + } + else if (!iView->IsHistoryViewUp() && !iView->IsMiniatureViewUp()) + { + // Not in zoom mode, or history view, or page overview, and HW zoom key + // pressed - zoom immediately without entering zoom mode. + if ( keyEvent.iCode == EKeyZoomIn ) + { + iApiProvider.BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomIn + + (TInt)TBrCtlDefs::ECommandIdBase ); + iView->ZoomImagesInL(KZoomLevelShowTime); + result = EKeyWasConsumed; + } + // Handle dedicated HW key zoom-out + else if ( keyEvent.iCode == EKeyZoomOut ) + { + iApiProvider.BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandZoomOut + + (TInt)TBrCtlDefs::ECommandIdBase ); + iView->ZoomImagesOutL(KZoomLevelShowTime); + result = EKeyWasConsumed; + } + } + + } // End of handling key events for zooming + + + // Web Engine opens the highlighted link into a new window. (long press) + // Currently the option is disabled and the link is opened in the same window + // The commented part below enables the "Open link in new window" option on long press. + // UI change request AHUN-6U3NT4, S60 bug AHUN-6UYT6N + + TBool aEnterKeyForLinksActivation = (keyEvent.iCode == EKeyEnter) && + (iApiProvider.Preferences().EnterKeyMode() == TBrCtlDefs::EEnterKeyCanActivateLink); + if ( aType == EEventKey && + (keyEvent.iCode == EKeyOK || aEnterKeyForLinksActivation) ) + { + if ( keyEvent.iRepeats && iSelectionKeyPressed ) + { + + TInt command( KErrNotFound ); + switch( elementtype ) + { + case TBrCtlDefs::EElementAnchor: + { + // command = TBrCtlDefs::ECommandOpenNewWindow; + command = TBrCtlDefs::ECommandOpen; + break; + } + default: break; + } + // if ( command == TBrCtlDefs::ECommandOpenNewWindow && + // iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) && + // !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows )) + if ( command == TBrCtlDefs::ECommandOpen) + { + iSelectionKeyPressed = EFalse; + keyEvent.iCode = EKeyNull; + result = EKeyWasConsumed; + iApiProvider.BrCtlInterface().HandleCommandL( + command + TBrCtlDefs::ECommandIdBase ); + } + } + } + + // stop the event handling when find item was actived + if ( (keyEvent.iScanCode == EStdKeyDevice3 || + keyEvent.iScanCode == EStdKeyXXX || + aEnterKeyForLinksActivation) + && aType == EEventKeyDown && !iView->FindItemIsInProgress() ) + { + iSelectionKeyPressed = ETrue; + keyEvent.iCode = EKeyNull; + } + + // Ignore key event in zoom mode + if ( result == EKeyWasNotConsumed && !iView->isZoomMode()) + { + if ( !iView->PenEnabled() && iView->FullScreenMode() && keyEvent.iRepeats) + { + iView->setFullScreenFlag(); + iView->EnableFullScreenModeL( EFalse ); + } + TRAP_IGNORE(result = iApiProvider.BrCtlInterface().OfferKeyEventL(keyEvent, aType)); + } + + /** + * When checking long or short key presses, iScanCode must be used, because + * when EEventKeyUp/EEventKeyUp are handled, the iCode is not available. + * iIsKeyLongPressed must be checked in short key presses because, when the + * button is released short key code will be called again. And that time it + * must be ignored. + */ + + /** + // This key is inactive, only for testing short / long key presses. + if ( keyEvent.iScanCode == 48 && keyEvent.iRepeats && !iIsKeyLongPressed) + { + iEikonEnv->InfoMsg(_L("0 Long")); + iIsKeyLongPressed = ETrue; + keyEvent.iCode = EKeyNull; + result = EKeyWasConsumed; + } + if ( aType == EEventKeyUp && keyEvent.iScanCode == 48 && !keyEvent.iRepeats) + { + if ( !iIsKeyLongPressed ) + { + iEikonEnv->InfoMsg(_L("0 Short")); + keyEvent.iCode = EKeyNull; + result = EKeyWasConsumed; + } + iIsKeyLongPressed = EFalse; + } + **/ + + /* + * Not processing short keys, if the History view, or the + * Miniature View ( old name: Thumbnail View ) is up, + * except short key: '8'. + */ + if (!iApiProvider.Preferences().AccessKeys()) + { + // Key short press, activate function based on keyEvent.iCode + if ( aType == EEventKey && result == EKeyWasNotConsumed ) + { + if (!AknLayoutUtils::PenEnabled()) + { + if (iView->isZoomMode()) + { + result = EKeyWasConsumed; + } + else + { + if (iApiProvider.Preferences().ShortcutKeysForQwerty()) + { + result = InvokeFunction ( keyEvent.iCode ); + } + else + { + if ( !iView->IsMiniatureViewUp() && !iView->IsHistoryViewUp() ) + { + TInt function = -1; + switch(keyEvent.iCode) + { + case '0': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey0Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '1': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey1Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '2': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey2Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '3': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey3Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '4': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey4Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '5': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey5Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '6': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey6Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '7': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey7Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '8': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey8Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '9': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKey9Cmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '*': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKeyStarCmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + case '#': + { + function = ShortcutsCommandDecodeMatrix[iApiProvider.Preferences().ShortcutKeyHashCmd()][KShortcutsCommandDecodeMatrixCmdVal]; + break; + } + default: + { + break; + } + } + + if (function != -1) + { + iView->HandleCommandL(function); + result = EKeyWasConsumed; + } + } + } //endof handle shortcut keys + + if (result == EKeyWasConsumed) + { + keyEvent.iCode = EKeyNull; + } + } + } + } + + if ( iView->IsHistoryViewUp() && result == EKeyWasConsumed ) + { + if ( ( aType == EEventKey || aType == EEventKeyUp ) + && ( keyEvent.iCode == EKeyLeftUpArrow // Northwest + || keyEvent.iCode == EStdKeyDevice10 // : Extra KeyEvent supports diagonal event simulator wedge + || keyEvent.iCode == EKeyLeftArrow // West + || keyEvent.iCode == EKeyLeftDownArrow // Southwest + || keyEvent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge + + || keyEvent.iCode == EKeyRightUpArrow // Northeast + || keyEvent.iCode == EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge + || keyEvent.iCode == EKeyRightArrow // East + || keyEvent.iCode == EKeyRightDownArrow // Southeast + || keyEvent.iCode == EStdKeyDevice12 ) ) // : Extra KeyEvent supports diagonal event simulator wedge + { + iView->UpdateTitleL( iApiProvider ); + } + } + + // If in zoom mode, then show the zoom tooltip + if (iView->isZoomMode() && result == EKeyWasConsumed ) + { + iView->SetZoomLevelTitleTextL(R_BROWSER_ZOOM_LEVEL); + } + + } // if (!iApiProvider.Preferences().AccessKeys()) + + if ( result == EKeyWasNotConsumed && + (keyEvent.iScanCode == EStdKeyDevice3 || keyEvent.iScanCode == EStdKeyXXX) && + aType == EEventKeyUp && + iSelectionKeyPressed ) + { + // Selection key was released and it is not a long press! + iSelectionKeyPressed = EFalse; + aType = EEventKey; + keyEvent.iCode = EKeyOK; + + // first offer event to browser control, e.g. link activation + // result = iApiProvider.BrCtlInterface().OfferKeyEventL(keyEvent, aType); + + iView->ResetPreviousViewFlag(); + } + return result; + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::FocusChanged() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::FocusChanged(TDrawNow aDrawNow) + { + // do not proceed further if a browser app exit is in progress + if ( iApiProvider.ExitInProgress() ) + { + return; + } + + if ( iApiProvider.StartedUp() ) + iApiProvider.BrCtlInterface().SetFocus(IsFocused()); + if ( iGotoPane->IsVisible() ) + { + TRAP_IGNORE(iGotoPane->EnableKeyEventHandlerL( IsFocused() )); + } + + CCoeControl::FocusChanged( aDrawNow ); + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::SizeChanged() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::SizeChanged() + { + // BrCtl could be uninitialized + if ( iApiProvider.StartedUp() ) + { + if(iApiProvider.LastActiveViewId() != KUidBrowserFeedsFeedViewId) + { + const TRect& oldRect = iApiProvider.BrCtlInterface().Rect(); + iApiProvider.BrCtlInterface().SetRect( TRect( oldRect.iTl, Size() ) ); + } + } + + if ( iFindKeywordPane->IsVisible() ) + iFindKeywordPane->HandleFindSizeChanged(); + if ( iGotoPane->IsVisible() ) + iGotoPane->HandleFindSizeChanged(); + + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::CountComponentControls() +// --------------------------------------------------------------------------- +// +TInt CBrowserContentViewContainer::CountComponentControls() const + { + TInt ctrls = 0; + ctrls++; // iGotoPane + if ( iApiProvider.StartedUp() ) + { + ctrls++; + } + ctrls++; // iFindKeywordPane + return ctrls; + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::ComponentControl() +// --------------------------------------------------------------------------- +// +CCoeControl* CBrowserContentViewContainer::ComponentControl( TInt aIndex ) const + { + CCoeControl *ctrl = NULL; + switch( aIndex ) + { + case 0: + { + ctrl = iGotoPane; + break; + } + case 1: + { + if ( iApiProvider.StartedUp() ) + ctrl = &(iApiProvider.BrCtlInterface()); + break; + } + case 2: + { + ctrl = iFindKeywordPane; + break; + } + + default: + break; + } + return ctrl; + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::ShutDownGotoURLEditorL() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::ShutDownGotoURLEditorL() + { + iGotoPane->MakeVisible( EFalse ); + iGotoPane->SetFocus( EFalse ); + SetFocus( ETrue ); + } + + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::ShutDownFindKeywordEditorL() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::ShutDownFindKeywordEditorL() + { + iFindKeywordPane->MakeVisible( EFalse ); + iFindKeywordPane->SetFocus( EFalse ); + SetFocus( ETrue ); + } + + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::HandleResourceChange() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::HandleResourceChange(TInt aType) + { + CCoeControl::HandleResourceChange( aType ); + if ( aType == KEikDynamicLayoutVariantSwitch) + { + if (!iView->FindItemIsInProgress()) + { + iView->HandleStatusPaneCallBack(); + iApiProvider.Display().RestoreTitleL(); + } + + iView->SetContentContainerRect(); + + if( iApiProvider.Preferences().SearchFeature() ) + { + iGotoPane->SetTextModeItalicL(); + // To Avoid Flickring, only when layout changed. + iGotoPane->DrawNow(); + } + + DrawDeferred(); + + // For Touch only-If find pane open, force toolbar to show since avkon disables + // touch toolbar whenever a dialog is open and a rotate event is handled. + // ** This workaround was provided by Avkon toolbar group + if ( AknLayoutUtils::PenEnabled() && + iFindKeywordPane->IsVisible() && + iView->Toolbar() ) + { + iView->Toolbar()->DrawableWindow()->SetOrdinalPosition( 0 ); + } + } + } + + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::CreateShortCutFuncsHashTable() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::CreateShortCutFuncsHashTable() + { + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncHomePg(), EWmlSettingsShortCutsActivateHomepage); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncBkMark(), EWmlSettingsShortCutsActivateBkmkview); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncFindKeyWord(), EWmlSettingsShortCutsShowFindKeyword); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncPrePage(), EWmlSettingsShortCutsGotoPreviousPage); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncSwitchWin(), EWmlSettingsShortCutsShowSwitchWindowList); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncMiniImage(), EWmlSettingsShortCutsShowMiniature); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncFullScreen(), EWmlSettingsShortCutsShowFullScreen); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncGoAddr(), EWmlSettingsShortCutsGotoPane); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncZoomIn(), EWmlSettingsShortCutsZoomIn); + InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncZoomOut(), EWmlSettingsShortCutsZoomOut); + // InsertFuncToHashTable(iApiProvider.Preferences().ShortCutFuncZoomMode(), EWmlSettingsShortCutsZoomMode); + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::InsertFuncToHashTable() +// --------------------------------------------------------------------------- +// +void CBrowserContentViewContainer::InsertFuncToHashTable(HBufC* aKeyStr, TInt aFunc) + { + + __ASSERT_DEBUG( (aKeyStr != NULL), Util::Panic( Util::EUninitializedData )); + + if (aKeyStr->Length() == 0) + { + return; + } + + TBuf<4> key1Str; // Ex.: 0075 + TBuf<4> key2Str; // Ex.: 0032 + + // Get the position of the separator ',' character from '0075, 0032'. + TInt pos = aKeyStr->LocateF( ',' ); + if ( ( pos != KErrNotFound ) ) + { //we have two string + // Extract the first unicode string + key1Str.Copy( aKeyStr->Des().Left( pos ) ); + TUint key1 = MyAtoi(key1Str); + + // Extract the second unicode string; second "-1" below is for remove space + key2Str.Copy( aKeyStr->Des().Right( aKeyStr->Des().Length() - pos - 1 -1) ); + TUint key2 = MyAtoi(key2Str); + + // insert key and function + iShortCutFuncMap.Insert(key1, aFunc); + iShortCutFuncMap.Insert(key2, aFunc); + } + else + { //we only have one string + // Extract the first unicode string + key1Str.Copy( aKeyStr->Des() ); + TUint key1 = MyAtoi(key1Str); + // insert key and function + iShortCutFuncMap.Insert(key1, aFunc); + } + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::MyAtoi() +// --------------------------------------------------------------------------- +// +TUint CBrowserContentViewContainer::MyAtoi(TPtrC aData) + { + TLex lex(aData); + TUint dataValue = 0; + lex.Val(dataValue, EHex); + return dataValue; + } + +//--------------------------------------------------------------------------- +// CBrowserContentViewContainer::InvokeFunction() +// --------------------------------------------------------------------------- +// +TKeyResponse CBrowserContentViewContainer::InvokeFunction(TUint aCode) + { + TInt function = -1; + // if error, no function defined for this shortcut key + TRAPD( err, function = iShortCutFuncMap.FindL(aCode) ); + if ( err != KErrNone ) + { + return EKeyWasNotConsumed; + } + + TBool embedded = iApiProvider.IsEmbeddedModeOn(); + + if ( !iView->IsMiniatureViewUp() && !iView->IsHistoryViewUp() ) + { + CBrowserAppUi* ui = CBrowserAppUi::Static(); + + switch(function) + { + case EWmlSettingsShortCutsActivateHomepage: + { + TBool homepage = iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserUiHomePageSetting ); + // home page + if ( homepage ) + { + // + TWmlSettingsHomePage pgtype = iApiProvider.Preferences().HomePageType(); + + if ( !(embedded || pgtype == EWmlSettingsHomePageBookmarks) ) + { + ui->LaunchHomePageL(); + } + else + { + if ( pgtype == EWmlSettingsHomePageBookmarks ) + { + iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId ); + } + } + } + return EKeyWasConsumed; + } + case EWmlSettingsShortCutsActivateBkmkview: + { + if ( !embedded ) + { + iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserBookmarksViewId ); + } + return EKeyWasConsumed; + } + case EWmlSettingsShortCutsGotoPane: + { + iView->LaunchGotoAddressEditorL(); + iView->MenuBar()->MenuPane()->MakeVisible(EFalse); + return EKeyWasConsumed; + } + case EWmlSettingsShortCutsShowFindKeyword: + { + if (!iView->ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(ETrue /* is current page wml?*/)) + { + iView->LaunchFindKeywordEditorL(); + iView->MenuBar()->MenuPane()->MakeVisible(EFalse); + } + return EKeyWasConsumed; + } + case EWmlSettingsShortCutsShowSwitchWindowList: + { + if (!iView->ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(EFalse /*is any page wml?*/)) + { + if (iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) && + !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMinimalMultipleWindows ) && + iApiProvider.WindowMgr().WindowCount() > 1) + { + iApiProvider.SetViewToBeActivatedIfNeededL( KUidBrowserWindowSelectionViewId ); + } + else + { + if (iApiProvider.WindowMgr().WindowCount() > 1) + { + ui->SwitchWindowL(); + } + } + } + return EKeyWasConsumed; + } + + case EWmlSettingsShortCutsZoomOut: + { + iView->ZoomImagesOutL(); + return EKeyWasConsumed; + } + + case EWmlSettingsShortCutsZoomIn: + { + iView->ZoomImagesInL(); + return EKeyWasConsumed; + } + + case EWmlSettingsShortCutsGotoPreviousPage: + { + if ( iApiProvider.BrCtlInterface().NavigationAvailable( TBrCtlDefs::ENavigationBack ) ) + { + iApiProvider.LoadObserver().DoStartLoad( CBrowserLoadObserver::ELoadUrlTypeOther ); + iApiProvider.BrCtlInterface().HandleCommandL( (TInt)TBrCtlDefs::ECommandOneStepBack + + (TInt)TBrCtlDefs::ECommandIdBase ); + } + return EKeyWasConsumed; + } + + case EWmlSettingsShortCutsShowFullScreen: + { + iView->HandleCommandL(EWmlCmdEnterFullScreenBrowsing); + return EKeyWasConsumed; + } + } + } // END if ( !iView->IsMiniatureViewUp() && !iView->IsHistoryViewUp() && !iView->isZoomMode()) + + + if ( function == EWmlSettingsShortCutsShowMiniature && !iView->IsHistoryViewUp() ) + { // Process short key '8' only if History view is not shown. + if (!iView->ApiProvider().WindowMgr().CurrentWindow()->HasWMLContent(ETrue /* is current page wml?*/)) + { + iApiProvider.BrCtlInterface().HandleCommandL( + (TInt)TBrCtlDefs::ECommandShowThumbnailView + (TInt)TBrCtlDefs::ECommandIdBase ); + } + return EKeyWasConsumed; + } + + return EKeyWasNotConsumed; + } + + + +#ifdef __SERIES60_HELP +// --------------------------------------------------------- +// CBrowserContentViewContainer::GetHelpContext() +// --------------------------------------------------------- +// +void CBrowserContentViewContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + const TUid KUidOperatorMenuApp = { 0x10008D5E }; + aContext.iMajor = KUidBrowserApplication; + if ( iApiProvider.IsEmbeddedModeOn() ) + { + if ( CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu() ) + { + aContext.iMajor = KUidOperatorMenuApp; + aContext.iContext = KOPERATOR_HLP_OPTIONS_LIST; + } + else + { + aContext.iContext = KOSS_HLP_PAGEVIEW_EMBED; + } + + } + else + { + aContext.iContext = KOSS_HLP_PAGEVIEW; + } + } + +#endif // __SERIES60_HELP + +// End of File