locationsystemui/locationsysui/locpsysettings/locpsysettingsui/src/locpsysettingsui.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:36:36 +0300
branchRCL_3
changeset 23 5944cae565c9
parent 0 667063e416a2
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
* 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:  Postioning Method Settings UI plugin to the Location System
*				  UI engine
*
*/


// System Include
#include <aknViewAppUi.h>
#include <barsread.h> 		// For TResourceReader
#include <bautils.h>
#include <StringLoader.h>
#include <locpsysettingsuiview.rsg>
#include  <eikmenub.h>						// Menu Bar


// User Includes
#include "locpsysettingsui.h"
#include "locsettingsuiobserver.h"
#include "locsettingsuiparams.h"
#include "locpsysettingsview.h"


// ---------------------------------------------------------------------------
// CLocPsySettingsUi::CLocPsySettingsUi
// C++ default constructor.
// ---------------------------------------------------------------------------
CLocPsySettingsUi::CLocPsySettingsUi( MLocSettingsUiObserver&	aSettingsUiObserver,
					 		 	 	  CAknViewAppUi&			aAppUi )
	:CLocSettingsUi( aSettingsUiObserver, aAppUi ),
	iResourceLoader( *CCoeEnv::Static())
	{
	}

// ---------------------------------------------------------------------------
// CLocPsySettingsUi::~CLocPsySettingsUi
// Destructor.
// ---------------------------------------------------------------------------	
CLocPsySettingsUi::~CLocPsySettingsUi()	
	{
	// Close the Resource loader
	iResourceLoader.Close();   
	}

// ---------------------------------------------------------------------------
// CLocPsySettingsUi* CLocPsySettingsUi::NewL
// Symbian OS two-phased constructor
// 
// @return CLocPsySettingsUi* Reference to the Settings UI object
// ---------------------------------------------------------------------------	
CLocPsySettingsUi* CLocPsySettingsUi::NewL( TAny* aParams )
	{
	CLocSettingsUiParams* 	param = reinterpret_cast<CLocSettingsUiParams *>(aParams);
	MLocSettingsUiObserver& observer = param->SettingsUiObserver();
	CAknViewAppUi& 		 appUi = param->AppUi();
	CLocPsySettingsUi* self = new ( ELeave )CLocPsySettingsUi( observer,
										  		   			   appUi );
	CleanupStack::PushL( self );
	self->ConstructL();
	CleanupStack::Pop( self );
	return self; 
	}

// ---------------------------------------------------------------------------
// void CLocPsySettingsUi::ConstructL
// Second phase constructor.
// ---------------------------------------------------------------------------	
void CLocPsySettingsUi::ConstructL()
	{
    
	// Open the Resource file for the plugin
	OpenLocalizedResourceFileL( KPosSettingsUiResFileName, 
							    iResourceLoader );
							    
	// Create the Position Method Settings UI View
	iView = CLocPsySettingsView::NewL( *this );
	
	// Transferring the view's control to AppUi
	iAppUi.AddViewL( iView );
	
	// Obtaining the View Id for reference
	iViewId = iView->Id();

	}

// ---------------------------------------------------------------------------
// void CLocPsySettingsUi::LaunchL
// Inherited from CLocSettingsUi
// Launches the Settings UI
//
// @param aUiLaunchParams	Flags that define specific configuration of
//							if the Settings UI, that the user of the API
//							wants to launch.
// ---------------------------------------------------------------------------	
void CLocPsySettingsUi::LaunchL( TInt		/* aUiLaunchParams */)
	{        
	// Activate self
	iAppUi.ActivateLocalViewL( iViewId );
	}

// ---------------------------------------------------------------------------
// void CLocPsySettingsUi::Close
// Inherited from CLocSettingsUi
// Closes the running Settings UI prematurely.
// ---------------------------------------------------------------------------	
void CLocPsySettingsUi::Close()
	{
	// Close the Menubar if it's being displayed
	iView->StopDisplayingMenuBar();
	}

