basiclocationinfodisplay/blid/ui/src/Blidutils.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:31:27 +0100
branchRCL_3
changeset 18 870918037e16
parent 0 522cd55cc3d7
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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:  Provides blid utils class methods.
*
*/


// INCLUDE FILES
#include <StringLoader.h> 
#include <e32math.h>
#include <f32file.h>
#include <eikenv.h>
#include <aknViewAppUi.h>
#include <apparc.h>
#include <eikapp.h>
#include "bliduiconsts.h"
#include "Blidutils.h"

//CONSTANTS
_LIT( KTimeFormatString,":%02d%02d%02d." );
_LIT( KDistanceFormatTReal1, "%.1f" );
_LIT( KDistanceFormatInt, "%d" );


// ================= MEMBER FUNCTIONS =======================
// ----------------------------------------------------------------------------
// BlidUtils::TRealToTInt
// ----------------------------------------------------------------------------
//
TInt BlidUtils::TRealToTInt( const TReal aSrc, TInt& aResult )
    {
    TReal resultTReal(0);    
    TInt error(0);

    error = Math::Round( resultTReal, aSrc, 0 );
    if ( error != KErrNone )
    	{
        aResult = 0;
        return error;
        }

    TInt32 resultTInt(0);
    error = Math::Int( resultTInt, resultTReal );  
    if ( error != KErrNone )
        {        
        aResult = 0;
        return error;
        }    
    aResult = resultTInt;
    return error;
    }

// ----------------------------------------------------------------------------
// BlidUtils::FormatStringToTime
// ----------------------------------------------------------------------------
//
TInt BlidUtils::FormatStringToTime( TDes& aTimeString,
                                        const TReal aSeconds )
    {    
    TInt tempInt(0);
    TReal tempTReal(0);
    TInt32 timeHours(0);
    TInt32 timeMinutes(0);
    TInt32 timeSeconds(0);
    TInt error(0);
    TInt seconds;

    error = TRealToTInt( aSeconds, seconds );
    if ( error != KErrNone )
        {
        aTimeString.Zero();
        return error;
        }
    
    if ( (seconds < KDayToSeconds) && (seconds >= 0)) // less than day
        {
        // calculate hours
        error = Math::Int(timeHours,( seconds / KHourToSeconds ));    
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }

        // calculate minutes
        tempInt = seconds - (timeHours*KHourToSeconds);
        error = Math::Int(timeMinutes, ( tempInt / KMinuteToSeconds ));
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }

        // calculate seconds
        error = Math::Mod( tempTReal, seconds, KMinuteToSeconds );
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }
        
        // convert TReal to TInt
        error = Math::Int( timeSeconds, tempTReal );
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }

        }
    
    aTimeString.Format( KTimeFormatString, 
	                    timeHours, 
	                    timeMinutes, 
	                    timeSeconds );    
    return error;
    }

// ----------------------------------------------------------------------------
// BlidUtils::SecondsToDays
// ----------------------------------------------------------------------------
//
TInt BlidUtils::SecondsToDays( const TReal aSrc, TInt& aResult )
    {        
    TInt error(0);
    TInt seconds;
    
    error = TRealToTInt( aSrc, seconds );
    if ( error != KErrNone )
        {
        aResult = 0;
        return error;
        }

    TInt32 days(0);
    error = Math::Int( days, (seconds / KDayToSeconds) );
    if ( error != KErrNone )
    	{
        aResult = 0;
        return error;
        }
    aResult = days;
    return error;
    }

// ----------------------------------------------------------------------------
// BlidUtils::DistanceFormat
// ----------------------------------------------------------------------------
//
void BlidUtils::DistanceFormat( TDes& aDistanceString,
                                const TReal aDistance,
                                TBool aIstobeDecimal )
    {
    TReal distance( aDistance );
    
    if( aIstobeDecimal )
	    {
	    aDistanceString.Format( KDistanceFormatTReal1, distance );	
	    }
	else
		{
		aDistanceString.Format( KDistanceFormatInt, ( TInt )distance );	
		}	    
    }

// ----------------------------------------------------------------------------
// BlidUtils::GetBitmapFilenameL
// ----------------------------------------------------------------------------
//
HBufC* BlidUtils::GetBitmapFilenameLC()
    {
    // Path and file name:
    TFileName* file = new( ELeave ) TFileName;
    CleanupStack::PushL( file );
    file->Append( KBlidSystemMbmPath ); // always safe
    file->Append( KBlidBitmapFileName ); // always safe   
    
    // Drive:    
    TBuf<10> aApp;
    CEikAppUi *appUi = (CEikAppUi *)(CEikonEnv::Static()->AppUi());
    TFileName full = appUi->Application()->AppFullName();
        
    TParsePtr ptr(full); 
    aApp.Copy(ptr.Drive()); 


    // Add drive to path & file name:
    TParse parse;
    User::LeaveIfError( parse.Set( *file, &aApp, NULL ) );
    CleanupStack::PopAndDestroy(); // file

    return parse.FullName().AllocLC();
    }
    
// ----------------------------------------------------------------------------
// BlidUtils::FormatTimeToString
// ----------------------------------------------------------------------------
//
TInt BlidUtils::FormatTimeToString( TDes& aTimeString,
                                        const TReal aSeconds )
    {    
    TInt tempInt(0);
    TReal tempTReal(0);
    TInt32 timeHours(0);
    TInt32 timeMinutes(0);
    TInt32 timeSeconds(0);
    TInt error(0);
    TInt seconds;

    error = TRealToTInt( aSeconds, seconds );
    if ( error != KErrNone )
        {
        aTimeString.Zero();
        return error;
        }
    
    if (seconds >= 0) 
        {
        // calculate hours
        error = Math::Int(timeHours,( seconds / KHourToSeconds ));    
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }

        // calculate minutes
        tempInt = seconds - (timeHours*KHourToSeconds);
        error = Math::Int(timeMinutes, ( tempInt / KMinuteToSeconds ));
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }

        // calculate seconds
        error = Math::Mod( tempTReal, seconds, KMinuteToSeconds );
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }
        
        // convert TReal to TInt
        error = Math::Int( timeSeconds, tempTReal );
        if ( error != KErrNone )
            {
            aTimeString.Zero();
            return error;
            }

        }
    
    aTimeString.Format( KTimeFormatString, 
	                    timeHours, 
	                    timeMinutes, 
	                    timeSeconds );    
    return error;
    }


// End of File