internetradio2.0/settingsviewsrc/irsettingsviewbase.cpp
author Pat Downey <patd@symbian.org>
Tue, 18 May 2010 11:36:57 +0100
changeset 4 3f2d53f144fe
parent 2 2e1adbfc62af
permissions -rw-r--r--
Merge docml changeset with recent Nokia delivery.

/*
* Copyright (c) 2006-2006 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:  Base class for the Settings View
*
*/


#include <bldvariant.hrh>
#include <featmgr.h>
#include <hlplch.h>
#include <pathinfo.h>
#include <stringloader.h>
#include <bautils.h>
#include "ir.hrh"
#include "ircommonsettingscontainer.h"
#include "irsettingsviewbase.h"
#include "irdebug.h"
#include <aknappui.h>
#include <akntitle.h> 




// Settings view resource file.
_LIT( KIRSettingsViewResourceFile, "apps\\internetradio.rsc" );

// ======== LOCAL FUNCTIONS ========

// ======== MEMBER FUNCTIONS ========

    
// ---------------------------------------------------------------------------
// Default constructor
// ---------------------------------------------------------------------------
//
EXPORT_C CIRSettingsViewBase::CIRSettingsViewBase()
    : iSettingsBaseResourceLoader( *iCoeEnv )
    {
    IRLOG_DEBUG( "CIRSettingsViewBase::CIRSettingsViewBase " );
    }
    
// ---------------------------------------------------------------------------
// Second phase constructor
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRSettingsViewBase::BaseConstructL()
    {
    IRLOG_DEBUG( "CIRSettingsViewBase::BaseConstructL - Entering " );
    FeatureManager::InitializeLibL();
    LoadResourcesL( iSettingsBaseResourceLoader, KIRSettingsViewResourceFile );
    IRLOG_DEBUG( "CIRSettingsViewBase::BaseConstructL - Exiting " );
    }

// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
EXPORT_C CIRSettingsViewBase::~CIRSettingsViewBase()
    {
    IRLOG_DEBUG( "CIRSettingsViewBase::~CIRSettingsViewBase - Entering " );
	DeleteContainer();
    FeatureManager::UnInitializeLib();
    iSettingsBaseResourceLoader.Close();
    IRLOG_DEBUG( "CIRSettingsViewBase::~CIRSettingsViewBase - Exiting " );
    }

// ---------------------------------------------------------------------------
// LoadResourcesL()
// Loads the required resources.
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRSettingsViewBase::LoadResourcesL( RConeResourceLoader& aResourceLoader, 
                                                   const TDesC& aFileName )
    {
    IRLOG_DEBUG( "CIRSettingsViewBase::LoadResourcesL - Entering " );
    TFileName resourceFileName( KDC_RESOURCE_FILES_DIR );
    resourceFileName.Append(aFileName);
	   
    ResolveDriveL( iCoeEnv->FsSession(), resourceFileName );

    aResourceLoader.OpenL( resourceFileName );
    IRLOG_DEBUG( "CIRSettingsViewBase::LoadResourcesL - Exiting " );
    }

// ---------------------------------------------------------------------------
// DoActivateL()
// View activation
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRSettingsViewBase::DoActivateL( const TVwsViewId& aPrevViewId,
				 TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
    {
    IRLOG_DEBUG( "CIRSettingsViewBase::DoActivateL - Entering." );
    
    CreateContainerL();
    
    StatusPane()->SwitchLayoutL(R_AVKON_STATUS_PANE_LAYOUT_USUAL);
    
    iContainer->SetMopParent( this );
    AppUi()->AddToViewStackL( *this, iContainer );
    iContainer->ActivateL();
    iContainer->MakeVisible( ETrue );
    
    iPrevViewUid = aPrevViewId.iViewUid;
    IRLOG_DEBUG( "CIRSettingsViewBase::DoActivateL - Exiting " );
    
	}

// ---------------------------------------------------------------------------
// DoDeactivate()
// View deactivation
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRSettingsViewBase::DoDeactivate()
    {
	IRLOG_DEBUG( "CIRSettingsViewBase::DoDeactivate - Entering " );
    DeleteContainer();
    IRLOG_DEBUG( "CIRSettingsViewBase::DoDeactivate - Exiting " );
    }

// ---------------------------------------------------------------------------
// HandleCommandL()
// Command handler.
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRSettingsViewBase::HandleCommandL( TInt aCommand )
    {
    IRRDEBUG2( " *** Internet Radio -- CIRSettingsViewBase::HandleCommandL(%d)", aCommand );
    switch ( aCommand )
        {
		case EIRCmdChangeSetting: //Falls through
		case EAknSoftkeyChange:
			{
			TBool calledFromMenu = ( aCommand == EIRCmdChangeSetting);
			iContainer->EditCurrentItemL( calledFromMenu );
			break;
        	}
          
        case EHelpCmd:
        	{
            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
            				 AppUi()->AppHelpContextL() );
        	}
            break;
            
        //Only if invoked from settings plugin
        case EAknSoftkeyBack:
		case EIRBack:
			{
			AppUi()->ActivateLocalViewL( iPrevViewUid );	
			}
			break;
		
		case EEikCmdExit:
		case EExitCmd:  //lint -fallthrough
        case EIRExit:
		case EAknSoftkeyExit:
			{
			AppUi()->HandleCommandL(aCommand);
			}
		
		break;
		
        default:
        	AppUi()->HandleCommandL(aCommand);
        break;
        }
	    IRLOG_DEBUG( "CIRSettingsViewBase::HandleCommandL - Exiting " );
    }
 
