--- a/browserui/browser/BrowserAppSrc/BrowserGotoPane.cpp Thu Aug 19 09:57:56 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1394 +0,0 @@
-/*
-* 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 FILES
-#include <Browser_Platform_Variant.hrh>
-#include <eikmenub.h>
-#include <eikdef.h>
-#include <akninfrm.h>
-#include <eikon.rsg>
-#include <eikenv.h>
-#include <txtglobl.h>
-#include <gulfont.h>
-#include <txtfrmat.h>
-#include <eikgted.h>
-#include <aknconsts.h>
-#include <akneditstateindicator.h>
-#include <AknsListBoxBackgroundControlContext.h>
-#include <BrowserNG.rsg>
-#include <Featmgr.h>
-#include <fepbase.h>
-#include <aknutils.h>
-#include <browseruisdkcrkeys.h>
-
-#include <AknLayout2ScalableDef.h>
-#include <aknlayoutfont.h>
-#include <aknlayoutscalable_avkon.cdl.h>
-
-#include "CommonConstants.h"
-#include "BrowserGotoPane.h"
-#include "BrowserAppUi.h"
-#include "BrowserUtil.h"
-#include "browser.hrh"
-#include <favouriteslimits.h>
-#include "BrowserAdaptiveListPopup.h"
-#include "BrowserContentView.h"
-
-#include "eikon.hrh"
-
-#include <StringLoader.h>
-
-const TInt KMaxTitleLength = 512;
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::NewL
-// ---------------------------------------------------------------------------
-//
-CBrowserGotoPane* CBrowserGotoPane::NewL(
- const CCoeControl* aParent, TInt aIconBitmapId, TInt aIconMaskId,
- TBool aPopupListStatus, CBrowserContentView* aContentView,
- TBool aFindKeywordMode )
- {
- CBrowserGotoPane* gotoPane = new(ELeave)
- CBrowserGotoPane( aContentView, aFindKeywordMode );
-
- CleanupStack::PushL( gotoPane );
- gotoPane->ConstructL( aParent, aIconBitmapId, aIconMaskId, aPopupListStatus );
- gotoPane->MakeVisibleL( EFalse );
- gotoPane->SetFocus( EFalse );
- CleanupStack::Pop(); // gotoPane
-
- return gotoPane;
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::MakeVisibleL
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::MakeVisibleL( TBool aVisible )
- {
- if ( aVisible )
- {
- if ( iSearchEditor )
- {
- ConstructSearchPaneL();
- }
- HandleFindSizeChanged();
- if ( AUTOCOMP ) //ask the feature manager
- {
- //2.1 does not put http:// there
- SetTextL( KNullDesC );
- }
- else
- {
- //2.0 does put the http:// there
- SetTextL( KHttpString );
- }
- }
- else
- {
- // Clear the search text if goto is cancelled ( hidden ).
- if ( iSearchEditor )
- {
- SetSearchTextL( KNullDesC );
- }
- }
-
- SetPointerCapture(aVisible);
- if (AknLayoutUtils::PenEnabled() && ( !iSearchEditor ) )
- {
- if (aVisible)
- {
- ActivateVKB();
- }
- }
-
- CCoeControl::MakeVisible( aVisible );
-
- iGotoKeyHandled->Reset();
- iGotoKeyHandled->EnableL( aVisible );
-
-
- if ( iSearchEditor )
- {
- SetTextModeItalicL();
- }
- // To avoid Flickring Effect when SearchInputFrame is
- // re-created with new search provider icon.
- DrawNow( );
-
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::MakeVisible
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::MakeVisible( TBool aVisible )
- {
- TRAP_IGNORE( MakeVisibleL( aVisible ) );
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::~CBrowserGotoPane
-// ---------------------------------------------------------------------------
-//
-CBrowserGotoPane::~CBrowserGotoPane()
- {
- if (iAvkonAppUi!=NULL)
- {
- iAvkonAppUi->RemoveFromStack( iGotoKeyHandled );
- }
- delete iSearchEditor;
- delete iSearchInputFrame;
-
- delete iGotoKeyHandled;
- delete iEditor;
- delete iInputFrame;
- delete iPrevKeyword;
- delete iBAdaptiveListPopup;
- delete iDefaultSearchText;
- iContentView = NULL;
- CCoeEnv::Static()->RemoveFepObserver(static_cast<MCoeFepObserver &>(*this));
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::CBrowserGotoPane
-// ---------------------------------------------------------------------------
-//
-CBrowserGotoPane::CBrowserGotoPane( CBrowserContentView* aContentView, TBool aFindKeywordMode )
-: iContentView( aContentView),
- iFindKeywordMode( aFindKeywordMode ),
- iHandleFEPFind( ETrue ),
- iBAdaptiveListPopup( NULL ),
- iGotoPaneActive( ETrue ),
- iSearchPaneActive( EFalse),
- iSearchIconId( 0 )
- {
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::ConstructL ( const CCoeControl* aParent, TInt aIconBitmapId, TInt aIconMaskId,
- TBool
- aPopupListStatus
- )
- {
- CreateWindowL();
-
- // remove 'const' modifier and set parent control
- SetMopParent( CONST_CAST( CCoeControl*, aParent ) );
-
- iEditor = new (ELeave) CEikGlobalTextEditor;
-
- iInputFrame = CAknInputFrame::NewL(
- iEditor,
- EFalse,
- KAvkonBitmapFile,
- aIconBitmapId,
- aIconMaskId,
- CAknInputFrame::EPopupLayout );
-
- iInputFrame->SetContainerWindowL( *this );
-
- AknEditUtils::ConstructEditingL ( iEditor,
- KFavouritesMaxUrlGotoPaneDefine,
- 1,
- EAknEditorCharactersLowerCase,
- EAknEditorAlignRight,
- EFalse,
- ETrue,
- EFalse );
-
- iEditor->SetContainerWindowL( *this );
- iEditor->SetObserver( this );
- iEditor->SetBorder( TGulBorder::ENone );
- iEditor->SetAknEditorCase( EAknEditorLowerCase );
- iEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
-
- if (AVKONAPAC)
- {
- // Disallow chinese input.
- iEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode |
- EAknEditorNumericInputMode );
- }
- TInt editorFlags = ((iFindKeywordMode) ? EAknEditorFlagDefault : EAknEditorFlagLatinInputModesOnly) |EAknEditorFlagUseSCTNumericCharmap;
-
- // Always disable T9 input for goto url
- editorFlags = (editorFlags | EAknEditorFlagNoT9);
-
- iEditor->SetAknEditorFlags( editorFlags );
-
- iEditor->SetAknEditorPermittedCaseModes ( EAknEditorUpperCase |
- EAknEditorLowerCase );
-
- iGotoKeyHandled = new (ELeave) CBrowserKeyEventHandled( *this );
- iAvkonAppUi->AddToStackL( iGotoKeyHandled,
- ECoeStackPriorityFep + 1,
- ECoeStackFlagRefusesFocus );
- iEditor->SetEdwinObserver( iGotoKeyHandled );
- iEditor->SetSkinBackgroundControlContextL(NULL);
-
- TBool searchFeature = iContentView->ApiProvider().Preferences().SearchFeature();
- if ( searchFeature && !iFindKeywordMode )
- {
- iDefaultSearchText = StringLoader::LoadL( R_IS_WEB_SEARCH );
- ConstructSearchPaneL();
- }
-
- //adaptive popuplist
- if ( aPopupListStatus && AUTOCOMP )
- {
- iBAdaptiveListPopup =
- new (ELeave) CBrowserAdaptiveListPopup( iEditor, this, EGotoPane, searchFeature );
- iBAdaptiveListPopup->ConstructL();
- iEditor->SetObserver( iBAdaptiveListPopup );
- if (iContentView)
- {
- iBAdaptiveListPopup->SetUrlSuffixList(iContentView->ApiProvider().Preferences().URLSuffixList());
- iBAdaptiveListPopup->SetMaxRecentUrls(iContentView->ApiProvider().Preferences().MaxRecentUrls());
- }
- }
-
- CCoeEnv::Static()->AddFepObserverL(static_cast<MCoeFepObserver &>(*this));
- iPrevKeyword = KNullDesC().AllocL();
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::SetOrdinalPosition
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::SetOrdinalPosition( TInt aPos )
- {
- Window().SetOrdinalPosition( aPos );
- if ( iBAdaptiveListPopup )
- {
- iBAdaptiveListPopup->SetOrdinalPosition( aPos );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::HandleFindSizeChanged
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::HandleFindSizeChanged()
- {
-
- if ( iSearchEditor && !iFindKeywordMode)
- {
- TRect clientRect = CBrowserAppUi::Static()->ClientRect();
- TAknWindowLineLayout findWindow = AknLayout::popup_find_window();
-
- TRect findWindowRect = AknLayoutUtils::RectFromCoords( clientRect,findWindow.il, findWindow.it,
- findWindow.ir, findWindow.ib, findWindow.iW, findWindow.iH);
-
- // Now Increase the height of rect to make room for two editors (Goto + search)//
- findWindowRect.iTl.iY -= ( findWindow.iH );
- SetRect( findWindowRect );
- }
-
- else if ( !AknLayoutUtils::PenEnabled() )
- {
-
- TRect parentrect = iAvkonAppUi->ApplicationRect();
-
- TAknLayoutRect lrect;
- lrect.LayoutRect( parentrect,
- AknLayout::main_pane( CBrowserAppUi::Static()->ApplicationRect(), 0, 1, 1 )
- );
- AknLayoutUtils::LayoutControl ( this,
- lrect.Rect(),
- AknLayout::popup_find_window() );
- }
- else if( AknLayoutUtils::PenEnabled() )
- {
- // The ClientRect() will be the application rectangle minus any
- // toolbars/menu bars etc.
- AknLayoutUtils::LayoutControl ( this,
- CBrowserAppUi::Static()->ClientRect(),
- AknLayout::popup_find_window() );
- }
-
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::EnableKeyEventHandler
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::EnableKeyEventHandlerL( TBool aEnable )
- {
- iGotoKeyHandled->EnableL( aEnable );
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::HandleControlEventL
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::HandleControlEventL ( CCoeControl* /*aControl*/,
- TCoeEvent aEventType )
- {
- if ( iFindKeywordMode )
- {
- if ( iEditor->AknEditorCurrentInputMode() == EAknEditorCalculatorNumberModeKeymap
- // When the user copies and paste's content to the find dialog, the editor
- // is in Text Input mode, The engine should still get the find keyword request
- || iEditor->AknEditorCurrentInputMode() == EAknEditorTextInputMode
- // Also Chinese and Japanese input modes should apply here
- || iEditor->AknEditorCurrentInputMode() == EAknEditorFullWidthKatakanaInputMode
- || iEditor->AknEditorCurrentInputMode() == EAknEditorHiraganaInputMode
- )
- {
- if ( aEventType == MCoeControlObserver::EEventStateChanged )
- {
- HBufC* newText = GetTextL();
- if (!newText)
- {
- newText = KNullDesC().AllocL();
- }
-
- if ( iPrevKeyword->Compare( *newText ) )
- {
- delete iPrevKeyword;
- iPrevKeyword = NULL;
- iPrevKeyword = newText;
- // Find the typed keyword.
- iContentView->FindKeywordL( GetTextL() );
- iHandleFEPFind = EFalse;
- }
- else
- {
- delete newText;
- }
- }
- }
- }
-
- switch (aEventType)
- {
- case EEventRequestFocus:
- {
- FocusChanged( EDrawNow );
- break;
- }
-
- default:
- break;
- }
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::OfferKeyEventL
-// ----------------------------------------------------------------------------
-//
-TKeyResponse CBrowserGotoPane::OfferKeyEventL
-( const TKeyEvent& aKeyEvent, TEventCode aType )
- {
- TKeyResponse resp = EKeyWasNotConsumed;
-
- if ( AknLayoutUtils::PenEnabled()
- && PopupList()
- && PopupList()->DrawableWindow()->OrdinalPosition() > 0 )
- {
- PopupList()->SetOrdinalPosition(0);
- }
-
- if ( aType == EEventKey && aKeyEvent.iCode == EKeyEscape ) // Escape key event handling
- {
- CCoeEnv::Static()->AppUi()->RemoveFromStack( this );
- if ( PopupList() )
- {
- PopupList()->SetDirectoryModeL( ETrue );
- PopupList()->HidePopupL();
- }
- MakeVisible( EFalse ); // Hide Goto pane
- SetFocus( EFalse );
- resp = EKeyWasConsumed; // should set the focus of container to ETrue...how?
- }
-
- if ( iFindKeywordMode )
- {
- if ( iContentView->MenuBar()->MenuPane()->IsVisible() )
- {
- return iContentView->MenuBar()->MenuPane()->OfferKeyEventL( aKeyEvent, aType );
- }
- else
- {
- if ( aType == EEventKey ) // Handle up and down arow keys to search for
- { // next and previous keywords.
-
- if ( aKeyEvent.iCode == EKeyLeftUpArrow // Northwest
- || aKeyEvent.iCode == EStdKeyDevice10 // : Extra KeyEvent supports diagonal event simulator wedge
- || aKeyEvent.iCode == EKeyUpArrow // North
- || aKeyEvent.iCode == EKeyRightUpArrow // Northeast
- || aKeyEvent.iCode == EStdKeyDevice11 ) // : Extra KeyEvent supports diagonal event simulator wedge
- { // Any of those? If so, then...
- iContentView->FindKeywordL( NULL, EFalse ); // Find previous keyword
- iHandleFEPFind = EFalse; // :
- return EKeyWasConsumed; // And that consumes the key
- }
-
- if ( aKeyEvent.iCode == EKeyLeftDownArrow // Southwest
- || aKeyEvent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
- || aKeyEvent.iCode == EKeyDownArrow // South
- || aKeyEvent.iCode == EKeyRightDownArrow // Southeast
- || aKeyEvent.iCode == EStdKeyDevice12 ) // : Extra KeyEvent supports diagonal event simulator wedge
- { // Any of those? If so, then...
- iContentView->FindKeywordL( NULL, ETrue ); // Find next keyword
- iHandleFEPFind = EFalse; // :
- return EKeyWasConsumed; // And that consumes the key
- }
-
- if ( aKeyEvent.iCode == EKeyDevice3 ) // Select key?
- { // If so, then...
- return EKeyWasConsumed; // Ignore select key
- }
-
- }
- return iEditor->OfferKeyEventL( aKeyEvent, aType ); // Otherwise, just pass the key on to the editor
- }
- }
-
- else // *NOT* iFindKeywordMode
- {
-
- if ( aKeyEvent.iCode == EKeyRightUpArrow // Northeast
- || aKeyEvent.iCode == EStdKeyDevice11 // : Extra KeyEvent supports diagonal event simulator wedge
- || aKeyEvent.iCode == EKeyRightDownArrow // Southeast
- || aKeyEvent.iCode == EStdKeyDevice12 // : Extra KeyEvent supports diagonal event simulator wedge
- || aKeyEvent.iCode == EKeyLeftDownArrow // Southwest
- || aKeyEvent.iCode == EStdKeyDevice13 // : Extra KeyEvent supports diagonal event simulator wedge
- || aKeyEvent.iCode == EKeyLeftUpArrow // Northwest
- || aKeyEvent.iCode == EStdKeyDevice10 ) // : Extra KeyEvent supports diagonal event simulator wedge
- { // Any of those? If so, then...
- return EKeyWasConsumed; // Ignore diagonal navigation events here
- }
-
- // For touch UI, handle enter key from VKB as a "GOTO"
- if (AknLayoutUtils::PenEnabled() && aKeyEvent.iCode == EKeyEnter)
- {
- CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneGoTo);
- return EKeyWasConsumed;
- }
- else if ( ((aKeyEvent.iCode == EKeyOK ) || (aKeyEvent.iCode == EKeyEnter))
- && iGPObserver
- && IsFocused() )
- {
- if ( CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->IsVisible() )
- {
- return CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->OfferKeyEventL( aKeyEvent, aType );
- }
- else
- {
- // If there is an observer and we have the focus, enter key is
- // consumed and observer is notified.
- iGPObserver->HandleGotoPaneEventL
- ( this, MGotoPaneObserver::EEventEnterKeyPressed );
- return EKeyWasConsumed;
- }
- }
-
- if ( iSearchEditor && iSearchPaneActive )
- {
- resp = iSearchEditor->OfferKeyEventL( aKeyEvent, aType );
- }
- else
- {
- resp = iEditor->OfferKeyEventL( aKeyEvent, aType );
- }
-
- if ((iBAdaptiveListPopup ) && (resp != EKeyWasConsumed))
- {
- resp = iBAdaptiveListPopup->OfferKeyEventL( aKeyEvent, aType );
- }
-
-
- if ( iSearchEditor )
- {
- if ( ( iGotoPaneActive || iSearchPaneActive)
- && (resp != EKeyWasConsumed) )
- {
-
- if ( aKeyEvent.iCode == EKeyUpArrow )
- {
- resp = EKeyWasConsumed;
- if ( iSearchPaneActive )
- {
- SetGotoPaneActiveL();
-
-#if defined(BRDO_SEARCH_INTEGRATION_FF)
- iEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB );
-#endif
-
- }
- }
- if ( aKeyEvent.iCode == EKeyDownArrow )
- {
- resp = EKeyWasConsumed;
- if ( iGotoPaneActive )
- {
- SetSearchPaneActiveL();
-
-#if defined(BRDO_SEARCH_INTEGRATION_FF)
- iSearchEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB );
-#endif
-
- }
- }
- }
- }
-
- }
-
- return resp;
-
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::HandlePointerEventL
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::HandlePointerEventL(const TPointerEvent& aPointerEvent)
- {
- if ( !AknLayoutUtils::PenEnabled() )
- {
- return;
- }
-
- // ponter is in goto pane
- if (Rect().Contains(aPointerEvent.iPosition))
- {
- iGotoKeyHandled->EnableL(ETrue);
-
- // If search feature exists, check and route to appropriate editor //
- if ( iSearchEditor )
- {
- if ( iSearchInputFrame->Rect().Contains(aPointerEvent.iPosition))
- {
- if ( !iSearchPaneActive )
- {
- SetSearchPaneActiveL();
- }
-#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
- else
- {
-#endif
- iSearchEditor->HandlePointerEventL(aPointerEvent);
-#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
- }
-#endif
-
-#if defined(BRDO_SEARCH_INTEGRATION_FF)
- iSearchEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB);
-#endif
- }
- else
- {
- if ( !iGotoPaneActive )
- {
- SetGotoPaneActiveL();
- }
-#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
- else
- {
-#endif
- iEditor->HandlePointerEventL(aPointerEvent);
-#ifndef BRDO_SINGLE_CLICK_ENABLED_FF
- }
-#endif
-
-#if defined(BRDO_SEARCH_INTEGRATION_FF)
- iEditor->RemoveFlagFromUserFlags( CEikEdwin::EAvkonDisableVKB);
-#endif
- }
- }
- else
- {
- iEditor->HandlePointerEventL(aPointerEvent);
- }
- iGotoKeyHandled->SetFirstKeyEvent(EFalse);
- }
- else
- {
- // pointer outside of control
- if ( iFindKeywordMode )
- {
- CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdFindKeywordPaneClose);
- ResetPrevText();
- }
- else
- {
- CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneCancel);
- }
- }
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::CountComponentControls
-// ----------------------------------------------------------------------------
-//
-TInt CBrowserGotoPane::CountComponentControls() const
- {
- if ( iSearchEditor && !iFindKeywordMode )
- {
- return 4; // iEditor, input frame, SearchEditor and Searchinput frame.
- }
- return 2; // iEditor and input frame
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::ComponentControl
-// ----------------------------------------------------------------------------
-//
-CCoeControl* CBrowserGotoPane::ComponentControl ( TInt aIndex ) const
- {
- switch(aIndex)
- {
- case 0:
- {
- return iInputFrame;
- }
- case 1:
- {
- return iEditor;
- }
- case 2:
- {
- return iSearchInputFrame;
- }
- case 3:
- {
- return iSearchEditor;
- }
-
- default:
- return NULL;
- }
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SizeChanged
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::SizeChanged()
- {
- if (iSearchEditor && !iFindKeywordMode )
- {
- // We need height and width of FindWindow
- TAknWindowLineLayout findWindow = AknLayout::popup_find_window();
- TRect findWindowRect = AknLayoutUtils::RectFromCoords( Rect(), findWindow.il,
- findWindow.it, findWindow.ir, findWindow.ib, findWindow.iW, findWindow.iH);
-
- TSize gotoSize( findWindowRect.Size() );
- TRect gotoRect( TPoint( 0,0 ), gotoSize );
- iInputFrame->SetRect( gotoRect );
-
- // Now set SearchPane right below GoTo pane //
- TRect searchRect( TPoint( 0, gotoRect.iBr.iY ), gotoSize );
- iSearchInputFrame->SetRect( searchRect );
- }
- else
- {
- iInputFrame->SetRect( Rect() );
- }
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::FocusChanged
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::FocusChanged( TDrawNow aDrawNow )
- {
- // this is a workaround
- TRAP_IGNORE( iGotoKeyHandled->EnableL( IsFocused() ) );
- CCoeControl::FocusChanged( aDrawNow );
- if ( iGotoPaneActive )
- {
- iEditor->SetFocus( IsFocused() );
- }
- else if ( iSearchEditor && !iFindKeywordMode && iSearchPaneActive )
- {
- iSearchEditor->SetFocus( IsFocused() );
- }
- }
-
-
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::TextLength
-// ----------------------------------------------------------------------------
-//
-TInt CBrowserGotoPane::SearchTextLength() const
- {
- TInt len = 0;
- if ( iSearchEditor )
- {
- len = iSearchEditor->TextLength();
- }
- return len;
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::TextLength
-// ----------------------------------------------------------------------------
-//
-TInt CBrowserGotoPane::TextLength() const
- {
- return iEditor->TextLength();
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::GetText
-// ----------------------------------------------------------------------------
-//
-HBufC* CBrowserGotoPane::GetTextL() const
- {
- HBufC *retVal = NULL;
-
- if ( TextLength()
- || SearchTextLength()
- || iFindKeywordMode)
- {
- if ( iSearchEditor && iSearchPaneActive )
- {
- retVal = HBufC::NewL( SearchTextLength() + 1 );
- }
- else
- {
- retVal = HBufC::NewL( TextLength() + 1 );
- }
- TPtr ptr = retVal->Des();
- if ( iSearchEditor && iSearchPaneActive )
- {
- iSearchEditor->GetText( ptr );
- }
- else
- {
- iEditor->GetText( ptr );
- }
- ptr.ZeroTerminate();
- if ( !iFindKeywordMode && !iSearchPaneActive )
- {
- Util::EncodeSpaces(retVal);
- }
- }
-
- return retVal;
- }
-
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SetSearchTextL
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::SetSearchTextL( const TDesC& aTxt )
- {
- // for search pane, no default text
- if ( aTxt == KHttpString || aTxt == KWWWString)
- {
- iSearchEditor->SetTextL( &KNullDesC );
- }
- else
- {
- iSearchEditor->SetTextL( &aTxt );
- }
- TInt curPos = SearchTextLength();
- // Cursor to end, no selection.
- iSearchEditor->SetSelectionL( curPos, curPos );
- iSearchEditor->DrawNow();
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SetTextL
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::SetTextL( const TDesC& aTxt )
- {
- iEditor->SetTextL( &aTxt );
- TInt curPos = TextLength();
- // Cursor to end, no selection.
- iEditor->SetSelectionL( curPos, curPos );
- iEditor->DrawNow();
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SelectAllL
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::SelectAllL()
- {
- if ( iSearchEditor && iSearchPaneActive )
- {
- iSearchEditor->SelectAllL();
- }
- else
- {
- iEditor->SelectAllL();
- }
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SetInfoTextL
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::SetInfoTextL( const TDesC& aText )
- {
- iInputFrame->SetInfoTextL( aText );
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::ClipboardL
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::ClipboardL( CEikEdwin::TClipboardFunc aClipboardFunc )
- {
- iEditor->ClipboardL( aClipboardFunc );
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::Editor
-// ----------------------------------------------------------------------------
-CEikEdwin* CBrowserGotoPane::Editor() const
- {
- return iEditor;
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SetGPObserver
-// ----------------------------------------------------------------------------
-//
-void CBrowserGotoPane::SetGPObserver( MGotoPaneObserver* aObserver )
- {
- __ASSERT_DEBUG( !iGPObserver, \
- Util::Panic( Util::EGotoPaneObserverAlreadySet ) );
- iGPObserver = aObserver;
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserKeyEventHandled::CBrowserKeyEventHandled
-// ----------------------------------------------------------------------------
-//
-CBrowserKeyEventHandled::CBrowserKeyEventHandled(
- CBrowserGotoPane& aGotoPane ) :
- iEnabled( EFalse )
- ,iFirstKeyEvent( ETrue )
- ,iLeftRightEvent ( EFalse )
- ,iGotoPane( aGotoPane )
- {
- }
-
-
-// ----------------------------------------------------------------------------
-// CBrowserKeyEventHandled::OfferKeyEventL
-// ----------------------------------------------------------------------------
-//
-TKeyResponse
- CBrowserKeyEventHandled::OfferKeyEventL( const TKeyEvent& aKeyEvent,
- TEventCode aType)
- {
- TKeyResponse response( EKeyWasNotConsumed );
- iLeftRightEvent = EFalse;
-
- if ( iEnabled && aType == EEventKey )
- {
- switch( aKeyEvent.iCode )
- {
- case EKeyUpArrow:
- case EKeyDownArrow:
- {
- iFirstKeyEvent = EFalse;
- break;
- }
-
- case EKeyLeftArrow:
- case EKeyRightArrow:
- {
- iFirstKeyEvent = EFalse;
- iLeftRightEvent = ETrue;
-
- // Below added to compensate for a weird key event situation:
- // For some reason the CBrowserGotoPane::OfferKeyEventL function
- // is not being called for an EEventKey when you press the left/right
- // arrows in the menupane produced to paste previously used special
- // chars (this is brought up by pressing the pen button on the phone).
- // This only happens when the cursor is in the first or last position in
- // the goto pane with text in it.
- // Therefore, in this particular scenario, we need to process the EEventKey
- // here since we will not be able to in CBrowserGotoPane::OfferKeyEventL
- if (CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->IsFocused())
- {
- response = CBrowserAppUi::Static()->ContentView()->MenuBar()->MenuPane()->OfferKeyEventL( aKeyEvent, aType );
- }
- break;
- }
-
- case EKeyBackspace:
- case EKeyDelete:
- {
- if ( iFirstKeyEvent )
- {
- iFirstKeyEvent = EFalse;
- iCoeEnv->SimulateKeyEventL( aKeyEvent, aType );
- response = EKeyWasConsumed;
- }
- break;
- }
-
- default:
- {
- if ( iFirstKeyEvent )
- {
- if ( TChar( aKeyEvent.iCode ).IsPrint() )
- {
- iFirstKeyEvent = EFalse;
- response = EKeyWasConsumed;
- iCoeEnv->SimulateKeyEventL( aKeyEvent, aType );
- }
- }
- break;
- }
- }
-// CBrowserAppUi::Static()->UpdateCbaL();
- }
- return response;
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserKeyEventHandled::HandleEdwinEventL
-// ----------------------------------------------------------------------------
-//
-void CBrowserKeyEventHandled::HandleEdwinEventL( CEikEdwin* /*aEdwin*/,
- TEdwinEvent aEventType )
- {
- // if text changed in the editor we don't have to handle clear key anymore
- if ( aEventType == EEventTextUpdate )
- {
- iFirstKeyEvent = EFalse;
- }
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserKeyEventHandled::EnableL
-// ----------------------------------------------------------------------------
-//
-void CBrowserKeyEventHandled::EnableL( TBool aEnable )
- {
- iEnabled = aEnable;
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserKeyEventHandled::Reset
-// ----------------------------------------------------------------------------
-//
-void CBrowserKeyEventHandled::Reset()
- {
- iFirstKeyEvent = ETrue;
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::PopupList
-// ---------------------------------------------------------------------------
-//
-CBrowserAdaptiveListPopup* CBrowserGotoPane::PopupList()
- {
- return iBAdaptiveListPopup;
- }
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::HandleResourceChange
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::HandleResourceChange(
- TInt
- aType
- )
- {
- CCoeControl::HandleResourceChange( aType );
-
- if ( iBAdaptiveListPopup )
- {
- iBAdaptiveListPopup->HandleResourceChange( aType );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::HandleStartOfTransactionL()
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::HandleStartOfTransactionL()
- {
- }
-
-// ---------------------------------------------------------------------------
-// CBrowserGotoPane::HandleCompletionOfTransactionL()
-// ---------------------------------------------------------------------------
-//
-void CBrowserGotoPane::HandleCompletionOfTransactionL()
- {
- if ( iContentView && iFindKeywordMode && this->IsVisible() &&
- !iContentView->MenuBar()->MenuPane()->IsVisible() )
- {
- if ( GetTextL() )
- {
- // Find the typed keyword.
- if ( iHandleFEPFind && iPrevKeyword->Compare(GetTextL()->Des()) )
- {
- iContentView->FindKeywordL( GetTextL() );
- }
- }
- }
- iHandleFEPFind = ETrue;
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::ActivateVKB
-// ----------------------------------------------------------------------------
-void CBrowserGotoPane::ActivateVKB()
- {
- if ( ( iEditor && iEditor->TextView() )
- || ( iSearchEditor && iSearchEditor->TextView()) )
- {
- // make sure observer is set
- iCoeEnv->SyncNotifyFocusObserversOfChangeInFocus();
-
- // simulate pointer event to force VKB
-
- // first get point at cursor location
- TInt pos = 0;
- CTextView* textView = NULL;
- if ( iSearchEditor && iSearchPaneActive )
- {
- pos = iSearchEditor->CursorPos();
- textView = iSearchEditor->TextView();
- }
- else
- {
- pos = iEditor->CursorPos();
- textView = iEditor->TextView();
- }
-
- TPoint curPos;
- textView->DocPosToXyPosL(pos, curPos);
-
- TPointerEvent pe;
- pe.iPosition = curPos;
-
- pe.iType = TPointerEvent::EButton1Down;
-
- TInt err(KErrNone);
- if ( iSearchEditor && iSearchPaneActive )
- {
- TRAP(err, iSearchEditor->HandlePointerEventL(pe));
- }
- else
- {
- TRAP(err, iEditor->HandlePointerEventL(pe));
- }
-
- if (err != KErrNone)
- {
- return;
- }
-
- pe.iType = TPointerEvent::EButton1Up;
-
- // VKB will only activate is nothing selected
- if ( iSearchEditor && iSearchPaneActive )
- {
- iSearchEditor->SetSelectionL(pos,pos);
- TRAP_IGNORE(iSearchEditor->HandlePointerEventL(pe));
- }
- else
- {
- iEditor->SetSelectionL(pos,pos);
- TRAP_IGNORE(iEditor->HandlePointerEventL(pe));
- }
-#ifdef BRDO_SINGLE_CLICK_ENABLED_FF
- TRAP_IGNORE(SelectAllL());
-#endif
- }
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::ConstructSearchPaneL
-// ----------------------------------------------------------------------------
-void CBrowserGotoPane::ConstructSearchPaneL()
- {
-
- TFileName iconFile;
- TInt iconId = iContentView->ApiProvider().Preferences().GetIntValue( KBrowserSearchIconId );
- iContentView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchIconPath, KMaxFileName, iconFile );
-
- // If Icon File Path Changed or Icon Id Changed, Refresh the Icon for Search Pane.
- // Comparing Icon File path as well, because it may be possible that two different
- // Icon files have same icon id.
- if ( iconId != iSearchIconId
- || iSearchIconFilePath.Compare( iconFile ) != 0 )
- {
-
- TInt iconMaskId = iContentView->ApiProvider().Preferences().GetIntValue( KBrowserSearchIconMaskId );
- // Save IconId
- iSearchIconId = iconId;
- // Save Icon File
- iSearchIconFilePath = iconFile;
-
- // No Icon file or IconId or IconMaskId set , then it means no search provider is still
- // selected and set by search application, in that case we use the default icon for Search.
- if ( ! iconFile.Length()
- || iconId == -1
- || iconMaskId == -1 )
- {
- iconId = EMbmAvkonQgn_indi_find_glass;
- iconMaskId = EMbmAvkonQgn_indi_find_glass_mask;
- iconFile = KAvkonBitmapFile;
- }
-
-
- if ( iSearchEditor )
- {
- delete iSearchEditor;
- iSearchEditor = NULL;
- }
-
- if ( iSearchInputFrame )
- {
- delete iSearchInputFrame;
- iSearchInputFrame = NULL;
- }
-
-
- // iSearchEditor != NULL, implies presence of Search Feature, which can be
- // used to validate search feature exsistence, avoiding unecessary feature
- // check calls and need of separate variable.
- iSearchEditor = new (ELeave) CEikGlobalTextEditor;
- iSearchInputFrame = CAknInputFrame::NewL(
- iSearchEditor,
- EFalse,
- iconFile,
- iconId,
- iconMaskId,
- CAknInputFrame::EPopupLayout );
-
- iSearchInputFrame->SetContainerWindowL( *this);
- AknEditUtils::ConstructEditingL ( iSearchEditor,
- KFavouritesMaxUrlGotoPaneDefine,
- 1,
- EAknEditorCharactersLowerCase,
- EAknEditorAlignRight,
- EFalse,
- ETrue,
- EFalse );
-
- iSearchEditor->SetContainerWindowL( *this );
- iSearchEditor->SetObserver( this );
- iSearchEditor->SetBorder( TGulBorder::ENone );
- iSearchEditor->SetAknEditorCase( EAknEditorLowerCase );
- iSearchEditor->SetAknEditorInputMode( EAknEditorTextInputMode );
-
- if (AVKONAPAC)
- {
- // Disallow chinese input.
- iSearchEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode |
- EAknEditorNumericInputMode );
- }
-
- //Search should use EAknEditorFlagDefault as search allows all types of input
- iSearchEditor->SetAknEditorFlags
- ( EAknEditorFlagDefault | EAknEditorFlagUseSCTNumericCharmap );
-
- iSearchEditor->SetAknEditorPermittedCaseModes ( EAknEditorUpperCase |
- EAknEditorLowerCase );
-
- iSearchEditor->SetEdwinObserver( iGotoKeyHandled );
- iSearchEditor->SetSkinBackgroundControlContextL(NULL);
- iSearchEditor->MakeVisible( ETrue );
- iSearchInputFrame->MakeVisible( ETrue );
- // Set the default text if not active//
- if ( ! iSearchPaneActive )
- {
- HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
- TPtr searchProviderPtr = searchProvider->Des();
- iContentView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
- KMaxTitleLength , searchProviderPtr);
- if( searchProvider->Length() == 0 )
- {
- SetSearchTextL( *iDefaultSearchText );
- }
- else
- {
- SetSearchTextL( *searchProvider );
- delete iDefaultSearchText;
- iDefaultSearchText = NULL;
- iDefaultSearchText = searchProvider->AllocL();
- }
- CleanupStack::PopAndDestroy(searchProvider);
- }
- iSearchInputFrame->ActivateL();
- }
-
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SetGotoPaneActive
-// ----------------------------------------------------------------------------
-void CBrowserGotoPane::SetGotoPaneActiveL()
- {
-
- iGotoPaneActive = ETrue;
- iSearchPaneActive = EFalse;
-
- if ( iSearchEditor )
- {
-#if defined(BRDO_SEARCH_INTEGRATION_FF)
- iEditor->AddFlagToUserFlags( CEikEdwin::EAvkonDisableVKB );
-#endif
- // if searchpane is empty add default text
- if ( !SearchTextLength() )
- {
- HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength );
- TPtr searchProviderPtr = searchProvider->Des();
- iContentView->ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle,
- KMaxTitleLength , searchProviderPtr);
- if( searchProvider->Length() == 0 )
- {
- SetSearchTextL( *iDefaultSearchText );
- }
- else
- {
- SetSearchTextL( *searchProvider );
- }
- CleanupStack::PopAndDestroy(searchProvider);
- }
-
- // if gotopane is empty add default text
- if ( !TextLength() )
- {
- SetTextL( KWWWString );
- }
-
- iSearchEditor->SetFocus( EFalse);
- }
-
- iEditor->SetFocus( ETrue );
- CBrowserAppUi::Static()->UpdateCbaL();
- SetTextModeItalicL();
- iEditor->SetCursorPosL(iEditor->TextLength(), EFalse);
- DrawDeferred();
- }
-
-// ----------------------------------------------------------------------------
-// CBrowserGotoPane::SetSearchPaneActive
-// ----------------------------------------------------------------------------
-void CBrowserGotoPane::SetSearchPaneActiveL()
- {
-
- if ( iSearchEditor )
- {
-#if defined(BRDO_SEARCH_INTEGRATION_FF)
- iSearchEditor->AddFlagToUserFlags( CEikEdwin::EAvkonDisableVKB );
-#endif
- // if gotopane is empty add default text
- if ( !TextLength() )
- {
- SetTextL( KWWWString );
- }
-
- // if searchpane has default text remove it
- HBufC* text = iSearchEditor->GetTextInHBufL();
- if ( text )
- {
- CleanupStack::PushL( text );
- if ( !text->Compare( iDefaultSearchText->Des() ) )
- {
- SetSearchTextL( KNullDesC );
- }
-
- CleanupStack::PopAndDestroy( text );
- }
-
- iSearchPaneActive = ETrue;
- iGotoPaneActive = EFalse;
- iEditor->SetFocus( EFalse );
- if ( iBAdaptiveListPopup )
- iBAdaptiveListPopup->HidePopupL();
- iSearchEditor->SetFocus( ETrue );
- iSearchEditor->SetCursorPosL(iSearchEditor->TextLength(), EFalse);
- CBrowserAppUi::Static()->UpdateCbaL();
-
- SetTextModeItalicL();
- DrawDeferred();
- }
- }
-
-
-// ----------------------------------------------------------------------------
-// CBrowserBookmarksGotoPane::SetTextModeItalic
-// ----------------------------------------------------------------------------
-void CBrowserGotoPane::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.
- if ( iSearchEditor )
- {
- TAknTextComponentLayout editorLayout;
- TBool apac( AknLayoutUtils::Variant() == EApacVariant && ( CAknInputFrame::EShowIndicators ) );
- editorLayout = AknLayoutScalable_Avkon::input_popup_find_pane_t1( apac ? 2 : 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* charFormatLayerItalics = NULL;
- CCharFormatLayer* charFormatLayerUpright = NULL;
- charFormatLayerItalics = CCharFormatLayer::NewL(charFormat,charFormatMask);
- charFormat.iFontSpec.iFontStyle.SetPosture( EPostureUpright );
- charFormatLayerUpright = CCharFormatLayer::NewL(charFormat,charFormatMask);
- if ( iSearchPaneActive )
- {
- iSearchEditor->SetCharFormatLayer(charFormatLayerUpright);
- iEditor->SetCharFormatLayer(charFormatLayerItalics);
- }
- else
- {
- iSearchEditor->SetCharFormatLayer(charFormatLayerItalics);
- iEditor->SetCharFormatLayer(charFormatLayerUpright);
- }
- }
- }
-
-void CBrowserGotoPane::ResetPrevText()
- {
- iPrevKeyword->Des().SetLength(0);
- }
-
-// END OF FILE