diff -r 6385c4c93049 -r 8e6fa1719340 browserui/browser/FavouritesSrc/BrowserBookmarksContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserui/browser/FavouritesSrc/BrowserBookmarksContainer.cpp Wed Sep 01 12:31:04 2010 +0100 @@ -0,0 +1,888 @@ +/* +* 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 CBrowserBookmarksContainer. +* +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include +#include +#include +#include "BrowserBookmarksView.h" + +#include "CommonConstants.h" +#include "BrowserFavouritesView.h" +#include "BrowserBookmarksContainer.h" +#include "BrowserBookmarksGotoPane.h" +#include "BrowserFavouritesListbox.h" +#include "BrowserUtil.h" +#include "BrowserAppUi.h" +#include "BrowserBookmarksListboxIconHandler.h" +#ifdef __SERIES60_HELP +// Context-Sensitve Help File +#include "BrowserApplication.h" +#include +#endif // __SERIES60_HELP +#include "Logger.h" +#include +#include +#include + +// CONSTANTS + +/// Tab index for Bookmarks View. +LOCAL_D const TInt KBookmarkTabIndex = 0; +const TInt KMaxTitleLength = 512; + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::NewL +// --------------------------------------------------------- +// +CBrowserBookmarksContainer* CBrowserBookmarksContainer::NewL( + const TRect& aRect, + CBrowserFavouritesView& aView) + { + CBrowserBookmarksContainer* container = + new (ELeave) CBrowserBookmarksContainer; + CleanupStack::PushL( container ); + container->ConstructL( aRect, aView ); + CleanupStack::Pop(); // container + return container; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::~CBrowserBookmarksContainer +// --------------------------------------------------------- +// +CBrowserBookmarksContainer::~CBrowserBookmarksContainer() + { + delete iGotoPane; + delete iSearchPane; + delete iDefaultSearchText; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::SetGotoActiveL +// --------------------------------------------------------- +// +void CBrowserBookmarksContainer::SetGotoActiveL() + { + if( !iGotoPaneActive) + { + iGotoPaneActive = ETrue; + + Listbox()->UpdateFilterL(); + if( iSearchPane ) + { + iGotoPane->SetVKBFlag( EFalse ); + // Check for Search Configuration Changes // + if( View().ApiProvider().Preferences().GetIntValue( KBrowserSearchIconId ) + != iSearchIconId ) + { + ConstructSearchPaneL(); + } + + iSearchPane->SetFocus( EFalse ); + // only one editor can be active at a time // + iSearchPaneActive = EFalse; + // we still need to display search, when showing for first time // + iSearchPane->MakeVisible(ETrue); + iSearchPane->CancelEditingL(); + } + + // redraw + SizeChanged(); + + // It is important to set the Text and Italic property after SizeChanged, because + // iInputFrame->SetRect() event on GoTo/Search Pane calls the scalable version + // ( AknLayoutUtils::LayoutEdwinScalable ) which overwrites all the properties for + // Char and Para Formats. + if( iSearchPane ) + { + iSearchPane->SetTextModeItalicL(); + HBufC* text = iSearchPane->GetTextL(); + CleanupStack::PushL( text ); + if ( !text->Length() ) + { + //TODO: read possible title valu from cenrep, if not found seyt the default text + HBufC* searchProvider = HBufC::NewLC( KMaxTitleLength ); + TPtr searchProviderPtr = searchProvider->Des(); + + View().ApiProvider().Preferences().GetStringValueL( KBrowserSearchProviderTitle, + KMaxTitleLength , searchProviderPtr); + if( searchProvider->Length() == 0 ) + { + iSearchPane->SetTextL( *iDefaultSearchText ); + } + else + { + iSearchPane->SetTextL( searchProviderPtr ); + } + CleanupStack::PopAndDestroy(searchProvider); + + } + CleanupStack::PopAndDestroy( text ); + } + + iGotoPane->BeginEditingL(); + DrawDeferred(); + } + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::SetSearchActiveL +// --------------------------------------------------------- +// +void CBrowserBookmarksContainer::SetSearchActiveL() + { + if( ! iSearchPaneActive ) + { + // Check for Search Configuration Changes // + if( View().ApiProvider().Preferences().GetIntValue( KBrowserSearchIconId ) + != iSearchIconId ) + { + ConstructSearchPaneL(); + } + + iSearchPane->SetVKBFlag( EFalse ); + iSearchPane->SetFocus( ETrue ); + iSearchPaneActive = ETrue; + + Listbox()->UpdateFilterL(); + // only one editor can be active at a time + iGotoPaneActive = EFalse; + iGotoPane->MakeVisible(ETrue); + iGotoPane->SetFocus( EFalse ); + iGotoPane->CancelEditingL(); + + // redraw + SizeChanged(); + + // Not Focused, so set the current Text Mode to italics. + iGotoPane->SetTextModeItalicL(); + // if gotopane is empty add default text + HBufC* text = iGotoPane->GetTextL(); + CleanupStack::PushL( text ); + if ( !text->Length() ) + { + iGotoPane->SetTextL( KWWWString ); + } + CleanupStack::PopAndDestroy( text ); + + iSearchPane->BeginEditingL(); + DrawDeferred(); + } + + } + + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::SetGotoInactiveL(); +// --------------------------------------------------------- +// + +void CBrowserBookmarksContainer::SetGotoInactiveL() + { + if( iGotoPaneActive || iSearchPaneActive ) + { + + if( iSearchPane ) + { + /* In Search Feature we have to move between the editors preserving the + * text added, clear the text when cancel is pressed. + */ + iGotoPane->SetTextL( KNullDesC , ETrue ); + SetSearchInactiveL(); + } + // Deactivate GoTo Pane + iGotoPaneActive = EFalse; + + // Deactivate GoTo Pane + iGotoPane->MakeVisible( EFalse ); + iGotoPane->CancelEditingL(); + iGotoPane->SetFocus( EFalse ); + + // redraw + Listbox()->UpdateFilterL(); + SizeChanged(); + DrawDeferred(); + } + } + +void CBrowserBookmarksContainer::SetSearchInactiveL() + { + iSearchPaneActive = EFalse; + iSearchPane->SetTextL( KNullDesC , ETrue); + iSearchPane->MakeVisible( EFalse ); + iSearchPane->CancelEditingL(); + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::CountComponentControls +// --------------------------------------------------------- +// +TInt CBrowserBookmarksContainer::CountComponentControls() const + { + return (Listbox() ? 1 : 0) + (iGotoPane ? 1 : 0) + (iSearchPane? 1 : 0) ; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::ComponentControl +// --------------------------------------------------------- +// +CCoeControl* CBrowserBookmarksContainer::ComponentControl +( TInt aIndex ) const + { + switch (aIndex) + { + case 0: + { + return Listbox(); + } + + case 1: + { + return iGotoPane; + } + case 2: + { + return iSearchPane; + } + default: + { + return NULL; + } + } + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::SizeChanged +// --------------------------------------------------------- +// +void CBrowserBookmarksContainer::SizeChanged() + { + TRect rect = Rect(); + TInt unfilteredNumberOfItems = Listbox()->UnfilteredNumberOfItems(); + + // if goto pane is active + if( iGotoPaneActive || iSearchPaneActive ) + { + if( iSearchPane ) + { + TAknWindowLineLayout findPane = AknLayout::find_pane(); + + // Enable / disable line in Goto Pane (hide if listbox is empty). + iGotoPane->SetLineState( unfilteredNumberOfItems > 0 ); + + TAknWindowLineLayout listLayout = AknLayout::list_gen_pane( 1 ); + + TRect listBoxRect = AknLayoutUtils::RectFromCoords( rect,listLayout.il, + listLayout.it, listLayout.ir, listLayout.ib, listLayout.iW, listLayout.iH); + + /* Now we need to make room for both Goto and Search Pane. + * No layout specification was suitable for this case, so + * substracting the height of pane. + */ + listBoxRect.iBr.iY -= findPane.iH; + + // In Goto Mode, the listbox is laid out leaving space for Goto Pane. + Listbox()->SetRect( listBoxRect ); + + + // Now Lay out Search Pane as if it was the old Find Pane. + AknLayoutUtils::LayoutControl( iSearchPane, rect, findPane ); + + TRect gotoRect = AknLayoutUtils::RectFromCoords( rect,findPane.il, findPane.it, + findPane.ir, findPane.ib, findPane.iW, findPane.iH); + + // Calculate the new position for GoToPane. + gotoRect.iTl.iY -= ( findPane.iH ); + gotoRect.iBr.iY -= ( findPane.iH ); + iGotoPane->SetRect( gotoRect ); + + } + else + { + // Enable / disable line in Goto Pane (hide if listbox is empty). + iGotoPane->SetLineState( unfilteredNumberOfItems > 0 ); + + // In Goto Mode, the listbox is laid out leaving space for Goto Pane. + AknLayoutUtils::LayoutControl( Listbox(), rect, AknLayout::list_gen_pane( 1 )); + + // Lay out Goto Pane as if it was the old Find Pane. + AknLayoutUtils::LayoutControl( iGotoPane, rect, AknLayout::find_pane() ); + } + } + else + { + // Fall back upon default behavior in base-class, which lays out the bookmarks list only + CBrowserFavouritesContainer::SizeChanged(); + } + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::OfferKeyEventL +// --------------------------------------------------------- +// +TKeyResponse CBrowserBookmarksContainer::OfferKeyEventL +( const TKeyEvent& aKeyEvent, TEventCode aType ) + { +/* +LOG_ENTERFN( "BookmarksContainer::OfferKeyEventL" ); +BROWSER_LOG( ( _L("aType: %d, aKeyEvent.iCode: %d, iScanCode: %d, iRepeats: %d"), + aType, aKeyEvent.iCode, aKeyEvent.iScanCode, aKeyEvent.iRepeats ) ); +*/ + TKeyResponse result = EKeyWasNotConsumed; + TKeyEvent keyEvent( aKeyEvent ); + + // Selection Key handling + if( keyEvent.iScanCode == EStdKeyDevice3 ) + { + // it is possible to activate BookmarksView from ContentView + // via a long press of Selection key, so here we must capture + // the KeyDown. Long press processing will be done only if key + // was pressed originally in this view. + if( aType == EEventKeyDown ) + { + iSelectionKeyDownPressed = ETrue; + result = EKeyWasConsumed; + } + else if( aType == EEventKeyUp ) + { + if( !iSelectionKeyLongPress && iSelectionKeyDownPressed ) + { + // short press of Selection key, pass it to GotoPane + keyEvent.iCode = EKeyOK; + result = EKeyWasNotConsumed; + } + else + { + // long press of Selection key was already processed + result = EKeyWasConsumed; + } + iSelectionKeyDownPressed = EFalse; + iSelectionKeyLongPress = EFalse; + } + else if( aType == EEventKey ) + { + if( keyEvent.iRepeats && iSelectionKeyDownPressed ) + { + const CFavouritesItem* item = Listbox()->CurrentItem(); + if ( item ) + { + // The option for the user to download the page in new window is disabled + CBrowserAppUi::Static()->FetchBookmarkL( *item ); + } + iSelectionKeyLongPress = ETrue; + iSelectionKeyDownPressed = EFalse; + } + + 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. + result = EKeyWasNotConsumed; + } + else + { + result = EKeyWasConsumed; + } + } + } + + // If the Goto Pane exists and we're not fetching, decide + // if we should pass key event to the goto pane + if ( iGotoPane && ( !CBrowserAppUi::Static()->Fetching() || iGotoPaneActive ) ) + { + // If the key hadn't been consumed, so far, determine if the keystroke + // should be handled by goto pane + if ( ( result == EKeyWasNotConsumed ) || iSearchPaneActive ) + { + // Goto pane has highest priority; if it's active, arrow keys go there. + // If fetching is in progress, no key events are offered, to prevent it + // from getting the focus and popping up a new CBA. + + // Enter Key now handled through HandleCommand in BrowserBookmarksView like MSK + // This change affects the enter key on the QWERTY keyboard when we run emulator + if ( EStdKeyEnter == aKeyEvent.iScanCode && EEventKey == aType && + AknLayoutUtils::MSKEnabled() && + ( iGotoPaneActive || iSearchPaneActive ) ) + { + // Handle MSK press + CEikButtonGroupContainer* myCba = CEikButtonGroupContainer::Current(); + if ( myCba != NULL ) + { + TInt cmdId = myCba->ButtonGroup()->CommandId(CEikButtonGroupContainer::EMiddleSoftkeyPosition); + View().HandleCommandL(cmdId); + result = EKeyWasConsumed; + } + } + else + { + if ( iSearchPane && iSearchPaneActive) + { + // Process separately for Search Feature + if ( iGotoPaneActive ) + { + result = iGotoPane->OfferKeyEventL( keyEvent, aType ); + } + else + { + result = iSearchPane->OfferKeyEventL( keyEvent, aType ); + } + } + else + { + if ( iGotoPaneActive ) + { + // Once activated let goto pane handle all the keys + result = iGotoPane->OfferKeyEventL( keyEvent, aType ); + } + else // if ( !iGotoPaneActive ) + { + // Only a valid digit or character should popup the goto pane. + // We will ignore h/w key events, i.e. camera cover, camera + // shutter, zoom, etc... iCode is only valid for EEventKey, + // not EEventKeyDown, so we have to use iScanCode. because + // the goto pane decides to popup on EEventKeyDown. Use + // upper case of iScanCode since there is no overlap of + // h/w scan codes and uppercase letters. + TChar inputCharCode( aKeyEvent.iScanCode ); + TBool isDigit = inputCharCode.IsDigit(); + TUint upperCase = inputCharCode.GetUpperCase(); + if ( isDigit || + (( upperCase >= 0x41 /*A*/ ) && ( upperCase <= 0x5A /*Z*/ )) ) + { + // Valid digit or character was entered, let goto pane + // determine if it handles the keys from here on. + result = iGotoPane->OfferKeyEventL( aKeyEvent, aType ); + if ( result == EKeyWasConsumed ) + { + // goto pane is not active, make it active now + SetGotoActiveL(); + } + } + } + } + } + } + + if ( iSearchPane ) + { + if ( ( iGotoPaneActive || iSearchPaneActive) && + result == EKeyWasNotConsumed ) + { + + if ( aKeyEvent.iCode == EKeyUpArrow ) + { + result = EKeyWasConsumed; + if ( iSearchPaneActive ) + { + SetGotoActiveL(); + iGotoPane->SetVKBFlag( ETrue ); + } + } + + if ( aKeyEvent.iCode == EKeyDownArrow ) + { + result = EKeyWasConsumed; + if ( iGotoPaneActive ) + { + SetSearchActiveL(); + iSearchPane->SetVKBFlag( ETrue ); + } + } + } + } + } + + // For handling Enter key in emulator / Keyboard ( Enter key should behave similar to MSK ) + if ( EStdKeyEnter == keyEvent.iScanCode && EEventKey == aType && + AknLayoutUtils::MSKEnabled() && result == EKeyWasNotConsumed ) + { + CEikButtonGroupContainer* myCba = CEikButtonGroupContainer::Current(); + if(myCba != NULL) + { + TInt cmdId = myCba->ButtonGroup()->CommandId(CEikButtonGroupContainer::EMiddleSoftkeyPosition); + if(EAknSoftkeyContextOptions == cmdId) + { + View().MenuBar()->TryDisplayContextMenuBarL(); + result = EKeyWasConsumed; + } + else if(Listbox()->Model()->ItemTextArray()->MdcaCount() == 0) + { + View().HandleCommandL(cmdId); + result = EKeyWasConsumed; + } + } + } + + if ( result == EKeyWasNotConsumed ) + { + // Otherwise, base class handles Find pane, arrows between folders and + // the listbox. + result = CBrowserFavouritesContainer::OfferKeyEventL( keyEvent, aType ); + } + + return result; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::HandleCursorChangedL +// --------------------------------------------------------- +// +void CBrowserBookmarksContainer::HandleCursorChangedL +( CEikListBox* +#ifdef _DEBUG + aListBox // used only for debugging purposes +#endif + ) + { +#ifdef _DEBUG + __ASSERT_DEBUG( aListBox == Listbox(), + Util::Panic( Util::EFavouritesBadListbox ) ); +#endif + + if ( iGotoPane->IsVisible() ) + { + // Set Goto Pane text (URL or default http text) - this will cancel + // Goto Pane editing. + TPtrC url( KWWWString ); + TBrowserFavouritesSelectionState selection = + Listbox()->SelectionStateL(); + if ( !selection.AnyMarked() && selection.CurrentIsItem() ) + { + // Exactly one item is selected. + const CFavouritesItem* item = Listbox()->CurrentItem(); + if ( item ) // Sanity check. + { + // If one item is highlighted, set to current URL. + url.Set( Util::StripUrl( item->Url() ) ); + } + } + iGotoPane->SetTextL( url, ETrue ); + iGotoPane->SetFocus ( EFalse ); + } + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::IsEditing +// --------------------------------------------------------- +// +TBool CBrowserBookmarksContainer::IsEditing() + { + TBool editing = EFalse; + editing = iGotoPane->IsEditing(); + return editing; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::IsEditingSearch +// --------------------------------------------------------- +// +TBool CBrowserBookmarksContainer::IsEditingSearch() + { + TBool editing = EFalse; + if( iSearchPane ) + { + editing = iSearchPane->IsEditing(); + } + return editing; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::TabIndex +// --------------------------------------------------------- +// +TInt CBrowserBookmarksContainer::TabIndex() + { + return KBookmarkTabIndex; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::ListboxEmptyTextResourceId +// --------------------------------------------------------- +// +TInt CBrowserBookmarksContainer::ListboxEmptyTextResourceId() + { + return R_BROWSER_BOOKMARKS_TEXT_NO_BOOKMARKS; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::TitleResourceId +// --------------------------------------------------------- +// +TInt CBrowserBookmarksContainer::TitleResourceId() + { + return R_BROWSER_OPTION_BOOKMARKS; + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::CBrowserBookmarksContainer +// --------------------------------------------------------- +// +CBrowserBookmarksContainer::CBrowserBookmarksContainer() + : iGotoPaneActive( EFalse ), + iSearchPaneActive(EFalse) + { + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::ConstructComponentControlsL +// --------------------------------------------------------- +// +void CBrowserBookmarksContainer::ConstructComponentControlsL( + const TRect& aRect, + CBrowserFavouritesView& aView ) + { + CBrowserFavouritesContainer::ConstructComponentControlsL + ( aRect, aView ); + + + // Construct Goto Pane. + + //pass view to bookmarks goto pane + iGotoPane = CBrowserBookmarksGotoPane::NewL( *this, &aView, KAvkonBitmapFile, + EMbmAvkonQgn_indi_find_goto, + EMbmAvkonQgn_indi_find_goto_mask); + iGotoPane->SetFocus( EFalse ); + + if( View().ApiProvider().Preferences().SearchFeature() ) + { + ConstructSearchPaneL(); + iSearchPane->SetFocus( EFalse ); + iDefaultSearchText = StringLoader::LoadL( R_IS_WEB_SEARCH ); + } + } + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::CreateListboxIconHandlerL +// --------------------------------------------------------- +// +MBrowserFavouritesListboxIconHandler* +CBrowserBookmarksContainer::CreateListboxIconHandlerL() + { + return new (ELeave) TBrowserBookmarksListboxIconHandler; + } + +#ifdef __SERIES60_HELP +// --------------------------------------------------------- +// CBrowserBookmarksContainer::GetHelpContext() +// --------------------------------------------------------- +// +void CBrowserBookmarksContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidBrowserApplication; + aContext.iContext = KOSS_HLP_BM_MAIN; + } +#endif // __SERIES60_HELP + +// --------------------------------------------------------- +// CBrowserBookmarksContainer::FocusChanged() +// --------------------------------------------------------- +// +void CBrowserBookmarksContainer::FocusChanged( TDrawNow aDrawNow ) + { + if ( IsEditing() ) + { + iGotoPane->SetFocus( IsFocused(), aDrawNow ); + } + else if( IsEditingSearch() ) + { + iSearchPane->SetFocus( IsFocused(), aDrawNow ); + } + else if ( Listbox() && Listbox()->IsVisible() ) + { + Listbox()->SetFocus( IsFocused(), aDrawNow ); + } + } + +// ---------------------------------------------------------------------------- +// CBrowserBookmarksContainer::HandlePointerEventL +// ---------------------------------------------------------------------------- +// +void CBrowserBookmarksContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + if (AknLayoutUtils::PenEnabled()) + { + // if goto is active, if a pointer event falls within its rect, + // pass all pointer events to it (such as, to bring up the editor's letter-entry) + // + // otherwise, if it falls within the listbox's rect + // + + // Now we have two different panes so we have to check explicitly before passing controls + // to any panes. + if( iGotoPane && ( iGotoPaneActive || iSearchPaneActive) ) + { + if( iSearchPane )//implies presence of search feature. + { + if( iGotoPane->Rect().Contains( aPointerEvent.iPosition) ) + { + if( !iGotoPaneActive ) + { + SetGotoActiveL(); + } +#ifndef BRDO_SINGLE_CLICK_ENABLED_FF + else + { +#endif + iGotoPane->HandlePointerEventL(aPointerEvent); +#ifndef BRDO_SINGLE_CLICK_ENABLED_FF + } +#endif + + iGotoPane->SetVKBFlag( ETrue ); + } + else if( iSearchPane->Rect().Contains( aPointerEvent.iPosition) ) + { + if( !iSearchPaneActive ) + { + SetSearchActiveL(); + } +#ifndef BRDO_SINGLE_CLICK_ENABLED_FF + else + { +#endif + iSearchPane->HandlePointerEventL(aPointerEvent); +#ifndef BRDO_SINGLE_CLICK_ENABLED_FF + } +#endif + + iSearchPane->SetVKBFlag( ETrue ); + } + else + { + if(aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + CBrowserAppUi::Static()->ActiveView()->HandleCommandL(EWmlCmdGotoPaneCancel); + SetGotoInactiveL(); + } + } + } + else + { + iGotoPane->HandlePointerEventL(aPointerEvent); + } + } + else + { + // normally, pass all pointer events down to the listbox + Listbox()->HandlePointerEventL(aPointerEvent); + } + } + } + +// ---------------------------------------------------------------------------- +// CBrowserBookmarksContainer::ConstructSearchPaneL +// ---------------------------------------------------------------------------- +// + +void CBrowserBookmarksContainer::ConstructSearchPaneL() + { + TFileName iconFile; + MPreferences& preferences = View().ApiProvider().Preferences(); + + TInt iconId = preferences.GetIntValue( KBrowserSearchIconId ); + // Get the Search Icon File Path. + 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 = 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( iSearchPane ) + { + delete iSearchPane; + iSearchPane = NULL; + } + + + // iSearchPane != NULL, implies presence of search feature, hence it can be + // used to validate search feature avoiding repetative calls to utils and + // avoiding need of separate variable. + iSearchPane = CBrowserBookmarksGotoPane::NewL( *this, + &(View()), + iconFile, + iconId, + iconMaskId, + GOTOPANE_POPUPLIST_DISABLE, + ETrue + ); + + CBrowserBookmarksView* bookmarkView = REINTERPRET_CAST( CBrowserBookmarksView* , &( View() )); + // Set Pane observer + iSearchPane->SetGPObserver( bookmarkView ); + } + } + +// ---------------------------------------------------------------------------- +// CBrowserBookmarksContainer::HandleResourceChange +// ---------------------------------------------------------------------------- +// +void CBrowserBookmarksContainer::HandleResourceChange(TInt aType) + { + CBrowserFavouritesContainer::HandleResourceChange( aType); + if( aType == KEikDynamicLayoutVariantSwitch) + { + // If search feature exsist + if( iSearchPane ) + { + if( iSearchPaneActive ) + { + iGotoPane->SetTextModeItalicL( ); + } + else + { + iSearchPane->SetTextModeItalicL( ); + } + } + } + } +// End of File