// ---------------------------------------------------------------------------
// HandleForegroundEventL()
// Handles changes in keyboard focus when an application switches to foreground
// ---------------------------------------------------------------------------
// 
 
 EXPORT_C void CIRSettingsViewBase::HandleForegroundEventL( TBool aForeground )
	 {
	 IRLOG_DEBUG( "CIRSettingsViewBase::HandleForegroundEventL - Entering " );
	 	if(aForeground)
	 		{
	 		iContainer->UpdateStatusL();
	 		}
	 	IRLOG_DEBUG( "CIRSettingsViewBase::HandleForegroundEventL - Exiting " );
	 }
 
 
// ---------------------------------------------------------------------------
// SetTitleL()
// Sets the Title of the View
// ---------------------------------------------------------------------------
// 
 
 EXPORT_C void CIRSettingsViewBase::SetTitleL( TInt aResourceId )
    {
    IRLOG_DEBUG( "CIRSettingsViewBase::SetTitleL - Entering " );
    HBufC* title = StringLoader::LoadLC(aResourceId);
    static_cast<CAknTitlePane*>( StatusPane()->ControlL(
    			 TUid::Uid( EEikStatusPaneUidTitle ) ) )->SetTextL( *title );
    CleanupStack::PopAndDestroy( title );
    IRLOG_DEBUG( "CIRSettingsViewBase::SetTitleL - Exiting " );
    }

// ---------------------------------------------------------------------------
// DeleteContainer()
// Deletes container
// ---------------------------------------------------------------------------
//
void CIRSettingsViewBase::DeleteContainer()
    {
	IRLOG_DEBUG( "CIRSettingsViewBase::DeleteContainer - Entering " );
    if ( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        delete iContainer;
        iContainer = NULL;
    	}
    IRLOG_DEBUG( "CIRSettingsViewBase::DeleteContainer - Exiting " );
    }
    
// ---------------------------------------------------------------------------
// Static version of ResolveDriveL.
// ---------------------------------------------------------------------------
//
EXPORT_C void CIRSettingsViewBase::ResolveDriveL( const RFs& aFs, TFileName& aFileName ) 
    {
    IRRDEBUG2( "CIRSettingsViewBase::ResolveDriveL( aFileName = %S )", &aFileName );

    _LIT( resourceFileExt, ".rsc" );
    
    TParsePtrC romDrive( PathInfo::RomRootPath() );
    TParsePtrC phoneDrive( PathInfo::PhoneMemoryRootPath() );
    TParsePtrC mmcDrive( PathInfo::MemoryCardRootPath() );
    
    TParse parse;
    User::LeaveIfError( parse.Set( mmcDrive.Drive(), NULL, &aFileName ) );
    
    TBool isResourceFile = (parse.Ext() == resourceFileExt());
    
    aFileName = parse.FullName();
    
    if ( isResourceFile )
        {
        BaflUtils::NearestLanguageFile( aFs, aFileName );
        }
    
    if ( !BaflUtils::FileExists( aFs, aFileName ) )
        { 
        User::LeaveIfError( parse.Set( phoneDrive.Drive(), NULL, &aFileName ) );
        aFileName = parse.FullName();
        
        if ( isResourceFile )
            {
            BaflUtils::NearestLanguageFile( aFs, aFileName );
            }
        
        if ( !BaflUtils::FileExists( aFs, aFileName ) )
            {
            User::LeaveIfError( parse.Set( romDrive.Drive(), NULL, &aFileName ) );
            aFileName = parse.FullName();
            
            if ( isResourceFile )
                {
                BaflUtils::NearestLanguageFile( aFs, aFileName );
                }
            
            if ( !BaflUtils::FileExists( aFs, aFileName ) )
                {
                IRRDEBUG2( "CVRSettings::ResolveDriveL - File %S not found!", &aFileName );
                User::Leave( KErrNotFound );
                }
            }
        }

    IRRDEBUG2( "CIRSettingsViewBase::ResolveDriveL( aFileName = %S )", &aFileName );
    }
    
    
// ---------------------------------------------------------------------------
// GetCaptionL()
// Gets the caption
// ---------------------------------------------------------------------------
//    

EXPORT_C void CIRSettingsViewBase::GetCaptionL( TDes& aCaption ) const
    {
    IRLOG_DEBUG( "CIRSettingsViewBase::GetCaptionL - Entering " );
    aCaption.Zero();
    IRLOG_DEBUG( "CIRSettingsViewBase::GetCaptionL - Exiting " );
	return;
    }
// ======== GLOBAL FUNCTIONS ========