browserui/browser/FavouritesSrc/BrowserBookmarksGotoPane.cpp
branchRCL_3
changeset 65 8e6fa1719340
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FavouritesSrc/BrowserBookmarksGotoPane.cpp	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,858 @@
+/*
+* Copyright (c) 2002-2007 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:
+*      Implementation of CBrowserBookmarksGotoPane.
+*
+*
+*/
+
+
+// INCLUDE FILES
+#include <Browser_Platform_Variant.hrh>
+
+#include <akninfrm.h>
+#include <eikedwin.h>
+#include <favouriteslimits.h>
+
+#include <aknconsts.h>
+#include <akneditstateindicator.h>
+#include <AknsListBoxBackgroundControlContext.h>
+#include <AknsFrameBackgroundControlContext.h>
+
+#include <BrowserNG.rsg>
+
+#include <AknsUtils.h>
+#include <AppApacLayout.cdl.h>
+#include <AppLayout.cdl.h>
+#include <AknLayout.cdl.h>
+
+#include "BrowserBookmarksGotoPane.h"
+#include "BrowserUtil.h"
+#include "commonconstants.h"
+#include "BrowserAdaptiveListPopup.h"
+#include "WmlBrowserBuild.h" //feature manager
+#include "browser.hrh"
+#include "BrowserAppUi.h"
+#include "BrowserFavouritesView.h"
+#include "Preferences.h"
+#include <Featmgr.h>
+#include "BrowserUiSDKCRKeys.h"
+
+#include <eikpriv.rsg>
+#include <BARSREAD.H>
+
+#include <AknLayout2ScalableDef.h>
+#include <aknlayoutfont.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include <StringLoader.h>
+#include <skinlayout.cdl.h>
+using namespace SkinLayout;
+
+// CONSTANTS
+const TInt EUseSkinContext = 0x01;
+const TInt EParentAbsolute = 0x02;
+const TInt KRightSpace = 10; //space in pixels left at the end of text editor.
+// CONSTANTS
+const TInt KMaxTitleLength = 512;
+_LIT(KAddressText,"http://www.");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::NewL
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane* CBrowserBookmarksGotoPane::NewL
+        (
+        const CCoeControl& aParent,
+        CBrowserFavouritesView* aContentView,
+        const TDesC& aBitmapfile,
+        TInt aIconBitmapId,
+        TInt aIconMaskId,
+        TBool aPopupListStatus,
+        TBool aSearchPaneMode
+        )
+    {
+    CBrowserBookmarksGotoPane* gotoPane =
+        new(ELeave) CBrowserBookmarksGotoPane(aContentView, aSearchPaneMode);
+    CleanupStack::PushL( gotoPane );
+    gotoPane->ConstructL( aParent, aBitmapfile, aIconBitmapId, aIconMaskId, aPopupListStatus );
+    CleanupStack::Pop();    // gotoPane
+    return gotoPane;
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::~CBrowserBookmarksGotoPane
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane::~CBrowserBookmarksGotoPane()
+    {
+    delete iEditor;
+    delete iInputFrame;
+    delete iSkinContext;
+    delete iInputContext;
+    delete iBAdaptiveListPopup;
+    delete iDefaultSearchText;
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::BeginEditingL()
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::BeginEditingL()
+    {
+    if ( !iFrozen )
+        {
+        // If its a GoTo Pane Mode.
+        if( !iSearchPaneMode )
+            {
+            if( iView->ApiProvider().Preferences().SearchFeature() )
+                {
+                // If there is no text, then we need to place back
+                // the default text, else preserve the previously
+                // typed text.
+                HBufC* text = iEditor->GetTextInHBufL();
+                if( !text )
+                    {
+                    SetTextL( KWWWString );
+                    }
+                else
+                    {
+                    delete text;
+                    }
+                }
+            else
+                SetTextL( KWWWString );
+            }
+        else
+            {
+            if( iView->ApiProvider().Preferences().SearchFeature()  )
+                {
+                //Clear searchpane on focus if default text is there
+                HBufC* text = iEditor->GetTextInHBufL();
+                if ( text )
+                    {
+                    CleanupStack::PushL( text );
+                    if ( !text->Compare( iDefaultSearchText->Des() ) )
+                        {
+                        iEditor->SetTextL( &KNullDesC );
+                        }
+                    CleanupStack::PopAndDestroy( text );
+                    }
+                }
+            }
+
+        MakeVisible( ETrue );
+        SetEditingL( ETrue );
+        iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+        if (AknLayoutUtils::PenEnabled()
+                &&  ( !iView->ApiProvider().Preferences().SearchFeature())  )
+            {
+            ActivateVkbL();
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::CancelEditingL()
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::CancelEditingL()
+    {
+    if ( !iFrozen )
+        {
+        // Clear selection when focus moved, only
+        // affects when both the editors are visible.
+        // no need for condition.
+        TInt pos = iEditor->CursorPos();
+        iEditor->SetSelectionL(pos,pos);
+        SetEditingL( EFalse );
+
+        // Cancel Adaptive List popup if its active
+        if ( NULL != iBAdaptiveListPopup)
+            {
+            iBAdaptiveListPopup->SetDirectoryModeL( ETrue );
+            iBAdaptiveListPopup->HidePopupL();
+            }
+        }
+
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetTextL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetTextL
+( const TDesC& aText, TBool aClipToFit /*=ETrue*/, TBool aCancelEditing )
+    {
+
+    CFbsFont * font = NULL;
+
+    if ( !iFrozen )
+        {
+        if ( aClipToFit && aText.Length() )
+            {
+            // Allocate 3 chars more (make sure "..." fits).
+            HBufC* buf = HBufC::NewLC( aText.Length() + 3 );
+            *buf = aText;
+            TPtr ptr( buf->Des() );
+            CTextView* textView = iEditor->TextView();
+            if ( textView )
+                {
+                //The Textview does not use the iConEnv->NormalFont() for drawing so we can not use it for measurement.
+                //Textview uses the default char format font for drawing. See bug: EHCN-6U59SN
+                TBuf<KMaxTypefaceNameLength> typeface;
+                CEikonEnv::Static()->ReadResource(typeface,R_EIK_DEFAULT_CHAR_FORMAT_TYPEFACE);
+                TResourceReader reader;
+                CEikonEnv::Static()->CreateResourceReaderLC(reader,R_EIK_DEFAULT_CHAR_FORMAT_HEIGHT);
+                TInt height =  reader.ReadInt16();
+                CleanupStack::PopAndDestroy(); // reader
+
+                TFontSpec fontSpec(typeface, height);
+                CEikonEnv::Static()->ScreenDevice()->GetNearestFontInTwips((CFont*&)font, fontSpec);
+
+                AknTextUtils::ClipToFit
+                    (
+                    ptr,
+                    *font,
+                    textView->ViewRect().Width() - KRightSpace
+                    );
+                }
+            iEditor->SetTextL( &ptr );
+            CleanupStack::PopAndDestroy();  // buf
+            }
+        else
+            {
+            if( iSearchPaneMode )
+                {
+                iEditor->SetTextL( &aText );
+                }
+            else
+                {
+                if ( aText.Length() )
+                    {
+                    iEditor->SetTextL( &aText );
+                    }
+                else
+                    {
+                    TBufC<16> buf(KAddressText);
+                    HBufC* tmpBuf = NULL;
+                    tmpBuf = buf.AllocLC();
+                    iEditor->SetTextL( tmpBuf );
+                    CleanupStack::PopAndDestroy(); // tmpBuf
+                    }
+                }
+            }
+
+        iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+        if ( !iEverFocused )
+            {
+            iEditor->SetFocus( ETrue );
+            }
+
+        if ( !iEverFocused )
+            {
+            iEditor->SetFocus( IsFocused() );
+            iEverFocused = ETrue;
+            }
+            SetEditingL( !aCancelEditing );
+            DrawDeferred();
+        }
+
+      // release font if it was used
+      if (font != NULL)
+          {
+          CEikonEnv::Static()->ScreenDevice()->ReleaseFont(font);
+          }
+
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::GetTextL
+// ---------------------------------------------------------
+//
+HBufC* CBrowserBookmarksGotoPane::GetTextL()
+    {
+    HBufC* text = HBufC::NewL( iEditor->TextLength() + 1 );
+    TPtr ptr = text->Des();
+    iEditor->GetText( ptr );
+    ptr.ZeroTerminate();
+    if( !iSearchPaneMode )
+        {
+        Util::EncodeSpaces(text);
+        }
+
+    return text;
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetObserver
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetGPObserver
+( MBookmarksGotoPaneObserver* aObserver )
+    {
+    /*__ASSERT_DEBUG( !iGPObserver, \
+        Util::Panic( Util::EGotoPaneObserverAlreadySet ) );*/
+    iGPObserver = aObserver;
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetLineState
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetLineState( TBool aLineVisible )
+    {
+    iInputFrame->SetLineState( aLineVisible );
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::OfferKeyEventL
+// ---------------------------------------------------------
+//
+// Note:
+//
+//   Below, there are several keys in the ISO-Latin-1 range that we
+//   exclude from use in a URL:
+//
+//     - EStdKeyDevice10 0xC9  E-accent acute         Northwest
+//     - EStdKeyDevice11 0xCA  E-accent circumflex    Northeast
+//     - EStdKeyDevice12 0xCB  E-umlaut               Southeast
+//     - EStdKeyDevice13 0xCC  I-accent grave         Southwest
+//
+//   While these ought to be vaguely acceptable in certain parts of a URL,
+//   they are also used by some navigation drivers as our "diagonal event"
+//   codes so turn up as the user navigates the cursor. Because of this,
+//   today, we prevent them from being inserted as characters. There's
+//   a second set of code ranges (in the 0x8XXX range) that's also defined
+//   for these events; if the driver writers ever manage to get all of
+//   the navigation drivers using this "out-of-band" range, we can
+//   eliminate filtering the ISO-Latin-1 range of characters that we
+//   do here.
+//
+//
+
+TKeyResponse CBrowserBookmarksGotoPane::OfferKeyEventL
+( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse response = EKeyWasNotConsumed;
+    TChar iInputChar = TChar( aKeyEvent.iScanCode );
+
+
+    if ( iBAdaptiveListPopup )
+        {
+        response = iBAdaptiveListPopup->OfferKeyEventL( aKeyEvent, aType );
+        }
+
+    if ( iEditing && response != EKeyWasConsumed)
+        {
+        // Editing; most keys simply forwarded to the editor.
+        switch ( aKeyEvent.iCode )
+            {
+            case EKeyOK:
+                {
+                response = EKeyWasConsumed;     // MSK is now handled through HandleCommand in BrowserBookmarksView
+                break;
+                }
+
+            case EKeyRightUpArrow:              // Northeast
+            case EStdKeyDevice11:               //   : Extra KeyEvent supports diagonal event simulator wedge
+            case EKeyRightDownArrow:            // Southeast
+            case EStdKeyDevice12:               //   : Extra KeyEvent supports diagonal event simulator wedge
+            case EKeyLeftDownArrow:             // Southwest
+            case EStdKeyDevice13:               //   : Extra KeyEvent supports diagonal event simulator wedge
+            case EKeyLeftUpArrow:               // Northwest
+            case EStdKeyDevice10:               //   : Extra KeyEvent supports diagonal event simulator wedge
+                {                               // Here, "eat" all of the diagonals so they have no effect...
+                response = EKeyWasConsumed;
+                break;
+                }
+
+            case EKeyEnter:
+                // Handle EnterKey as "GOTO" for Touch, VKB's enter key
+                if ( AknLayoutUtils::PenEnabled() )
+                        {
+                        CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneGoTo);
+                        // In case of search feature, we need to pass EKeyWasConsumed for EKeyEnter
+                        if ( iView->ApiProvider().Preferences().SearchFeature() )
+                            {
+                            response = EKeyWasConsumed;
+                            }
+                        break;
+                        }
+
+            // Else *FALL THROUGH* to default in case Pen is not enabled.
+            default:
+                {
+                response = iEditor->OfferKeyEventL(aKeyEvent, aType );
+                break;
+                }
+            }
+
+         // In the absence of search feature
+         // Force key event to be consumed if you're editing
+         // regardless of what's happened to it.
+         //
+         // This forces user to press cancel to continue other tasks
+         if ( !iView->ApiProvider().Preferences().SearchFeature() )
+             {
+             response = EKeyWasConsumed;
+             }
+        }
+    else if ( response != EKeyWasConsumed )
+        {
+        // Key consumed yet? If not, process onwards...
+        if ( (aKeyEvent.iScanCode == EStdKeyHash)  ||
+                ( aKeyEvent.iModifiers &
+                ( EModifierShift | EModifierLeftShift | EModifierRightShift |
+                EModifierCtrl | EModifierLeftCtrl | EModifierRightCtrl ) ) )
+            {
+
+            // Hash key press will be used for Mark/UnMark functionality
+            // Let Platform Listbox handle this.
+            response = EKeyWasNotConsumed;
+            }
+
+        //
+        // Not currently editing the GoTo pane.
+        // Catch alpha and numeric to pop
+        // up goto pane
+        //
+        // Only popup the GoTo Pane with a KeyDown event.
+        // Otherwise, if browser is pushed to the backround (but still active)
+        // in favor of the App Shell, A long "0" press will reactivate the browser and
+        // leave a KeyUp to (wrongly) pop the pane up
+        //
+        // Note that we exclude Unicode 0xC4 and 0xC5 which
+        // are defined as EStdkeyYes and EStdkeyNo. These
+        // map to the Send and End keys respectively. Normally,
+        // 0xC4 and 0xC5 can be considered alpha digits, but we
+        // exclude them so that they will not pop the GoTo pane
+        //
+        // We do the same thing for all of the diagonal motion events
+        //   so they have no effect either.
+        //
+        // Otherwise, key event is generated again (to channel through FEP)
+        //
+        else if (    !iFrozen
+                  && aType == EEventKeyDown
+                  && iInputChar.IsAlphaDigit()          // We want alpha numeric keys to popup goto pane
+                  && iInputChar != EStdKeyYes           // Ignore Send (green key)
+                  && iInputChar != EStdKeyNo            // Ignore End (red key)
+                  && iInputChar != EKeyRightUpArrow     // Ignore Northeast
+                  && iInputChar != EStdKeyDevice11      //   : Extra KeyEvent supports diagonal event simulator wedge
+                  && iInputChar != EKeyRightDownArrow   // Ignore Southeast
+                  && iInputChar != EStdKeyDevice12      //   : Extra KeyEvent supports diagonal event simulator wedge
+                  && iInputChar != EKeyLeftDownArrow    // Ignore Southwest
+                  && iInputChar != EStdKeyDevice13      //   : Extra KeyEvent supports diagonal event simulator wedge
+                  && iInputChar != EKeyLeftUpArrow      // Ignore Northwest
+                  && iInputChar != EStdKeyDevice10 )    //   : Extra KeyEvent supports diagonal event simulator wedge
+            {
+            // These keys activate the Goto Pane.
+            // We'll consume the key event so it ends here
+            response = EKeyWasConsumed;
+
+            BeginEditingL();
+
+            iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+            iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
+            iCoeEnv->SimulateKeyEventL( aKeyEvent, aType );
+            }
+        else
+            {
+            // Other keys do not activate the Goto Pane.
+            // Let someone else take the key event
+            response = EKeyWasNotConsumed;
+            }
+        }
+    return response;
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::CountComponentControls
+// ---------------------------------------------------------
+//
+TInt CBrowserBookmarksGotoPane::CountComponentControls() const
+    {
+    return 2;
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::ComponentControl
+// ---------------------------------------------------------
+//
+CCoeControl* CBrowserBookmarksGotoPane::ComponentControl
+( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            {
+            return iInputFrame;
+            }
+
+        case 1:
+            {
+            return iEditor;
+            }
+
+        default:
+            {
+            return NULL;
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::FocusChanged
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::FocusChanged( TDrawNow aDrawNow )
+    {
+    iEditor->SetFocus( IsFocused(), aDrawNow );
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::CBrowserBookmarksGotoPane
+// ---------------------------------------------------------
+//
+CBrowserBookmarksGotoPane::CBrowserBookmarksGotoPane(CBrowserFavouritesView* aView, TBool aSearchPaneMode)
+:   iView( aView ),
+    iEditing( EFalse ),
+    iFrozen( EFalse ),
+    iBAdaptiveListPopup( NULL ),
+    iSearchPaneMode( aSearchPaneMode )
+    {
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::ConstructL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::ConstructL ( const CCoeControl& aParent, const TDesC& aBitmapfile,
+        TInt aIconBitmapId, TInt aIconMaskId, TBool aPopupListStatus )
+
+    {
+    SetContainerWindowL( aParent ); // This is now non-window owning control
+    SetMopParent(const_cast<CCoeControl*>(&aParent));
+    iEditor = new (ELeave) CEikEdwin;
+    iInputFrame = CAknInputFrame::NewL( iEditor, EFalse, aBitmapfile,
+                                    aIconBitmapId, aIconMaskId, 0 );
+    iInputFrame->SetContainerWindowL( *this );
+    iEditor->SetContainerWindowL( *this );
+    AknEditUtils::ConstructEditingL(iEditor, KFavouritesMaxUrlGotoPaneDefine, 1, EAknEditorCharactersLowerCase, EAknEditorAlignRight, EFalse, ETrue, EFalse);
+    iEditor->AddFlagToUserFlags( CEikEdwin::EAlwaysShowSelection );
+    iEditor->SetBorder( TGulBorder::ENone );
+    iEditor->SetAknEditorCase( EAknEditorLowerCase );
+    iEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
+    iEditor->SetSkinBackgroundControlContextL(NULL);
+    if (AVKONAPAC)
+        {
+        // Disallow chinese input.
+        iEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode | EAknEditorNumericInputMode );
+        }
+
+    // In Search Mode we allow all types of inputs
+    TInt editorFlags( (iSearchPaneMode ? EAknEditorFlagDefault : EAknEditorFlagLatinInputModesOnly) | EAknEditorFlagUseSCTNumericCharmap );
+
+    // Always disable T9 input for goto url
+    editorFlags = (editorFlags | EAknEditorFlagNoT9);
+
+    iEditor->SetAknEditorFlags( editorFlags );
+
+
+    iEditor->SetAknEditorPermittedCaseModes( EAknEditorUpperCase | EAknEditorLowerCase );
+
+    iEditor->CreateTextViewL();
+    SetupSkinContextL();
+    iEditing = EFalse;
+    TBool searchFeature = iView->ApiProvider().Preferences().SearchFeature();
+    if ( searchFeature )
+        {
+        HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
+        TPtr searchProviderPtr = searchProvider->Des();
+
+        iView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
+            KMaxTitleLength , searchProviderPtr);
+        if( searchProvider->Length() == 0 )
+            {
+            iDefaultSearchText = StringLoader::LoadL( R_IS_WEB_SEARCH );
+            }
+        else
+            {
+            iDefaultSearchText = searchProvider->AllocL();
+            }
+        CleanupStack::PopAndDestroy(searchProvider);
+        }
+
+    //adaptive popuplist
+    iBAdaptiveListPopup = NULL;
+    if( aPopupListStatus && AUTOCOMP ) //ask the feature manager
+        {
+        iBAdaptiveListPopup= new (ELeave) CBrowserAdaptiveListPopup(
+            iEditor, this, EBookmarksGotoPane, searchFeature);
+        iBAdaptiveListPopup->ConstructL();
+        iEditor->SetObserver( iBAdaptiveListPopup );
+        if (iView)
+            {
+            iBAdaptiveListPopup->SetUrlSuffixList(iView->ApiProvider().Preferences().URLSuffixList());
+            iBAdaptiveListPopup->SetMaxRecentUrls(iView->ApiProvider().Preferences().MaxRecentUrls());
+            }
+        }
+
+    ActivateL();
+    MakeVisible( EFalse );
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SizeChanged
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SizeChanged()
+    {
+    TAknLayoutRect layoutRectTemp;
+    TAknWindowLineLayout windowLayoutTmp, windowLayoutTmp2;
+
+    windowLayoutTmp = AknLayout::Find_pane_elements_Line_4();
+    windowLayoutTmp2 = windowLayoutTmp;
+    layoutRectTemp.LayoutRect( Rect(), windowLayoutTmp2 );
+    iEditor->SetRect( layoutRectTemp.Rect() );
+    iInputFrame->SetRect( Rect() );
+    TRAP_IGNORE(SetupSkinContextL());
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetEditingL
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::SetEditingL( TBool aEditing )
+    {
+    if ( aEditing != iEditing )
+        {
+        iEditing = aEditing;
+        SetFocus( iEditing );
+        if ( iGPObserver )
+            {
+            iGPObserver->HandleBookmarksGotoPaneEventL
+                (
+                this,
+                MBookmarksGotoPaneObserver::EEventEditingModeChanged
+                );
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::PopupList
+// ---------------------------------------------------------
+//
+CBrowserAdaptiveListPopup* CBrowserBookmarksGotoPane::PopupList()
+    {
+    return iBAdaptiveListPopup;
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::HandleResourceChange( TInt aType )
+    {
+    CCoeControl::HandleResourceChange( aType );
+
+    if ( iBAdaptiveListPopup )
+        {
+        iBAdaptiveListPopup->HandleResourceChange( aType );
+        }
+    }
+
+// ---------------------------------------------------------
+// CBrowserBookmarksGotoPane::MopSupplyObject
+// ---------------------------------------------------------
+//
+TTypeUid::Ptr CBrowserBookmarksGotoPane::MopSupplyObject( TTypeUid aId )
+    {
+    return MAknsControlContext::SupplyMopObject( aId, iSkinContext );
+    }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::Editor
+// ----------------------------------------------------------------------------
+CEikEdwin* CBrowserBookmarksGotoPane::Editor() const
+    {
+    return iEditor;
+    }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::HandlePointerEventL
+// ----------------------------------------------------------------------------
+//
+void CBrowserBookmarksGotoPane::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    if (AknLayoutUtils::PenEnabled())
+        {
+        if(iEditor && Rect().Contains(aPointerEvent.iPosition))
+            {
+            iEditor->HandlePointerEventL(aPointerEvent);
+            if ( !iEditing )
+                {
+                SetEditingL( ETrue );
+                iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
+                CBrowserAppUi::Static()->UpdateCbaL();
+                }
+            }
+        else
+            {
+                if(aPointerEvent.iType == TPointerEvent::EButton1Down)
+                {
+                // pointer outside of control
+                CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneCancel);
+                }
+            }
+        }
+    }
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetupSkinContextL
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::SetupSkinContextL()
+    {
+    TAknsItemID tileIID = KAknsIIDQsnBgColumnA;
+
+    TAknWindowLineLayout tile =
+        Column_background_and_list_slice_skin_placing_Line_2();
+
+    TAknLayoutRect mainPane;
+    mainPane.LayoutRect(
+        iAvkonAppUi->ApplicationRect(),
+        AKN_LAYOUT_WINDOW_main_pane( iAvkonAppUi->ApplicationRect(),
+                                     0, 0, 1) );
+    TAknLayoutRect listRect;
+    listRect.LayoutRect( mainPane.Rect(), AknLayout::list_gen_pane(0) );
+
+    TAknLayoutRect tileRect;
+    tileRect.LayoutRect(mainPane.Rect(), tile);
+
+    if ( !iSkinContext )
+        {
+        iSkinContext = CAknsListBoxBackgroundControlContext::NewL(
+            KAknsIIDQsnBgAreaMainListGene,
+            listRect.Rect(),
+            EUseSkinContext & EParentAbsolute,
+            tileIID,
+            tileRect.Rect() );
+        }
+    else
+        {
+        iSkinContext->SetRect( listRect.Rect() );
+        }
+
+
+    if ( !iInputContext )
+        {
+        iInputContext = CAknsFrameBackgroundControlContext::NewL(
+            KAknsIIDQsnFrInput, TRect(0,0,0,0),TRect(0,0,0,0),EFalse );
+        }
+
+    iInputFrame->SetInputContext(iInputContext);
+    iEditor->SetSkinBackgroundControlContextL(iInputContext);
+
+    }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::ActivateVkbL
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::ActivateVkbL()
+    {
+    if (iEditor && iEditor->TextView())
+        {
+        // make sure observer is set
+        iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
+
+        // simulate pointer event to force VKB
+
+        // first get point at cursor location
+        TInt pos = iEditor->CursorPos();
+        CTextView* textView = iEditor->TextView();
+        TPoint curPos;
+        textView->DocPosToXyPosL(pos, curPos);
+
+        TPointerEvent pe;
+        pe.iPosition = curPos;
+
+        pe.iType = TPointerEvent::EButton1Down;
+        iEditor->HandlePointerEventL(pe);
+
+        // VKB will only activate if nothing selected
+        iEditor->SetSelectionL(pos, pos);
+
+        pe.iType = TPointerEvent::EButton1Up;
+        iEditor->HandlePointerEventL(pe);
+        iEditor->SetCursorPosL( iEditor->TextLength(), EFalse );
+
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetTextModeItalic
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::SetTextModeItalicL( )
+    {
+
+    // Editor Control is laid in a scalable way, so we need to get the correct font
+    // specification for setting CharFormatLayer, We could have used GetNearestFontInTwips,
+    // as done above in SetTextL() but it does not provide correct fonts for editor.
+    // We do not need to set the FontPosture back to EPostureUpright ( Normal ), as it
+    // is automatically handled by AknLayoutUtils::LayoutEdwinScalable called by
+    // iInputFrame->SetRect(), which overwrites all the properties for Editor.
+
+    TAknTextComponentLayout   editorLayout;
+    TBool apac( AknLayoutUtils::Variant() == EApacVariant && ( CAknInputFrame::EShowIndicators ) );
+    editorLayout = AknLayoutScalable_Avkon::input_find_pane_t1( apac ? 1: 0 );
+    TAknTextLineLayout lineLayout = editorLayout.LayoutLine();
+    TInt fontid =  lineLayout.FontId();
+    const CAknLayoutFont *font = AknLayoutUtils::LayoutFontFromId( fontid  );
+
+    TCharFormat charFormat;
+    TCharFormatMask charFormatMask;
+    charFormat.iFontSpec = font->FontSpecInTwips();
+    charFormat.iFontSpec.iFontStyle.SetPosture( EPostureItalic );
+    charFormatMask.SetAttrib(EAttFontTypeface);
+    charFormatMask.SetAttrib(EAttFontHeight);
+    charFormatMask.SetAttrib(EAttFontStrokeWeight);
+    charFormatMask.SetAttrib(EAttFontPosture);
+
+    // Owner ship of charFormatLayer is taken by Editor
+    CCharFormatLayer* charFormatLayer = NULL;
+    charFormatLayer = CCharFormatLayer::NewL(charFormat,charFormatMask);
+    iEditor->SetCharFormatLayer(charFormatLayer);
+   }
+
+// ----------------------------------------------------------------------------
+// CBrowserBookmarksGotoPane::SetVKBFlag
+// ----------------------------------------------------------------------------
+void CBrowserBookmarksGotoPane::SetVKBFlag( TBool aVKBFlag )
+    {
+#if defined(BRDO_SEARCH_INTEGRATION_FF)
+    if( aVKBFlag )
+        {
+        iEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB );
+        }
+    else
+        {
+        iEditor->AddFlagToUserFlags( CEikEdwin::EAvkonDisableVKB );
+        }
+#endif
+    }
+// End of File