fmradio/fmradio/src/fmradioscanlocalstationsview.cpp
branchRCL_3
changeset 19 cce62ebc198e
parent 18 1a6714c53019
child 20 93c594350b9a
--- a/fmradio/fmradio/src/fmradioscanlocalstationsview.cpp	Thu Aug 19 09:55:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1710 +0,0 @@
-/*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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 the class CFMRadioScanLocalStationsView
-*
-*/
-
-
-// INCLUDE FILES
-#include <AknWaitDialog.h> 
-#include <featmgr.h>
-#include <aknViewAppUi.h>
-#include <aknnotedialog.h>
-#include <akntitle.h>
-#include <aknnotewrappers.h> // for basic note
-#include <aknbutton.h>
-#include <avkon.hrh>
-#include <avkon.rsg>
-#include <StringLoader.h>
-#include <eikmenup.h>
-#include <eikbtgpc.h>
-#include <fmradio.rsg>
-#include <fmradio.mbg>
-#include <fmradiouids.h>
-#include <data_caging_path_literals.hrh>
-#include <akntoolbar.h>
-
-#include "fmradiobacksteppingservicewrapper.h"
-#include "fmradioengine.h"
-#include "fmradiordsreceiverbase.h"
-#include "fmradio.hrh"
-#include "fmradioscanlocalstationsview.h"
-#include "fmradiopreset.h"
-#include "fmradioscanlocalstationscontainer.h"
-#include "debug.h"
-#include "fmradioappui.h"
-
-
-const TInt KMSKControlID(3);
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::NewL
-// Two-phase constructor of CFMRadioScanLocalStationsView
-// ---------------------------------------------------------------------------
-//
-CFMRadioScanLocalStationsView* CFMRadioScanLocalStationsView::NewL( CRadioEngine& aRadioEngine,
-		MChannelListHandler& aObserver )
-    {
-    CFMRadioScanLocalStationsView* self = new (ELeave) CFMRadioScanLocalStationsView( aRadioEngine, 
-    		aObserver );
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self; 
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::CFMRadioScanLocalStationsView
-// Parameter constructor ( default constructor )
-// ---------------------------------------------------------------------------
-//
-CFMRadioScanLocalStationsView::CFMRadioScanLocalStationsView( CRadioEngine& aRadioEngine,
-    MChannelListHandler& aObserver ):
-    iNowPlayingIndex( KErrNotFound ),
-    iScanAndSaveActivated( EFalse ),
-    iScanCancelled( EFalse ),
-    iRadioEngine( aRadioEngine ),
-    iTuneRequested( EFalse ),
-    iObserver( aObserver ),
-    iCancelType( EFMRadioCancelScanDefault )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::ConstructL
-// EPOC two-phased constructor
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::ConstructL()
-    {
-    BaseConstructL( R_FMRADIO_SEARCH_STATIONS_VIEW );
-    PrepareToolbar();
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::~CFMRadioScanLocalStationsView
-// Class destructor
-// ---------------------------------------------------------------------------
-//
-CFMRadioScanLocalStationsView::~CFMRadioScanLocalStationsView()
-    {
-    if ( iContainer )
-        {
-        AppUi()->RemoveFromViewStack( *this, iContainer );
-        delete iContainer;
-    	iContainer = NULL;
-        }
-    
-    if ( iScanningNote )
-    	{
-    	TRAP_IGNORE( iScanningNote->ProcessFinishedL() );
-    	iScanningNote = NULL;
-    	}
-    iScannedChannels.ResetAndDestroy();
-    iScannedChannels.Close();
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::Id
-// Return the unique identifier corresponding to this view
-// ---------------------------------------------------------------------------
-//
-TUid CFMRadioScanLocalStationsView::Id() const
-    {
-    return KFMRadioScanLocalStationsViewId;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::DoActivateL
-// Activate the channel list view
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::DoActivateL( const TVwsViewId& /*aPrevViewId*/,
-												 TUid /*aCustomMessageId*/,
-												 const TDesC8& /*aCustomMessage*/ )
-    {
-    FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::DoActivateL  Start") ) );
-    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); 
-    Cba()->DrawDeferred(); // Redraw softkeys
-    
-
-    HBufC* title = StringLoader::LoadLC( R_FMRADIO_SEARCH_STATIONS_VIEW_TITLE, iCoeEnv );
-    static_cast<CAknTitlePane*>( StatusPane()->ControlL( 
-        TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( *title );
-    CleanupStack::PopAndDestroy( title );
-
-    if ( !iContainer )
-        {
-        FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::DoActivateL  inside second, not iContainer if") ) );
-        iContainer = CFMRadioScanLocalStationsContainer::NewL( ClientRect(), iRadioEngine );
-        iContainer->SetMopParent( this );
-        iContainer->SetObserver( this );
-        AppUi()->AddToStackL( *this, iContainer );
-        }
-    AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsViewActive );
-
-    ResetListAndStartScanL();
-    iRadioEngine.RdsReceiver().AddObserver( this );
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::HandleCommandL
-// Interprets view's menu,softkey and other commands and acts
-// accordingly by calling the appropriate command handler
-// function for further action.
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::HandleCommandL( TInt aCommand )
-    {
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( AppUi() );
-    switch ( aCommand )
-        {
-        case EAknSoftkeyBack: // go back to the main view
-            {
-            appUi->ActivateLocalViewL( KFMRadioChannelListViewId );
-            break;
-            }
-        case EEikBidCancel:
-            {
-            if ( iFaded )
-                {
-                appUi->HandleCommandL( aCommand );
-                }
-            else
-                {
-                appUi->ActivateLocalViewL( KFMRadioChannelListViewId );
-                }
-            break;
-            }
-        case EFMRadioCmdSaveChannel:
-            {
-            HandleOneChannelSaveL();
-            break;      	        
-        	}        	
-        case EFMRadioCmdSaveAllChannels:
-            SaveAllChannelsL();
-            break;
-        case EFMRadioCmdScanLocalStationsScan: // start station scanning
-            {
-            Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); 
-            Cba()->DrawDeferred(); // Redraw softkeys
-            //reset all counters, make station list empty
-            ResetListAndStartScanL();
-        	break;
-        	}
-        	
-        case EFMRadioCmdListenCh:
-        	{
-        	PlayCurrentlySelectedChannelL();
-        	SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE );
-        	break;
-        	}
-        default: // Send all other commands to AppUi
-            appUi->HandleCommandL( aCommand );
-            break;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SetLastListenedChannel
-// Keep track of the last selected channel
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::SetLastListenedChannel( TInt aIndex )
-    {
-    iChIndex = aIndex;
-    if ( iContainer )
-        {
-        iContainer->UpdateLastListenedChannel( aIndex ); // Update index
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SetNowPlayingChannelL
-// Keep track of the current selected channel
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::SetNowPlayingChannelL( TInt aChannelIndex )
-    {
-    TInt oldIndex = iNowPlayingIndex;
-    iNowPlayingIndex = aChannelIndex;
-    
-    if ( iContainer && ( aChannelIndex != oldIndex ) )
-        {
-        if ( ChannelInUse( oldIndex ) &&
-                !iScannedChannels[ oldIndex ]->PresetNameValid() )
-            {
-            // Remove dynamic ps name
-            iContainer->UpdateChannelListContentL( oldIndex,
-                    KNullDesC,
-                    iScannedChannels[ oldIndex ]->PresetFrequency(),
-                    EFalse,
-                    EFalse );
-            }
-        iContainer->UpdateNowPlayingIconL( iNowPlayingIndex, oldIndex );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::CurrentlyPlayingChannel
-// Returns the index of the playing channel item from the channel list.
-// ---------------------------------------------------------------------------
-//
-TInt CFMRadioScanLocalStationsView::CurrentlyPlayingChannel()
-	{
-	return iNowPlayingIndex;
-	}
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::ChannelInPlay
-// Return true/false to indicate whether the channel specified
-// is in play
-// ---------------------------------------------------------------------------
-//
-TBool CFMRadioScanLocalStationsView::ChannelInPlay( TInt aChannelIndex ) const
-    {
-    if( aChannelIndex == iNowPlayingIndex )
-    	{
-    	return ETrue;
-    	}
-    else 
-    	{
-    	return EFalse;
-    	}
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::ChannelInUse
-// Return true/false to indicate whether the channel specified
-// is in use
-// ---------------------------------------------------------------------------
-//
-TBool CFMRadioScanLocalStationsView::ChannelInUse( const TInt aChannelIndex ) const
-    {
-    TBool ret = EFalse;
-    FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::ChannelInUse  Start") ) );
-
-    if ( aChannelIndex >= KMinNumberOfChannelListItems &&
-            aChannelIndex < iScannedChannels.Count() )
-        {
-        ret = ETrue;
-        }
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::FadeAndShowExit
-// Fade the view and all controls associated with it. Change
-// the soft keys so that "Exit" is displayed
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::FadeAndShowExit( TBool aFaded )
-    {
-    TInt err = KErrNone;
-    iFaded = aFaded;
-    SetToolbarDimmedState( aFaded ); 
-    if ( iContainer )
-        {
-        if ( aFaded ) // Fade
-            {
-            // In case options menu is open when headset is disconnected
-            StopDisplayingMenuBar();
-            iContainer->SetFaded( aFaded );
-            TRAP( err,Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_EXIT ) );
-            }
-        else
-            {
-            iContainer->SetFaded( aFaded );
-            TRAP( err,Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ) );
-            // Update index to be sure it is up-to-date (in case if list was scrolled in idle state)
-            iContainer->UpdateLastListenedChannel( iChIndex );
-            
-            if( iScannedChannels.Count() > 0 )
-                {
-                TRAP_IGNORE( SetMiddleSoftKeyIconL(); )
-                
-                if ( ( CurrentlyPlayingChannel() == CurrentlySelectedChannel() ) )
-                    {
-                    SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE );
-                    }
-                else
-                    {
-                    SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR );
-                    }
-                }
-            }
-        Cba()->DrawDeferred();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::UpdateDisplayForFocusGained
-// Update the view after a focus gained event.
-// 1. Fade/Unfade view
-// 2. Update MSK label
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::UpdateDisplayForFocusGained()
-    {
-    FadeAndShowExit( iFaded );
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::UpdateChannelListContentL
-// Make a request to the channel container to update the
-// content of the channel at aIndex with the values specified
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::UpdateChannelListContentL( TInt aIndex,
-															   TInt aChannelFrequency )
-    {
-    TBool nowPlaying = EFalse;	
-    if( ChannelInPlay( aIndex ) )
-	    {
-	    nowPlaying = ETrue;	
-	    }
-	else 
-		{
-		 nowPlaying = EFalse;	
-		}
-    if ( iContainer )
-        {
-        iContainer->UpdateChannelListContentL( aIndex, KNullDesC, aChannelFrequency, nowPlaying );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::CurrentlySelectedChannel
-// Returns the index of the selected channel item from the
-// channel list. If the container is active get the info from
-// it, because it may have more up-to-date info.
-// ---------------------------------------------------------------------------
-//
-TInt CFMRadioScanLocalStationsView::CurrentlySelectedChannel()
-    {
-    if ( iContainer )
-        {
-        iChIndex = iContainer->CurrentlySelectedChannel();
-        }
-    return iChIndex;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::NextChannel
-// Retrieve the index of the next channel that has been set.
-// ---------------------------------------------------------------------------
-//
-TInt CFMRadioScanLocalStationsView::NextChannel()
-    {
-    if ( iContainer )
-        {
-        iChIndex = iContainer->CurrentlySelectedChannel();
-        }
-    else
-        {
-        iChIndex = iRadioEngine.GetPresetIndex();
-        }
-
-    TInt nextChannel = iChIndex;
-    for ( TInt i = iChIndex + 1; i < KMaxNumberOfChannelListItems; i++ )
-        {
-        if ( ChannelInUse( i ) )
-            {
-            nextChannel = i;
-            break;
-            }
-        }
-    if ( nextChannel == iChIndex )
-        {
-        for ( TInt i = 0; i < iChIndex; i++ )
-            {
-            if ( ChannelInUse( i ) )
-                {
-                nextChannel = i;
-                break;
-                }
-            }
-        }
-    return nextChannel;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::PreviousChannel
-// Retrieve the index of the previous channel that has been set.
-// ---------------------------------------------------------------------------
-//
-TInt CFMRadioScanLocalStationsView::PreviousChannel()
-    {
-    if ( iContainer )
-        {
-        iChIndex = iContainer->CurrentlySelectedChannel();
-        }
-    else
-        {
-        iChIndex = iRadioEngine.GetPresetIndex();
-        }
-
-    TInt previousChannel = iChIndex;
-    
-    for ( TInt i = iChIndex - 1; i >= 0; i-- )
-        {
-        if ( ChannelInUse( i ) )
-            {
-            previousChannel = i;
-            break;
-            }
-        }
-    if ( previousChannel == iChIndex )
-        {
-        for ( TInt i = KMaxNumberOfChannelListItems - 1; i > iChIndex; i-- )
-            {
-            if ( ChannelInUse( i ) )
-                {
-                previousChannel = i;
-                break;
-                }
-            }
-        }
-    return previousChannel;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::HandleControlEventL
-// Handles control event observing. In this case the interest
-// is only on the channel selection from the channel list.
-// Other events are not reported by the container,
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::HandleControlEventL( CCoeControl* aControl,
-                                                         TCoeEvent aEventType )
-    {
-    if ( aControl == iContainer )
-        {
-        if ( aEventType == MCoeControlObserver::EEventRequestFocus )
-            {
-            // Don't display MSK when display is faded.
-            if ( !iFaded && !AknLayoutUtils::PenEnabled() )
-                {
-                // event sent if up or down arrow keys are pressed
-           	    if ( ( CurrentlyPlayingChannel() == CurrentlySelectedChannel() ) )
-                    {
-                    SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE );
-                    }
-                else
-                    {
-                	SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR );
-                    }
-                }
-            else if ( ChannelInUse( CurrentlySelectedChannel() ) )
-                {
-                PlayCurrentlySelectedChannelL();
-                }
-            }
-        else if ( aEventType == MCoeControlObserver::EEventStateChanged
-                && ChannelInUse( CurrentlySelectedChannel() ) )
-            {
-            PlayCurrentlySelectedChannelL();
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::DoDeactivate
-// Deactivate the channel list view
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::DoDeactivate()
-    {
-    FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::DoDeactivate") ) );
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( AppUi() );
-    
-    if ( iToolbar )
-        {
-        // hide toolbar so it is not visible when activating view again
-        iToolbar->SetToolbarVisibility( EFalse );
-        }
-
-    if ( appUi->RadioEngine() )
-    	{
-        iRadioEngine.RdsReceiver().RemoveObserver( this );
-    	}
-    if ( iContainer )
-        {
-        appUi->RemoveFromViewStack( *this, iContainer );
-        }
-
-    iScanAndSaveActivated = EFalse;
-    
-    // If exiting, iRadioEngine is no longer valid object
-    if( appUi->RadioEngine() )
-        {
-        appUi->RadioEngine()->CancelScanLocalStationsScan();
-        // Stop seek doesn't get called automatically as this is not active view anymore
-        TRAP_IGNORE( StopSeekL() )
-        }
-    
-    delete iContainer;
-    iContainer = NULL;
-	// release allocated memory for scanned stations
-    iScannedChannels.ResetAndDestroy();
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::DynInitMenuPaneL
-// Sets the state of menu items dynamically according to the
-// state of application data.
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::DynInitMenuPaneL( TInt aResourceId,
-                                                      CEikMenuPane* aMenuPane )
-    {
-    if ( aResourceId == R_FMRADIO_SEARCH_STATIONS_OPTIONS_MENU ) // Main menu
-        {
-        if ( iRadioEngine.IsAudioRoutingPossible() )
-            {
-            if ( iRadioEngine.GetAudioOutput() == CRadioEngine::EFMRadioOutputIHF )
-                {
-                // Delete existing menu option and add a new one
-                aMenuPane->DeleteMenuItem( EFMRadioCmdActivateIhf );
-                if ( iRadioEngine.IsHeadsetConnected() )
-                    {
-                    aMenuPane->SetItemTextL( EFMRadioCmdDeactivateIhf, R_QTN_FMRADIO_OPTIONS_DEACTIVATE );
-                    }
-                }
-            else
-                {
-                // Delete existing menu option and add a new one
-                aMenuPane->DeleteMenuItem( EFMRadioCmdDeactivateIhf );
-                aMenuPane->SetItemTextL( EFMRadioCmdActivateIhf, R_QTN_FMRADIO_OPTIONS_ACTIVATE );
-                }
-            }
-        else
-            {
-            aMenuPane->SetItemDimmed( EFMRadioCmdDeactivateIhf, ETrue );
-            aMenuPane->SetItemDimmed( EFMRadioCmdActivateIhf, ETrue );
-            }
-        
-        TInt scannedChannelCount = iScannedChannels.Count();
-        
-        if ( scannedChannelCount < 2 )
-            {
-            aMenuPane->DeleteMenuItem( EFMRadioCmdSaveAllChannels );
-            }
-
-        if ( scannedChannelCount < 1)
-            {
-            aMenuPane->SetItemDimmed( EFMRadioCmdSaveChannel, ETrue );
-            }
-        
-        // if help is not enabled, disable help option
-        if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
-            {
-            aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::LayoutChangedL
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::LayoutChangedL( TInt aType )
-    {
-    if( iContainer )
-        {
-        iContainer->SetRect( ClientRect() );
-        iContainer->HandleResourceChange( aType );
-        }
-    }
-
-// ---------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SetMiddleSoftKeyLabelL
-// Sets middle softkey label.
-// ---------------------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::SetMiddleSoftKeyLabelL( const TInt aResourceId,
-                                                      const TInt aCommandId )
-    {
-    if ( !AknLayoutUtils::PenEnabled() )
-        {
-        CEikButtonGroupContainer* cbaGroup = Cba();
-        if ( cbaGroup )
-            {
-            cbaGroup->RemoveCommandFromStack( KMSKControlID, iCurrentMSKCommandId );
-            HBufC* middleSKText = StringLoader::LoadLC( aResourceId, iCoeEnv );
-            TPtr mskPtr = middleSKText->Des();
-            cbaGroup->AddCommandToStackL(
-                KMSKControlID,
-                aCommandId,
-                mskPtr );
-            CleanupStack::PopAndDestroy( middleSKText );
-            iCurrentMSKCommandId = aCommandId;
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SetMiddleSoftKeyIconL
-// Sets middle softkey icon.
-// ---------------------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::SetMiddleSoftKeyIconL()
-    {
-    if ( !AknLayoutUtils::PenEnabled() )
-        {
-        CEikButtonGroupContainer* cbaGroup = Cba();
-        CFbsBitmap* bitmap = NULL;
-        CFbsBitmap* mask = NULL;
-        if ( cbaGroup )
-            {
-            TFileName mbmFileName;
-            TFindFile finder( iCoeEnv->FsSession() );
-            TInt err = finder.FindByDir( KFMRadioBmpFile, KDC_APP_BITMAP_DIR );
-            if ( err == KErrNone )
-                {
-                mbmFileName.Copy( finder.File() );
-                }
-
-            AknsUtils::CreateColorIconL(
-                AknsUtils::SkinInstance(),
-                KAknsIIDQgnPropMskMenu,
-                KAknsIIDQsnComponentColors,
-                EAknsCIQsnComponentColorsCG13,
-                bitmap,
-                mask,
-                mbmFileName,
-                EMbmFmradioQgn_prop_msk_menu,
-                EMbmFmradioQgn_prop_msk_menu_mask,
-                KRgbBlack );
-
-            CleanupStack::PushL( bitmap );
-            CleanupStack::PushL( mask );
-
-            cbaGroup->RemoveCommandFromStack( KMSKControlID, iCurrentMSKCommandId );
-            cbaGroup->AddCommandToStackL(
-                KMSKControlID,
-                EAknSoftkeyContextOptions,
-                *bitmap,
-                *mask );
-
-            iCurrentMSKCommandId = EAknSoftkeyContextOptions;
-
-            CleanupStack::PopAndDestroy( 2, bitmap );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SaveAllChannelsL
-// Saves all the scanned channels into Radio Engine's presets.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::SaveAllChannelsL()
-    {
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-    
-    if ( appUi->NumberOfChannelsStored() > 0 )
-        {
-        //We have some tuned channels,
-        //so we have to check does the user want to
-        //add new channes or replace the old ones.
-        TInt numberOfEmptySlots = KMaxNumberOfChannelListItems - appUi->NumberOfChannelsStored();
-        if( numberOfEmptySlots >= iScannedChannels.Count() )
-            {
-            //more vacant than new channels
-            //we can add or replace
-            TInt index(0);
-            CAknListQueryDialog* query = new (ELeave) CAknListQueryDialog( &index );
-            query->PrepareLC( R_FMRADIO_LISTQUERY_SAVE_ALL_REPLACE_APPEND );
-            if( query->RunLD() )
-                {
-                const TInt KIndexOfSaveAllReplaceExistingCmd = 0;
-                const TInt KIndexOfSaveAllAppendCmd = 1;
-                if( index == KIndexOfSaveAllReplaceExistingCmd )
-                    {
-                    SaveFoundChannelsToPresetsL( EReplace );
-                    }
-                else if( index == KIndexOfSaveAllAppendCmd )
-                    {
-                    SaveFoundChannelsToPresetsL( EAppend );
-                    }
-                }
-            else
-                {
-                ShowToolbar( ETrue );
-                }
-            }
-        else
-            {
-            //no room for all the channels
-            if( numberOfEmptySlots == 0 )
-                {
-                CAknQueryDialog* query = CAknQueryDialog::NewL();
-                if ( query->ExecuteLD( R_FMRADIO_REPLACE_EXISTING_CHANNELS_QUERY ) )
-                    {
-                    SaveFoundChannelsToPresetsL( EReplace );
-                    }
-                else
-                    {
-                    ShowToolbar( ETrue );
-                    }
-                }
-            else
-                {
-                TInt index(0);
-                CAknListQueryDialog* query = new (ELeave) CAknListQueryDialog( &index );
-                query->PrepareLC( R_FMRADIO_LISTQUERY_SAVE_ALL_REPLACE_APPEND_LIST_ALMOST_FULL );
-                if( query->RunLD() )
-                    {
-                    const TInt KIndexOfSaveAllAppendCmd = 0;
-                    const TInt KIndexOfSaveAllReplaceExistingCmd = 1;
-                    if( index == KIndexOfSaveAllReplaceExistingCmd )
-                        {
-                        SaveFoundChannelsToPresetsL( EReplace );
-                        }
-                    else if( index == KIndexOfSaveAllAppendCmd )
-                        {
-                        SaveFoundChannelsToPresetsL( EAppend );
-                        }
-                    }
-                else
-                    {
-                    ShowToolbar( ETrue );
-                    }   
-                }
-            }
-        }
-    else
-        {
-        //No previous channels
-        SaveFoundChannelsToPresetsL( EReplace );
-        }
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::ShowConfirmationQueryL
-// Get confirmation from user.
-// -----------------------------------------------------------------------------------------------
-//
-TInt CFMRadioScanLocalStationsView::ShowConfirmationQueryL(TInt aResText, TInt aResQuery) 
-	{
-	TInt accepted = EFalse;
-    HBufC* prompt = StringLoader::LoadLC( aResText, iEikonEnv );
-    CAknQueryDialog* queryDlg = CAknQueryDialog::NewL();
-    accepted = queryDlg->ExecuteLD( aResQuery, *prompt );
-    CleanupStack::PopAndDestroy( prompt );
-    return accepted;
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::StopSeekL
-// Invoked by AppUi when a seek is completed or aborted.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::StopSeekL()
-    {
-    FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::StopSeekL") ) );
-
-    if ( iTuneRequested )
-        {
-        iTuneRequested = EFalse;
-
-        // if tune request comes from scan all (= ResetListAndStartScanL )
-        // then start the whole scan
-        if ( iScanAndSaveActivated )
-            {
-            AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsScan );
-            }
-        else
-            {
-            iRadioEngine.SetMuteOn( EFalse );
-            }
-        }
-    else if ( iScanAndSaveActivated )
-        {
-        // No channels found or user has canceled search before any channels are found
-        if ( iRadioEngine.GetTunedFrequency() == iLowerFrequencyBound &&
-                iScannedChannels.Count() == 0 )
-            {
-            CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-
-            if ( appUi->IsStartupWizardRunning() )
-                {                
-                //no stations are found in Wizard
-                if (iCancelType == EFMRadioCancelScanDefault)
-                    {
-                    HBufC* string = NULL; 
-                    string = StringLoader::LoadLC( R_QTN_FMRADIO_NO_STATIONS_FOUND, iEikonEnv );
-                    CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); // waiting
-                    note->ExecuteLD( *string );
-                    CleanupStack::PopAndDestroy( string );
-                    }
-
-                iScanAndSaveActivated = EFalse;
-
-                RemoveScanningInProgressNoteL();
-                RestoreRadio();
-                appUi->AutoTuneInMainView(ETrue);
-                
-                ActivateMainViewL();
-                }
-            else
-                {
-                if( iContainer )
-                    {
-                    HBufC* listEmptyText = NULL; 
-                    listEmptyText = StringLoader::LoadLC( R_QTN_FMRADIO_LIST_NO_STATIONS_FOUND, iEikonEnv );
-                    iContainer->SetStationListEmptyTextL( *listEmptyText );
-                    CleanupStack::PopAndDestroy( listEmptyText );
-                    
-                    iContainer->ResetChannelListL();
-                    }
-
-                iScanAndSaveActivated = EFalse;
-                Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); 
-                Cba()->DrawDeferred(); // Redraw softkeys
-                RemoveScanningInProgressNoteL();
-
-                UpdateToolbar();
-                ShowToolbar( ETrue );
-                RestoreRadio();
-                }
-            }
-        else
-            {
-            AddTunedFrequencyToListL();
-            }
-        }
-    else
-        {
-        RemoveScanningInProgressNoteL();
-        TBool restoreFrequency = EFalse;
-        TInt tunedFrequency = iRadioEngine.GetTunedFrequency();
-        
-        if ( tunedFrequency == iLowerFrequencyBound &&
-                iScannedChannels.Count() == 0 )
-            {
-            restoreFrequency = ETrue;
-            }
-        UpdateToolbar();
-        RestoreRadio( restoreFrequency );
-        
-        // update now playing index if the tuning is triggered from accessory 
-        TInt frequencyIndex = FrequencyIndex( tunedFrequency );
-        
-        if ( frequencyIndex != KErrNotFound )
-            {
-            SetNowPlayingChannelL( frequencyIndex );
-            SetLastListenedChannel( frequencyIndex );
-            }
-        else // frequency is not in the list, remove now playing channel status
-            {
-            SetNowPlayingChannelL( KErrNotFound );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::RestoreRadio
-// Restores the radio after scanning
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RestoreRadio( TBool aTuneInitialFrequency )
-    {
-    FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::RestoreRadio") ) );
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-    // if iInitialTunedFrequency is 0, radio has already been restored
-    if ( iInitialTunedFrequency )
-        {
-        if ( aTuneInitialFrequency )
-            {
-            iTuneRequested = ETrue;
-            iRadioEngine.Tune( iInitialTunedFrequency );
-            }
-        iInitialTunedFrequency = 0;
-        }
-    appUi->SetStartupWizardRunning( EFalse );
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::AddTunedFrequencyToListL
-// Updates found channels to the list.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::AddTunedFrequencyToListL()
-    {
-    FTRACE( FPrint( _L("CFMRadioScanLocalStationsView::AddTunedFrequencyToListL") ) );
-    TInt tunedFrequency = iRadioEngine.GetTunedFrequency();
-    
-    if ( KErrNotFound == FrequencyIndex( tunedFrequency ) )
-        {
-        // the frequency is new and may be added
-        CFMRadioPreset* channel = CFMRadioPreset::NewL();
-        CleanupStack::PushL( channel );
-        channel->SetPresetFrequency( tunedFrequency );
-        // Make the name invalid by default so that possibly dynamic PS name won't get saved
-        channel->SetPresetNameValid( EFalse );
-        
-        TInt freqIndex = SortedFrequencyListIndex( tunedFrequency );
-        
-        if ( freqIndex < ( iScannedChannels.Count() - 1 ) )
-            {
-            iScannedChannels.InsertL( channel, freqIndex );
-            }
-        else
-            {
-            iScannedChannels.AppendL( channel );
-            }
-        CleanupStack::Pop( channel );
-        
-        // update a radiostation slot in the list
-        // check if there is place
-        if ( iContainer )
-            {
-            iContainer->InsertScannedChannelToListL( freqIndex, tunedFrequency );
-            iContainer->DrawDeferred();
-            }
-        // scan for another frequency
-        AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsScan );
-        }
-    else
-        {
-        //stop scanning
-        iScanAndSaveActivated = EFalse;
-        Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); 
-        Cba()->DrawDeferred(); // Redraw softkeys
-
-        RemoveScanningInProgressNoteL();
-        SetMiddleSoftKeyIconL();
-        SetContextMenu( R_FMRADIO_SCAN_STATIONS_CTX_MENUBAR_SAVE );
-
-        if ( iContainer )
-            {
-            iContainer->UpdateLastListenedChannel( 0 ); // select the first channel
-            PlayCurrentlySelectedChannelL();
-            iContainer->DrawDeferred();
-            }
-        
-        CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-
-        if ( appUi->IsStartupWizardRunning() )
-            {
-            appUi->SetStartupWizardRunning( EFalse );
-
-            if ( iScanCancelled )
-                {
-                iScanCancelled = EFalse;
-                ActivateMainViewL();
-                }
-            else
-                {
-                SaveAllChannelsL();
-                }
-            }
-        else
-            {
-            UpdateToolbar();
-            ShowToolbar( ETrue );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::ResetCountersL
-// Called when a new scan is activated.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::ResetListAndStartScanL()
-    {
-    User::LeaveIfNull( iContainer );
-    iNowPlayingIndex = KErrNotFound;
-    ShowToolbar( EFalse );
-    iContainer->SetStationListEmptyTextL( KNullDesC );
-    iScanAndSaveActivated = ETrue;	
-    DisplayScanningInProgressNoteL();
-
-    iInitialTunedFrequency = 0;
-    iScanCancelled = EFalse;
-    iCancelType = EFMRadioCancelScanDefault;
-    iScannedChannels.ResetAndDestroy();
-    iContainer->InitializeChannelListL();
-    
-    //mute radio
-    if ( !iRadioEngine.IsMuteOn() )
-        {
-        iRadioEngine.SetMuteOn( ETrue );
-        }
-
-    //update upper and lower frequency bands
-    iRadioEngine.GetFrequencyBandRange( iLowerFrequencyBound, iUpperFrequencyBound );
-
-    iInitialTunedFrequency = iRadioEngine.GetTunedFrequency();
-
-    if ( iRadioEngine.GetTunedFrequency() != iLowerFrequencyBound )
-        {
-        iTuneRequested = ETrue;
-        iRadioEngine.Tune( iLowerFrequencyBound );
-        }
-    else
-        {
-        AppUi()->HandleCommandL( EFMRadioCmdScanLocalStationsScan );
-        }
-    }
-
-// ---------------------------------------------------------
-// CFMRadioScanLocalStationsContainer::DisplayScanningInProgressNoteL
-// Display a wait note while the channel fill is occuring.
-// ---------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::DisplayScanningInProgressNoteL()
-    {
-    iScanningNote = new ( ELeave ) CAknWaitDialog( reinterpret_cast<CEikDialog**>( &iScanningNote ) );
-    iScanningNote->SetCallback( this );
-    
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-    
-    if ( appUi->IsStartupWizardRunning() )
-        {
-        iScanningNote->PrepareLC( R_FMRADIO_SEARCH_STATIONS_WAIT_CANCEL_NOTE );
-        }
-    else
-        {
-        iScanningNote->PrepareLC( R_FMRADIO_SEARCH_STATIONS_WAIT_NOTE );
-        }
-    
-    iScanningNote->RunLD();
-    }	
-
-// ---------------------------------------------------------
-// CFMRadioScanLocalStationsContainer::RemoveScanningInProgressNoteL
-// Remove and destroy the scanning fill note.
-// ---------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RemoveScanningInProgressNoteL()
-    {
-    FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::RemoveScanningInProgressNoteL")));
-    if ( iScanningNote )
-        {
-        iScanningNote->ProcessFinishedL(); // Inform seek note to stop and hide it        
-        iScanningNote = NULL;
-        }
-    }
-
-// ---------------------------------------------------------
-// CFMRadioScanLocalStationsContainer::DialogDismissedL
-// Called when user cancels waiting note or process finishes
-// ---------------------------------------------------------
-//	
-void CFMRadioScanLocalStationsView::DialogDismissedL( TInt  aButtonId ) 	
-	{
-	FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::DialogDismissedL")));	
-	iScanningNote = NULL;
-	if ( aButtonId == EAknSoftkeyCancel )
-   		{
-      	// cancel any process in here    	
-   		/*Dialog get this button ID when dismissed, if headset is pulled off
-   		we don't want to change the cancel type*/
-   		if( iCancelType != EFMRadioCancelScanByHeadsetDisconnect)
-   			{
-   	   		SetScanCanceled(EFMRadioCancelScanBySoftkey);
-   			}
-   		iRadioEngine.CancelScanLocalStationsScan(); 
-  		}
-	}
-
-void CFMRadioScanLocalStationsView::SetScanCanceled( TFMRadioCancelScanType aType )
-	{
-	CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-	
-	if ( appUi->IsStartupWizardRunning() )
-	    {
-	    FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::SetScanCanceled")));	
-	    iScanCancelled = ETrue;
-	    iCancelType = aType;
-	    }
-	else
-		{
-		iScanCancelled = EFalse;
-		iCancelType = EFMRadioCancelScanDefault;
-		}
-	}
-
-TFMRadioCancelScanType CFMRadioScanLocalStationsView::CancelType()
-	{
-	return iCancelType;
-	}
-
-// ---------------------------------------------------------
-// CFMRadioScanLocalStationsContainer::SaveFoundChannelsToPresets
-// Save scanned channels to presets 
-// ---------------------------------------------------------
-//	
-void CFMRadioScanLocalStationsView::SaveFoundChannelsToPresetsL( TSavingMode aSavingMode )
-	{
-	FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::SaveFoundChannelsToPresetsL Mode %d"), aSavingMode ) );
-	CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-	
-	//store as much as the list is keeping
-	TInt limit;	
-	TInt chCount = iScannedChannels.Count();
-	
-	if ( chCount >= KMaxNumberOfChannelListItems )
-		{
-		limit = KMaxNumberOfChannelListItems;
-		}
-	else
-		{
-		limit = chCount;
-		}
-	
-	TInt savedChannelCount = 0;	
-	
-    if ( aSavingMode == EAppend ) 
-        {
-        /** Append found channels to preset list */		
-        for ( TInt freqIx = 0; KMaxNumberOfChannelListItems > iObserver.Channels().Count() && 
-            chCount > freqIx; freqIx++ )
-            {
-            const TDesC& name = iScannedChannels[ freqIx ]->PresetNameValid() ? 
-                    iScannedChannels[ freqIx ]->PresetName() : KNullDesC;
-
-		    iObserver.AddChannelToListL( name,
-                                         iScannedChannels[ freqIx ]->PresetFrequency() );
-						
-			savedChannelCount++;
-
-			}
-		
-		iObserver.UpdateChannelsL( EStoreAllToRepository, 0, 0 );
-
-		}
-	else // Replace
-		{
-		iObserver.UpdateChannelsL( ERemoveAllFromRepository, 0, 0  );
-		
-		for ( TInt index = 0; index < limit; index++ )
-			{
-            const TDesC& name = iScannedChannels[ index ]->PresetNameValid() ? 
-                    iScannedChannels[ index ]->PresetName() : KNullDesC;
-			iObserver.AddChannelToListL( name,
-                                         iScannedChannels[ index ]->PresetFrequency() );
-			savedChannelCount++;
-			}
-		iObserver.UpdateChannelsL( EStoreAllToRepository, 0, 0 );
-		}
-	
-    // display note about how many many channels were saved to the preset list
-    HBufC* string = NULL;                    
-    string = StringLoader::LoadLC( R_QTN_FMRADIO_STATIONS_SAVED, savedChannelCount, iEikonEnv );        
-    CAknConfirmationNote* note = new ( ELeave ) CAknConfirmationNote( ETrue ); // waiting
-    note->ExecuteLD( *string );
-    CleanupStack::PopAndDestroy( string );
-    
-    ActivateMainViewL();
-    }
-
-// ---------------------------------------------------------
-// CFMRadioScanLocalStationsView::PlayCurrentlySelectedChannel
-// Play currently selected channel from scan local stations list
-// ---------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::PlayCurrentlySelectedChannelL()
-    {
-    FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::PlayCurrentlySelectedChannelL")));
-    
-    TInt selectedChannel = CurrentlySelectedChannel();    
-    if ( ChannelInUse( selectedChannel ) )
-        {
-        TInt selectedFrequency = iScannedChannels[ selectedChannel ]->PresetFrequency();
-        
-        if ( iRadioEngine.GetTunedFrequency() != selectedFrequency )
-            {
-            CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-            iTuneRequested = ETrue;
-            SetNowPlayingChannelL( selectedChannel );
-            SetLastListenedChannel( selectedChannel );
-            appUi->TuneL( selectedFrequency );
-            }
-        else
-            {
-            SetNowPlayingChannelL( selectedChannel );
-            SetLastListenedChannel( selectedChannel );
-            iRadioEngine.SetMuteOn( EFalse );
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// CFMRadioScanLocalStationsView::ShowToolbar
-// Sets toolbar visibility.
-// ---------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::ShowToolbar( TBool aVisible )
-	{
-	if ( iToolbar && AknLayoutUtils::PenEnabled() )
-		{						
-		iToolbar->SetToolbarVisibility( aVisible );
-		iToolbar->UpdateBackground();
-		iToolbar->DrawDeferred();			
-		// just to make sure container has the right rect when toolbar is displayed
-		if ( aVisible && iContainer )
-			{
-			iContainer->SetRect( ClientRect() );	
-			}		
-		}
-	}
-		
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::RdsDataProgrammeService
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RdsDataProgrammeService( const TDesC& aProgramService )
-    {
-    FTRACE(FPrint(_L("CFMRadioScanLocalStationsView::RdsDataProgrammeService")));
-    if ( iContainer && !iTuneRequested && aProgramService.Length() > 0 )
-        {
-        TInt tunedChannel = CurrentlyPlayingChannel();
-        
-        TRAP_IGNORE
-            (
-            if ( ChannelInUse( tunedChannel ) )
-                {
-                iContainer->UpdateChannelListContentL( tunedChannel,
-                        aProgramService,
-                        iScannedChannels[ tunedChannel ]->PresetFrequency(),
-                        ETrue,
-                        ETrue );
-
-                // update PS name also to the list containing the scanned preset values
-                iScannedChannels[ tunedChannel ]->SetPresetNameL( aProgramService );
-                iContainer->DrawDeferred();
-                }
-            )
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::RdsDataPsNameIsStatic
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RdsDataPsNameIsStatic( TBool aStatic )
-    {
-    TInt tunedChannel = CurrentlyPlayingChannel();
-    if( ChannelInUse( tunedChannel ) )
-        {
-        iScannedChannels[ tunedChannel ]->SetPresetNameValid( aStatic );
-        }
-    }
-
-// ---------------------------------------------------------
-// CFMRadioScanLocalStationsView::RdsDataRadioText
-// ---------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RdsDataRadioText( const TDesC&/* aRadioText */)
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::RdsAfSearchBegin
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RdsAfSearchBegin()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::RdsAfSearchEnd
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RdsAfSearchEnd( TUint32 /*aFrequency*/, TInt /*aError*/ )
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::RdsAfSearchStateChange
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RdsAfSearchStateChange( TBool /*aEnabled*/ )
-    { 
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::RdsAvailable
-// ---------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::RdsAvailable( TBool /*aAvailable*/ )
-    {
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::PrepareToolbar
-// Prepare toolbar for displaying basic radio command buttons
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::PrepareToolbar()
-	{
-    if ( AknLayoutUtils::PenEnabled() )
-        {
-        iToolbar = Toolbar();   	
-        iToolbar->SetToolbarVisibility( EFalse );
-        // Set observer
-        iToolbar->SetToolbarObserver( this );
-        }
-    }
-	
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::OfferToolbarEventL
-// Handle commands from toolbar.
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::OfferToolbarEventL( TInt aCommandId )
-    {
-    switch ( aCommandId )
-        {
-        case EFMRadioToolbarButtonCmdSaveAll:
-            {
-            HandleCommandL( EFMRadioCmdSaveAllChannels );
-            break;
-            }
-        case EFMRadioToolbarButtonCmdScan:
-            {
-            HandleCommandL( EFMRadioCmdScanLocalStationsScan );
-            break;
-            }
-        case EFMRadioToolbarButtonCmdToggleIhf:
-            {
-            if ( iRadioEngine.GetAudioOutput() == CRadioEngine::EFMRadioOutputHeadset )
-                {
-                AppUi()->HandleCommandL( EFMRadioCmdActivateIhf );
-                }
-            else
-                {
-                AppUi()->HandleCommandL( EFMRadioCmdDeactivateIhf );
-                }
-            break;
-            }
-        default:
-            {
-            break;
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SetToolbarDimmedState
-// set toolbar buttons dimmed state
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::SetToolbarDimmedState( const TBool aState )
-	{
-    if ( iToolbar && AknLayoutUtils::PenEnabled() )	
-        {
-        iToolbar->SetDimmed( aState );
-        if ( !aState )
-            {
-            UpdateToolbar();
-            }
-        iToolbar->DrawDeferred();
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::UpdateToolbar
-// Set save buttons dimming state
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::UpdateToolbar()
-    {
-    if ( iContainer && iToolbar && AknLayoutUtils::PenEnabled() )
-        {
-        if ( iRadioEngine.IsAudioRoutingPossible() )
-            {
-                if ( iRadioEngine.IsHeadsetConnected() )
-                    {
-                    CAknButton* centerButton = NULL;    
-                    centerButton = static_cast<CAknButton*>( iToolbar->ControlOrNull( EFMRadioToolbarButtonCmdToggleIhf ) );    
-
-                    iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdToggleIhf, EFalse, ETrue );
-                    
-                    if ( iRadioEngine.GetAudioOutput() == CRadioEngine::EFMRadioOutputIHF )
-                        {
-                        if ( centerButton )
-                            {
-                            centerButton->SetCurrentState( 1, ETrue );
-                            }
-                        }
-                    else
-                        {
-                        if ( centerButton )
-                            {
-                            centerButton->SetCurrentState( 0, ETrue );
-                            }
-                        }
-                    }
-                else
-                    {
-                    iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdToggleIhf, ETrue, ETrue );
-                    }
-                }
-            else
-                {
-                iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdToggleIhf, ETrue, ETrue );
-                }
-
-        TInt chCount = iScannedChannels.Count();
-        if ( chCount == 0 )
-            { //dim save buttons
-            iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdSaveAll, ETrue, ETrue );
-            }
-        else if ( chCount == 1 )
-            { //dim 'save all' button.
-            iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdSaveAll, ETrue, ETrue );
-            }
-            else
-            { //undim both
-            iToolbar->SetItemDimmed( EFMRadioToolbarButtonCmdSaveAll, EFalse, ETrue );
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::IsFrequencyScanned
-// check if the frequency is already found
-// --------------------------------------------------------------------------------
-//
-TInt CFMRadioScanLocalStationsView::FrequencyIndex( TInt aFrequency )
-    {
-    TInt frequencyIndex = KErrNotFound;
-    TInt chCount = iScannedChannels.Count();
-    
-    for ( TInt i = 0; i < chCount; i++ )
-        {
-        if ( aFrequency == iScannedChannels[ i ]->PresetFrequency() )
-            {
-            frequencyIndex = i;
-            break;
-            }
-        }
-    return frequencyIndex;
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::HandleOneChannelSaveL
-// Handle single channel save
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::HandleOneChannelSaveL()
-    {    
-    TInt currentPresetCount = iObserver.Channels().Count();
-    TInt chIndex = iContainer->CurrentlySelectedChannel();
-    TBool continueWithSave = ETrue;
-    
-    if ( !ChannelInUse( chIndex ) )
-        {
-        User::Leave( KErrNotFound );
-        }
-    // check if the channel list is full and show replace query if necessary
-    if ( currentPresetCount == KMaxNumberOfChannelListItems )
-        {
-        CAknQueryDialog* query = CAknQueryDialog::NewL();
-        if ( query->ExecuteLD( R_FMRADIO_REPLACE_EXISTING_CHANNELS_QUERY ) )
-            {
-            iObserver.UpdateChannelsL( ERemoveAllFromRepository, 0, 0  );
-            }
-        else
-            {
-            continueWithSave = EFalse;
-            }
-        }
-    if ( continueWithSave )
-        {
-        const TDesC& name = iScannedChannels[ chIndex ]->PresetNameValid() ? 
-                iScannedChannels[ chIndex ]->PresetName() : KNullDesC;
-        TInt presetFrequency = iScannedChannels[ chIndex ]->PresetFrequency();
-        iObserver.AddChannelToListL( name, 
-                                     presetFrequency );
-        iObserver.UpdateChannelsL( EStoreAllToRepository, 0, 0 );
-
-        TBool updateNowPlayingIcon = EFalse;
-        TInt tunedIndex = CurrentlyPlayingChannel();
-        // update now playing icon and list index
-        if ( chIndex == tunedIndex )
-            {
-            // channel is going be deleted so now playing index is not in the list
-            iNowPlayingIndex = KErrNotFound;
-            }
-        else if ( chIndex < tunedIndex )
-            {
-            iNowPlayingIndex = tunedIndex - 1;
-            iContainer->HideNowPlayingIconL( tunedIndex, ETrue );
-            updateNowPlayingIcon = ETrue;
-            }
-         else
-            {
-            // NOP
-            }
-        
-        // remove also from the UI list
-        iContainer->RemoveChannelListContentL( chIndex );
-        
-        if ( updateNowPlayingIcon )
-            {
-            iContainer->UpdateNowPlayingIconL( tunedIndex - 1 );
-            }
-        // received PS name is shown                                
-        if ( name.Length() > 0 )
-            {
-            HBufC* nameSavedString = StringLoader::LoadLC( R_QTN_FMRADIO_SAVING_DONE_ONE, name, iEikonEnv );
-            CAknConfirmationNote* saveInfoNote = new ( ELeave ) CAknConfirmationNote( ETrue ); // waiting
-            saveInfoNote->ExecuteLD( *nameSavedString );
-            CleanupStack::PopAndDestroy( nameSavedString );  
-            }
-        else // show frequency
-            {
-            TReal frequency = static_cast<TReal>( presetFrequency / static_cast<TReal>( KHzConversionFactor ) );
-            TRealFormat format( KFrequencyMaxLength, iRadioEngine.DecimalCount() );
-            TBuf<KFrequencyMaxLength> frequencyString;
-            frequencyString.Num( frequency, format );
-            AknTextUtils::LanguageSpecificNumberConversion( frequencyString );
-
-            HBufC* freqSavedString = StringLoader::LoadLC( R_QTN_FMRADIO_SAVING_DONE_ONE_NO_NAME, frequencyString, iEikonEnv );
-            CAknConfirmationNote* saveInfoNote = new ( ELeave ) CAknConfirmationNote( ETrue ); // waiting
-            saveInfoNote->ExecuteLD( *freqSavedString );
-            CleanupStack::PopAndDestroy( freqSavedString );
-            }
-        // channel info is removed after save
-        delete iScannedChannels[ chIndex ];
-        iScannedChannels.Remove( chIndex );
-        iScannedChannels.Compress();
-        }
-    UpdateToolbar();
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::ActivateMainViewL
-// Activates main view
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::ActivateMainViewL()
-    {
-    CAknViewAppUi* appUi = AppUi();
-    
-    if ( !appUi->IsForeground() )
-        {
-        // don't bring radio automatically to the foreground
-        // if the view is about to change
-        // and we are still in the background
-        appUi->SetCustomControl( 1 );
-        appUi->ActivateLocalViewL( KFMRadioMainViewId );
-        appUi->SetCustomControl( 0 );
-        }
-    else
-        {
-        appUi->ActivateLocalViewL( KFMRadioMainViewId );
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SetContextMenu
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::SetContextMenu( TInt aMenuTitleResourceId )
-    {
-    if ( !AknLayoutUtils::PenEnabled() )
-        {
-        CEikMenuBar* menubar = MenuBar();
-        if ( menubar )
-            {
-            menubar->SetContextMenuTitleResourceId( aMenuTitleResourceId );
-            menubar->SetMenuType( CEikMenuBar::EMenuContext );
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::HandleScanListRemConEventL
-// --------------------------------------------------------------------------------
-//
-void CFMRadioScanLocalStationsView::HandleScanListRemConEventL( TAccessoryEvent aEvent )
-    {
-    TInt scannedChannelCount = iScannedChannels.Count();
-
-    if ( scannedChannelCount >= 1 )
-        {
-        TInt selectedChannelIndex = CurrentlySelectedChannel();
-        TInt nextChannellIndex = 0;
-        
-        if ( aEvent == EForward )
-            {
-            nextChannellIndex = selectedChannelIndex + 1;
-            
-            if ( nextChannellIndex >= scannedChannelCount )
-                {
-                // go around the the list to the first channnel
-                nextChannellIndex = 0;
-                }
-            }
-        else if ( aEvent == ERewind )
-            {
-            nextChannellIndex = selectedChannelIndex - 1;
-        
-            if ( nextChannellIndex < KMinNumberOfChannelListItems )
-                {
-                // jump to the last item
-                nextChannellIndex = scannedChannelCount - 1;
-                }
-            }
-        // check that index is really a valid one
-        if ( ChannelInUse( nextChannellIndex ) )
-            {
-            TInt nextChannelFrequency = iScannedChannels[ nextChannellIndex ]->PresetFrequency();
-            // tune if necessary
-            if ( iRadioEngine.GetTunedFrequency() != nextChannelFrequency )
-                {
-                CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( iCoeEnv->AppUi() );
-                appUi->TuneL( nextChannelFrequency );
-                }
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioScanLocalStationsView::SortedFrequencyListIndex
-// --------------------------------------------------------------------------------
-//
-TInt CFMRadioScanLocalStationsView::SortedFrequencyListIndex( TInt aFrequency )
-    {
-    TInt channelCount = iScannedChannels.Count();
-    TInt sortedIndex = 0;
-    
-    for ( TInt i = 0; i < channelCount; i++ )
-        {
-        TInt presetFreq = iScannedChannels[i]->PresetFrequency();
-        
-        if ( aFrequency > presetFreq )
-            {
-            sortedIndex = i + 1;
-            }
-        else if ( aFrequency < presetFreq )
-            {
-            sortedIndex = i;
-            break;
-            }        
-        }
-    return sortedIndex;
-    }
-
-// End of File