diff -r 4baee4f15982 -r 6385c4c93049 browserui/browser/BrowserAppSrc/BrowserGotoPane.cpp --- 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "CommonConstants.h" -#include "BrowserGotoPane.h" -#include "BrowserAppUi.h" -#include "BrowserUtil.h" -#include "browser.hrh" -#include -#include "BrowserAdaptiveListPopup.h" -#include "BrowserContentView.h" - -#include "eikon.hrh" - -#include - -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(*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(*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