// ---------------------------------------------------------------------------
// void CLocPsySettingsUi::GetCaptionL
// Inherited from CLocSettingsUi
// Method for getting caption of this plugin. This should be the 
// localized name of the settings view to be shown in parent view.
//
// @param aCaption pointer to Caption variable
// ---------------------------------------------------------------------------
void CLocPsySettingsUi::GetCaptionL( TDes& aCaption ) const
	{
	HBufC* caption = StringLoader::LoadL( R_POSSETTINGSUI_CAPTION );
    aCaption.Copy( *caption );
    delete caption;
	}

// ---------------------------------------------------------------------------
// TInt CLocPsySettingsUi::GetPriority
// Inherited from CLocSettingsUi
// Returns the priority of the UI module. 
// 
// @return Priority of the Settings UI
// ---------------------------------------------------------------------------
TInt CLocPsySettingsUi::GetPriority()
	{
	// As defined by the Location System UI UI specification, the PSY settings
	// plug-in should be inserted at the first level
	const TInt KPsyPluginPriority = 0x00000001;
	return KPsyPluginPriority;
	}

// ---------------------------------------------------------------------------
// void CLocPsySettingsUi::HandleCommandL
// Inherited from MCommandHandler
// Handles commands from the views
// 
// @param  aCommand Command ID
// ---------------------------------------------------------------------------
void CLocPsySettingsUi::HandleCommandL( TInt aCommand )
	{
	switch ( aCommand )
		{
		// Handle any plug-in specific internal commands here
		case EAknSoftkeyBack:
			{
			// The UI is intended to be closed. Pass the event 
			// to the observer
			iSettingsUiObserver.SettingClosed( KErrNone );
			break;
			}
		default:
			{
			// Un-handled commands are to be passed to the 
			// App UI
			iAppUi.HandleCommandL( aCommand );
			break;	
			}
		}
	}

// ---------------------------------------------------------------------------
// void CLocPsySettingsUi::OpenLocalizedResourceFileL
// Opens the nearest localized resourcefile using aResourceLoader. 
// aResourceLoader should be opened only once before closing it. 
// Otherwise it will raise a panic. Therefore it is better to have 
// multiple resource loaders.
// 
// @param aResourceFileName Drive and name of resource file in format 
//                          <path>:<rsc_file_name>
// @param aResourceLoader Resource loader for the resource. The loader 
//                        must not be opened allready or it will raise 
//                        a panic. It is caller's responsibility to 
//                        close the resource loader after using the 
//                        resource.
// ---------------------------------------------------------------------------	
void CLocPsySettingsUi::OpenLocalizedResourceFileL( const TDesC& 			   aResourceFileName, 
   													      RConeResourceLoader& aResourceLoader )
    {
    RFs fsSession;
    User::LeaveIfError( fsSession.Connect());
    
    // Add the RFs session to the CleanupStack
    CleanupClosePushL( fsSession );
    
	TFileName* tmpName = new(ELeave) TFileName;
    CleanupStack::PushL( tmpName );
    
    // Append the Resource Files Directory
    tmpName->Append( KDC_RESOURCE_FILES_DIR );
    
    // Append the Ressource File Name
    tmpName->Append( aResourceFileName );
    
    
    // Obtain the drive where the DLL is installed
    TFileName* dllDrive = new (ELeave) TFileName;
    CleanupStack::PushL( dllDrive );
    Dll::FileName( *dllDrive );
    
    // Obtain the Complete path for the Resource File
    TParse parse;
	User::LeaveIfError( parse.Set( *dllDrive, NULL, NULL ) );
    User::LeaveIfError( parse.Set( parse.Drive(), tmpName, NULL ) );
	TFileName* fileName = new(ELeave) TFileName;
	CleanupStack::PushL( fileName );
	fileName->Append( parse.FullName());
    
    // Get language of resource file
    BaflUtils::NearestLanguageFile( fsSession, *fileName );
        
    // Open resource file    
    aResourceLoader.OpenL( *fileName );
    
    // Pop all the fields
    CleanupStack::PopAndDestroy( fileName );
    CleanupStack::PopAndDestroy( dllDrive );
    CleanupStack::PopAndDestroy( tmpName );
    
    //If leave occurs before this, close is called automatically
    // from by the CleanupStack  
    CleanupStack::PopAndDestroy(); // fsSession
    }