fmradio/fmradio/src/fmradiochannellistview.cpp
branchRCL_3
changeset 19 cce62ebc198e
parent 18 1a6714c53019
child 20 93c594350b9a
--- a/fmradio/fmradio/src/fmradiochannellistview.cpp	Thu Aug 19 09:55:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1102 +0,0 @@
-/*
-* Copyright (c) 2005 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 CFMRadioChannelListView
-*
-*/
-
-
-// INCLUDE FILES
-#include <featmgr.h>
-#include <aknViewAppUi.h>
-#include <akntitle.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 <AknQueryDialog.h>
-#include <aknnotewrappers.h>
-#include <data_caging_path_literals.hrh>
-#include <aknbutton.h>
-#include <akntoolbar.h>
-
-#include "fmradioengine.h"
-#include "fmradio.hrh"
-#include "fmradiochannellistview.h"
-#include "fmradiochannellistcontainer.h"
-#include "debug.h"
-#include "fmradiordsreceiverbase.h"
-#include "fmradiopubsub.h"
-#include "fmradiofrequencyquerydialog.h"
-#include "fmradioappui.h"
-
-const TInt KMSKControlID(3);
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::NewL
-// Two-phase constructor of CFMRadioChannelListView
-// ---------------------------------------------------------------------------
-//
-CFMRadioChannelListView* CFMRadioChannelListView::NewL(
-    CRadioEngine* aRadioEngine, MChannelListHandler& aObserver )
-    {
-    CFMRadioChannelListView* self = new ( ELeave ) CFMRadioChannelListView( aObserver );
-    CleanupStack::PushL(self);
-    self->ConstructL(aRadioEngine);
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::CFMRadioChannelListView
-//
-// ---------------------------------------------------------------------------
-//
-CFMRadioChannelListView::CFMRadioChannelListView( MChannelListHandler& aObserver ) :
-    iNowPlayingIndex( KErrNotFound ),
-	iObserver( aObserver )	
-	{
-	}
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::ConstructL
-// EPOC two-phased constructor
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::ConstructL(
-    CRadioEngine* aRadioEngine)
-    {    
-    iRadioEngine = aRadioEngine;
-    BaseConstructL( R_FMRADIO_CH_LIST_VIEW );
-    PrepareToolbar();
-    
-    if ( !AknLayoutUtils::PenEnabled() )
-        {
-        iToolbar->SetToolbarVisibility( EFalse );
-        }
-       
-    //called here to ensure that empty channels are named in the way we want them to be.
-    InitializeChannelsL();
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::~CFMRadioChannelListView
-// Class destructor
-// ---------------------------------------------------------------------------
-//
-CFMRadioChannelListView::~CFMRadioChannelListView()
-    {
-    if ( iContainer )
-        {
-        AppUi()->RemoveFromViewStack( *this, iContainer );
-        }
-    delete iContainer;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::Id
-// Return the unique identifier corresponding to this view
-// ---------------------------------------------------------------------------
-//
-TUid CFMRadioChannelListView::Id() const
-    {
-    return KFMRadioChannelListViewId;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::DoActivateL
-// Activate the channel list view
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::DoActivateL(
-    const TVwsViewId& /*aPrevViewId*/,
-    TUid /*aCustomMessageId*/,
-    const TDesC8& /*aCustomMessage*/ )
-    {
-    FTRACE( FPrint( _L("CFMRadioChannelListView::DoActivateL  Start") ) );
-
-    iRadioEngine->RdsReceiver().AddObserver(this);
-    
-    iFirstMoveDone = ETrue;
-
-    SetTitleL( R_FMRADIO_STATIONS_VIEW_TITLE );
-
-    if ( !iContainer )
-        {
-        FTRACE( FPrint( _L("CFMRadioChannelListView::DoActivateL  inside second, not iContainer if") ) );
-        iContainer = CFMRadioChannelListContainer::NewL( ClientRect(), *iRadioEngine, iObserver );
-        iContainer->SetMopParent( this );
-        iContainer->SetObserver( this );
-        AppUi()->AddToStackL( *this, iContainer );
-        }
-    
-    InitializeChannelsL();
-    
-    FadeAndShowExit( iFaded );
-    
-    AppUi()->HandleCommandL( EFMRadioCmdChannelListViewActive );
-    
-    UpdateMiddleSoftKeyL();
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::HandleCommandL
-// Interprets view's menu,softkey and other commands and acts
-// accordingly by calling the appropriate command handler
-// function for further action.
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::HandleCommandL( TInt aCommand )
-    {
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( AppUi() );
-    switch ( aCommand )
-        {
-    	case EFMRadioCmdMove:
-        	{
-            MoveCurrentItemIndexL();
-        	break;
-        	}
-    	case EFMRadioCmdDone:
-    		{
-    		iMoveMode = EFalse;
-    		iFirstMoveDone = ETrue;
-    		Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-    		
-    		UpdateMiddleSoftKeyL();
-
-    		iContainer->MoveDoneL();
-            TInt currentIndex = 0;
-            currentIndex = appUi->MatchingChannelL( iRadioEngine->GetTunedFrequency() );
-            if ( currentIndex != KErrNotFound )
-                {
-                iRadioEngine->SetCurrentPresetIndex( currentIndex );
-                SetNowPlayingChannel( currentIndex );
-                }
-            ShowToolbar( ETrue );
-    		break;
-    		}
-    	case EFMRadioCmdDrop:
-    		{
-    		iFirstMoveDone = EFalse;
-    		Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_GRAP_DONE );    		    		
-    		iContainer->HandleDropL();
-    		break;
-    		}
-    	case EFMRadioCmdGrap:
-    		{
-        	if ( iFirstMoveDone )
-        		{
-                Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_DROP_CANCEL );
-        		}
-        	else
-        		{
-                Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_DROP_DONE );
-        		}
-        	iContainer->ActivateMoveL();
-        	break;
-    		}
-        case EAknSoftkeyBack:   // Go back to the main view
-            {
-            appUi->ActivateLocalViewL( KFMRadioMainViewId );
-            break;
-            }
-        case EEikBidCancel:
-            {
-            CancelMoveL();
-            break;
-            }
-        case EAknSoftkeySelect: // Save a channel to the highlighted slot
-            {
-            break;
-            }
-        case EFMRadioCmdTuneManually:
-        	{
-        	// If manual tuning is canceled, return to previously tuned frequency. 	
-			TUint32 prevFreq = iRadioEngine->GetTunedFrequency() / KFMRadioFreqMultiplier;
-			TUint32 retFreq = prevFreq;
-			
-			iManualQueryDialog = CFMRadioFrequencyQueryDialog::NewL( retFreq );            
-            iManualQueryDialog->SetObserver( this );
-			
-			TInt res = iManualQueryDialog->ExecuteLD( R_FMRADIO_MANUAL_TUNING_QUERY );
-
-			if ( res )
-				{				
-                if ( iObserver.Channels().Count() < KMaxNumberOfChannelListItems )
-					{
-					TInt usefreq = static_cast<TInt>( retFreq * KFMRadioFreqMultiplier );
-					iRadioEngine->Tune( usefreq );
-					TBuf<KPresetNameLength> stationName;
-					stationName.SetLength( 0 );
-				
-					iObserver.AddChannelToListL( stationName, usefreq );
-					
-					iObserver.UpdateChannelsL( EStoreAllToRepository, 0, 0 );
-					
-					iContainer->AddChannelL( stationName, usefreq, ETrue );	
-					
-                    iRadioEngine->TunePresetL( iObserver.Channels().Count() - 1 );
-					
-					TInt index = iRadioEngine->GetPresetIndex();
-					
-					iContainer->UpdateItemIconL( index, KNowPlayingIconIndexChList );
-					
-                    iContainer->UpdateLastListenedChannel( index ); // Update index
-					}
-				else
-					{
-					// Show icon, or overwrite last item, or selected item?
-					CAknInformationNote* infonote = new( ELeave ) CAknInformationNote();
-			    	
-				    HBufC* noteText = StringLoader::LoadLC( 
-				    		R_QTN_FMRADIO_LIST_QUERY_LIST_FULL, iCoeEnv );
-				    
-				    
-				    infonote->ExecuteLD( *noteText );
-				    	   
-				    CleanupStack::PopAndDestroy( noteText );					
-					}					
-				}
-			else //cancel pressed, return to previous frequency
-				{
-				iRadioEngine->Tune( static_cast<TInt>( prevFreq * KFMRadioFreqMultiplier ) );				
-				}
-        	break;
-        	}
-        case EFMRadioCmdListenCh:
-            {
-            if ( !AknLayoutUtils::PenEnabled() )
-                {
-                appUi->HandleCommandL( aCommand );
-                // update msk here
-                UpdateMiddleSoftKeyL();
-                }
-            if ( iMoveMode )
-                {
-                MoveActionDoneL();
-                }
-            break;
-            }
-        case EFMRadioToolbarButtonCmdToggleIhf:
-            {
-            if ( iRadioEngine->GetAudioOutput() == CRadioEngine::EFMRadioOutputHeadset )
-                {
-                appUi->HandleCommandL( EFMRadioCmdActivateIhf );
-                }
-            else
-                {
-                appUi->HandleCommandL( EFMRadioCmdDeactivateIhf );
-                }
-            break;
-            }
-        case EFMRadioCmdErase:
-            {
-            if ( iObserver.Channels().Count() > 0 )
-                {
-                TInt selectedIndex = CurrentlySelectedChannel();
-                
-                if ( appUi->EraseChannelL( selectedIndex ) )
-                    {
-                    if ( iContainer )
-                        {
-                        iContainer->RemoveChannelL( selectedIndex );
-                        }
-                    // Dim the rename and delete buttons in case the list is now empty
-                    UpdateToolbar();
-                    }
-                }
-            break;
-            }
-        default: // Send all other commands to AppUi
-        	{        		        	
-        	appUi->HandleCommandL( aCommand );
-            break;
-        	}
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::SetLastListenedChannel
-// Keep track of the last selected channel
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::SetLastListenedChannel( TInt aIndex )
-    {
-    iChIndex = aIndex;
-    if ( iContainer && !iMoveMode )
-        {
-        iContainer->UpdateLastListenedChannel( aIndex ); // Update index
-        }
-    }
-    
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::SetNowPlayingChannel
-// Keep track of the current selected channel
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::SetNowPlayingChannel( TInt aChannelIndex ) 
-    {
-    iNowPlayingIndex = aChannelIndex;
-    
-    if ( iContainer && !iMoveMode )
-        {
-        TRAP_IGNORE( iContainer->UpdateItemIconL( aChannelIndex, KNowPlayingIconIndexChList ) )
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::CurrentlyPlayingChannel
-// Returns the index of the playing channel item from the channel list.
-// ---------------------------------------------------------------------------
-//
-TInt CFMRadioChannelListView::CurrentlyPlayingChannel()
-	{
-	return iNowPlayingIndex;
-	}
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::InitializeChannelsL
-// Initialize the channels with the values currently saved in
-// the radio engine
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::InitializeChannelsL()
-    {
-    FTRACE( FPrint( _L("CFMRadioChannelListView::InitializeChannelsL  Start") ) );
-    
-    if ( iContainer )
-        {
-        TBool nowPlaying = EFalse;
-        
-        RPointerArray<CFMRadioPreset>& channels = iObserver.Channels();        
-        TInt channelCount = channels.Count();
-        
-        for ( TInt channelIndex = 0; channelCount > channelIndex; channelIndex++ )
-            {
-            FTRACE( FPrint( _L("CFMRadioChannelListView::InitializeChannelsL  inside Channel in use") ) );
-
-            iContainer->AddChannelL( channels[ channelIndex ]->PresetName(),
-                   channels[ channelIndex ]->PresetFrequency(),
-                   nowPlaying );
-            
-            UpdateMiddleSoftKeyL();
-            FTRACE( FPrint( _L("CFMRadioChannelListView::InitializeChannelsL  inside Channel in use Channel = %d"), iRadioEngine->GetPresetFrequencyL( channelIndex )) );
-            }
-        
-        CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( AppUi() );
-        
-        TInt currentPresetIndex = iRadioEngine->GetPresetIndex();
-        TInt chIndexForTunedFreq = appUi->MatchingChannelL( iRadioEngine->GetTunedFrequency() );
-        
-        if ( iRadioEngine->GetRadioMode() == CRadioEngine::ERadioPresetMode &&
-                currentPresetIndex < channelCount &&
-                currentPresetIndex >= 0 )
-            {
-            SetLastListenedChannel( currentPresetIndex );
-            SetNowPlayingChannel( currentPresetIndex );
-            }
-        else if ( chIndexForTunedFreq != KErrNotFound )
-            {
-            SetLastListenedChannel( chIndexForTunedFreq );
-            SetNowPlayingChannel( chIndexForTunedFreq );
-            }
-        else
-            {
-            SetLastListenedChannel( 0 );
-            }
-        }
-    FTRACE(FPrint(_L("InitializeChannelsL complete")));
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::ChannelInPlay
-// Return true/false to indicate whether the channel specified
-// is in play
-// ---------------------------------------------------------------------------
-//
-TBool CFMRadioChannelListView::ChannelInPlay(
-    TInt aChannelIndex ) const
-    {
-    if( aChannelIndex == iNowPlayingIndex )
-    	{
-    	return ETrue;
-    	}
-    else 
-    	{
-    	return EFalse;
-    	}
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::FadeAndShowExit
-// Fade the view and all controls associated with it. Change
-// the soft keys so that "Exit" is displayed
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::FadeAndShowExit( TBool aFaded )
-    {
-    iFaded = aFaded;
-    if( iContainer && iToolbar )
-        {
-        if ( aFaded ) // Fade
-            {
-            // In case options menu is open when headset is disconnected
-            StopDisplayingMenuBar();
-            iContainer->SetFaded( aFaded );
-            iToolbar->SetDimmed( ETrue );
-            TRAP_IGNORE( Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_EXIT ) );
-            }
-        else
-            {
-            iContainer->SetFaded(aFaded);
-            iToolbar->SetDimmed( EFalse );
-            UpdateToolbar();
-            
-            if ( iMoveMode )
-                {
-                TRAP_IGNORE
-                    (
-                    Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_EMPTY_CANCEL );
-                    UpdateMiddleSoftKeyL();
-                    )
-                }
-            else
-                {
-                TRAP_IGNORE( Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ) );
-                }
-            }
-        Cba()->DrawDeferred();
-        iToolbar->DrawDeferred();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::UpdateDisplayForFocusGained
-// Update the view after a focus gained event.
-// 1. Fade/Unfade view
-// 2. Update MSK label
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::UpdateDisplayForFocusGained()
-    {
-    FadeAndShowExit( iFaded );
-    
-    // Don't display MSK if display is faded.
-    if ( !iFaded )
-    	{
-    	TRAP_IGNORE( UpdateMiddleSoftKeyL() );
-    	}
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::UpdateChannelListContentL
-// Make a request to the channel container to update the
-// content of the channel at aIndex with the values specified
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::UpdateChannelListContentL(
-    TInt aIndex,
-    const TDesC& aChannelName,
-    TInt aChannelFrequency )
-    {
-    if ( iContainer )
-        {
-        iContainer->UpdateChannelListContentL( aIndex, aChannelName, aChannelFrequency );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::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 CFMRadioChannelListView::CurrentlySelectedChannel()
-    {
-    if ( iContainer )
-        {
-        iChIndex = iContainer->CurrentlySelectedChannel();
-        }
-    return iChIndex;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::NextChannel
-// Retrieve the index of the next channel that has been set.
-// ---------------------------------------------------------------------------
-//
-TInt CFMRadioChannelListView::NextChannel()
-    {
-    if ( iContainer )
-        {
-        iChIndex = iContainer->CurrentlySelectedChannel();
-        }
-    else
-        {
-        iChIndex = iRadioEngine->GetPresetIndex();
-        }
-
-    iChIndex = iChIndex + 1;
-    
-    if ( iChIndex >= iObserver.Channels().Count() )
-    	{
-    	iChIndex = 0;
-    	}
-    
-    return iChIndex;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::PreviousChannel
-// Retrieve the index of the previous channel that has been set.
-// ---------------------------------------------------------------------------
-//
-TInt CFMRadioChannelListView::PreviousChannel()
-    {
-    if ( iContainer )
-        {
-        iChIndex = iContainer->CurrentlySelectedChannel();
-        }
-    else
-        {
-        iChIndex = iRadioEngine->GetPresetIndex();
-        }
-    
-        
-    if ( iChIndex <= 0 )
-    	{
-    	iChIndex = iObserver.Channels().Count() - 1;
-    	}
-    else
-    	{
-    	iChIndex = iChIndex - 1;
-    	}
-    
-    return iChIndex;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::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 CFMRadioChannelListView::HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType )
-    {
-    if ( aControl == iContainer )
-        {
-        // don't change channels in move mode
-        if ( !iMoveMode )
-            {
-            if ( aEventType == MCoeControlObserver::EEventRequestFocus )
-                {
-                // Don't display MSK when display is faded.
-                if ( !iFaded )
-                    {
-                    if ( !AknLayoutUtils::PenEnabled() )
-                        {
-                        UpdateMiddleSoftKeyL();
-                        }
-                    else
-                        {
-                        AppUi()->HandleCommandL( EFMRadioCmdListenCh );
-                        }
-                     }
-                }
-        
-            else if ( aEventType == MCoeControlObserver::EEventStateChanged )
-                    {
-                    // Send command to Ui
-                    AppUi()->HandleCommandL( EFMRadioCmdListenCh );
-                    }
-            }
-        }
-    
-    else if ( iManualQueryDialog && aControl == iManualQueryDialog && aEventType == MCoeControlObserver::EEventStateChanged )
-        {
-        TUint32 newFreq = static_cast<CFMRadioFrequencyQueryDialog*>( iManualQueryDialog )->Frequency();
-        iRadioEngine->Tune( static_cast<TInt>( newFreq * KFMRadioFreqMultiplier ) );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::DoDeactivate
-// Deactivate the channel list view
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::DoDeactivate()
-    {
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>(AppUi());
-    if ( appUi->RadioEngine() )
-        {
-        iRadioEngine->RdsReceiver().RemoveObserver( this );
-        }
-    
-    if ( iContainer )
-        {
-        appUi->RemoveFromViewStack( *this, iContainer );
-        }
-    delete iContainer;
-    iContainer = NULL;
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::DynInitMenuPaneL
-// Sets the state of menu items dynamically according to the
-// state of application data.
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
-    {
-    if ( aResourceId == R_FMRADIO_CH_LIST_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 );
-            }
-        
-        // if help is not enabled, disable help option
-        if ( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
-            {
-            aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue );
-            }
-        
-        TInt channelCount = iObserver.Channels().Count();
-        
-        // don't show stylus pop-up menu during move operation
-        if ( channelCount > 1 && !iMoveMode )
-            {
-            aMenuPane->SetItemDimmed( EFMRadioCmdMove, EFalse );
-            }
-        else
-            {
-            aMenuPane->SetItemDimmed( EFMRadioCmdMove, ETrue );
-            }
-        
-        if ( iMoveMode || channelCount < 1 )
-            {
-            // hide rename and erase 
-            aMenuPane->SetItemDimmed( EFMRadioCmdRename, ETrue );
-            aMenuPane->SetItemDimmed( EFMRadioCmdErase, ETrue );
-            }
-        else
-            {
-            aMenuPane->SetItemDimmed( EFMRadioCmdRename, EFalse );
-            aMenuPane->SetItemDimmed( EFMRadioCmdErase, EFalse );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CFMRadioChannelListView::LayoutChangedL
-// ---------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::LayoutChangedL( TInt aType )
-    {
-    if ( iContainer )
-        {
-        iContainer->SetRect( ClientRect() );
-        iContainer->HandleResourceChange( aType );
-        }
-    }
-
-// ---------------------------------------------------------------------------------------------
-// Sets middle softkey label.
-// ---------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::SetMiddleSoftKeyLabelL(
-    TInt aResourceId,
-    TInt aCommandId )
-    {
-
-    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;
-        }
-    }
-
-// ---------------------------------------------------------------------------------------------
-// Updates the middle softkey functionality.
-// ---------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::UpdateMiddleSoftKeyL()
-    {
-    
-    if ( ( iContainer && 
-    		( iContainer->CurrentlySelectedChannel() == iRadioEngine->GetPresetIndex() 
-    		|| iObserver.Channels().Count() == 0 ) ) || 
-    		iMoveMode )
-    	{
-    	SetMiddleSoftKeyLabelL(R_QTN_FMRADIO_NONE, EFMRadioCmdListenCh);
-    	}
-    else
-    	{
-    	SetMiddleSoftKeyLabelL(R_QTN_FMRADIO_MSK_LISTEN, EFMRadioCmdListenCh);
-    	}
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioChannelListView::SetEmptyChannelListItem
-// Set empty channel list item when preset is deleted from fmradiopresetutility
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::SetEmptyChannelListItemL( const TInt aIndex ) const
-	{
-	FTRACE( FPrint( _L("CFMRadioChannelListView::SetEmptyChannelListItem index = %d"), aIndex ) );
-	
-	if ( iContainer )
-		{					
-	    iContainer->RemoveChannelL( aIndex );	    	    
-	    }
-
-	// Dim the rename and delete buttons in case the list is now empty
-	UpdateToolbar();
-	}
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioChannelListView::RdsDataProgrammeService
-// 
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::RdsDataProgrammeService( const TDesC& /*aProgramService*/ )
-	{
-	}
-
-// --------------------------------------------------------------------------------
-// CFMRadioChannelListView::RdsDataPsNameIsStatic
-// --------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::RdsDataPsNameIsStatic( TBool aStatic )
-    {
-    const TDesC& programmeService = iRadioEngine->RdsReceiver().ProgrammeService();
-    if ( iContainer && 
-            aStatic && 
-            programmeService.Length() &&
-            !iMoveMode )
-        {
-        TInt currentPresetIx = iRadioEngine->GetPresetIndex();
-        // When we haven't preset name, ps name will save as preset name
-        if ( iRadioEngine->GetRadioMode() == CRadioEngine::ERadioPresetMode &&
-                currentPresetIx != KErrNotFound )
-            {
-            RPointerArray<CFMRadioPreset>& channels = iObserver.Channels();
-            
-            // this checks that index is not out of bound and cause -21 error during update
-            if ( currentPresetIx < channels.Count() )
-                {
-                const TDesC& stationName = channels[ currentPresetIx ]->PresetName();
-                TInt presetFreq = channels[ currentPresetIx ]->PresetFrequency();
-                                
-                if ( stationName.Length() == 0 ) //Set and save PSname only if no name set before
-                    {
-                    TRAP_IGNORE(
-                        {
-                        iContainer->UpdateChannelListContentL( currentPresetIx,
-                                programmeService,
-                                presetFreq );
-
-                        iRadioEngine->SetPresetNameFrequencyL( currentPresetIx, programmeService, presetFreq );
-                        channels[ currentPresetIx ]->SetPresetNameL( programmeService );
-                        } )
-                    }
-                }
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioMainView::PrepareToolbar
-// Prepare toolbar for displaying basic radio command buttons
-// --------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::PrepareToolbar()
-    {
-    // get toolbar from view
-    iToolbar = Toolbar();
-    // Set observer
-    iToolbar->SetToolbarObserver( this );
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioMainView::UpdateToolbar
-// Set the dimmed status of buttons according to list state
-// --------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::UpdateToolbar() const
-    {
-    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 );
-            }
-        }
-    }
-
-// --------------------------------------------------------------------------------
-// CFMRadioChannelListView::OfferToolbarEventL
-// Handle commands from toolbar.
-// --------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::OfferToolbarEventL( TInt aCommandId )
-    {
-    HandleCommandL( aCommandId );
-    }
-
-// ---------------------------------------------------------
-// CFMRadioChannelListView::ShowToolbar
-// Sets toolbar visibility.
-// ---------------------------------------------------------
-//
-void CFMRadioChannelListView::ShowToolbar( TBool aVisible )
-    {
-    if ( AknLayoutUtils::PenEnabled() &&
-         iToolbar &&
-         iContainer )
-        {
-        iToolbar->SetToolbarVisibility( aVisible );
-        iToolbar->UpdateBackground();
-        iToolbar->DrawDeferred();
-        // set correct container rect with or without toolbar
-        iContainer->SetRect( ClientRect() );
-        }
-    }
-
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioChannelListView::RdsDataRadioText
-// From MFMRadioRdsObserver, implementation not needed.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::RdsDataRadioText( const TDesC& /*aRadioText*/ ){}
-
-void CFMRadioChannelListView::RdsDataRadioTextPlus( const TInt aRTPlusClass, const TDesC& aRadioText )
-    {
-    if ( aRTPlusClass == ERTplusProgramHomepage &&
-            iRadioEngine->GetRadioMode() == CRadioEngine::ERadioPresetMode )
-        {
-        TInt currentPresetIx = iRadioEngine->GetPresetIndex();
-        if ( currentPresetIx < iObserver.Channels().Count() )
-            {
-            TRAP_IGNORE
-                (
-                // save permanently
-                iRadioEngine->SaveUrlToPresetL( currentPresetIx, aRadioText );
-                // save to ui list
-                iObserver.Channels()[ currentPresetIx ]->SetPresetUrlL( aRadioText );
-                )
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioChannelListView::RdsAfSearchBegin
-// From MFMRadioRdsObserver, implementation not needed.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::RdsAfSearchBegin(){}
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioChannelListView::RdsAfSearchEnd
-// From MFMRadioRdsObserver, implementation not needed.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::RdsAfSearchEnd( TUint32 /* aFrequency*/, TInt /*aError*/ ){}
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioChannelListView::RdsAfSearchStateChange
-// From MFMRadioRdsObserver, implementation not needed.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::RdsAfSearchStateChange( TBool /* aEnabled*/ ){}
-
-// -----------------------------------------------------------------------------------------------
-// CFMRadioChannelListView::RdsAvailable
-// From MFMRadioRdsObserver, implementation not needed.
-// -----------------------------------------------------------------------------------------------
-//
-void CFMRadioChannelListView::RdsAvailable( TBool /*aAvailable*/ ){}
-
-// ---------------------------------------------------------
-// CFMRadioChannelListView::SetTitleL
-// ---------------------------------------------------------
-//
-void CFMRadioChannelListView::SetTitleL( TInt aResourceId )
-    {
-    HBufC* title = StringLoader::LoadLC( aResourceId, iCoeEnv );
-    static_cast<CAknTitlePane*>( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( *title, ETrue );
-    CleanupStack::PopAndDestroy( title );
-    }
-
-
-// ---------------------------------------------------------
-// CFMRadioChannelListView::MoveCurrentItemIndexL
-// ---------------------------------------------------------
-//
-void CFMRadioChannelListView::MoveCurrentItemIndexL()
-    {
-    iMoveMode = ETrue;
-    
-    Cba()->SetCommandSetL( R_FMRADIO_SOFTKEYS_EMPTY_CANCEL );
-    UpdateMiddleSoftKeyL();
-    ShowToolbar( EFalse );
-    
-    iContainer->HideIconsL();
-
-    iContainer->ActivateMoveL();
-    }
-
-// ---------------------------------------------------------
-// CFMRadioChannelListView::MoveActionDoneL
-// ---------------------------------------------------------
-//
-void CFMRadioChannelListView::MoveActionDoneL()
-    {
-    iMoveMode = EFalse;
-    iFirstMoveDone = ETrue;
-    Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-    
-    UpdateMiddleSoftKeyL();
-    iContainer->HandleDropL();
-    iContainer->MoveDoneL();
-    
-    TInt currentIndex = 0;    
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( AppUi() );
-    currentIndex = appUi->MatchingChannelL( iRadioEngine->GetTunedFrequency() );
-    
-    if ( currentIndex != KErrNotFound )
-        {
-        iRadioEngine->SetCurrentPresetIndex( currentIndex );
-        SetNowPlayingChannel( currentIndex );
-        }
-    ShowToolbar( ETrue );
-    }
-
-// ---------------------------------------------------------
-// CFMRadioChannelListView::CancelMoveL
-// ---------------------------------------------------------
-//
-void CFMRadioChannelListView::CancelMoveL()
-    {
-    CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( AppUi() );
-    TBool viewActive = appUi->ActiveView() == KFMRadioChannelListViewId && iContainer;
-    if ( viewActive && ( iContainer->MoveCanceledL() || iMoveMode ) )
-        {
-        iMoveMode = EFalse;
-        iFirstMoveDone = ETrue;
-        iContainer->ReIndexAllL();
-        Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
-        UpdateMiddleSoftKeyL();
-        TInt currentIndex = 0;
-        currentIndex = appUi->MatchingChannelL( iRadioEngine->GetTunedFrequency() );
-        if ( currentIndex != KErrNotFound )
-            {
-            SetNowPlayingChannel( currentIndex );
-            }
-        ShowToolbar( ETrue );
-        }
-    }
-
-// ---------------------------------------------------------
-// CFMRadioChannelListView::StopSeekL
-// ---------------------------------------------------------
-//
-void CFMRadioChannelListView::StopSeekL()
-    {
-    // update icon if radio is in tuner mode i.e.
-    // "accessory seek up/down" is launched
-    if ( iContainer &&
-            iRadioEngine->GetRadioMode() == CRadioEngine::ERadioTunerMode )
-        {
-        CFMRadioAppUi* appUi = static_cast<CFMRadioAppUi*>( AppUi() );
-        TInt tunedFrequency = iRadioEngine->GetTunedFrequency();
-        const TInt index = appUi->MatchingChannelL( tunedFrequency );
-
-        if ( index == KErrNotFound )
-            {
-            // frequency is not saved, hide now playing icon
-            iContainer->HideIconsL();
-            }
-        else
-            {
-            SetNowPlayingChannel( index );
-            SetLastListenedChannel( index );
-            }
-        }
-    }
-
-// End of File