locationsystemui/locationsysui/locblidsatelliteinfo/src/satellitecontrol.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:06:48 +0200
changeset 0 667063e416a2
child 7 19bff11d6c18
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 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: 
*     Implements the control for responsible for all drawings
*     in the satellite dialog
*
*/


// INCLUDE FILES
#include <skinlayout.cdl.h>
#include <AknsSkinInstance.h>
#include <AknsUtils.h>
#include <AknsDrawUtils.h>
#include <StringLoader.h>
#include <AknsFrameBackgroundControlContext.h>
#include <aknlayoutscalable_avkon.cdl.h>
#include <aknViewAppUi.h>
#include <aknlayoutscalable_apps.cdl.h>
#include <SatInfo.rsg>
#include <AknBidiTextUtils.h>
#include <lbssatellite.h>
#include <satellite.mbg>
#include <eikapp.h>
#include <AknLayout2Def.h>
#include <layoutmetadata.cdl.h>
//===HEADER FILE INCLUDED FOR HACK=======
#include <AknLayoutFont.h>
#include <aknlocationed.h>
// header file added for multiple drive support.
#include <pathinfo.h>

#ifdef RD_TACTILE_FEEDBACK
#include <touchfeedback.h>
#endif //RD_TACTILE_FEEDBACK

#include "satellitecontrol.h"

#include  <centralrepository.h>
#include <locationvariationdomaincrkeys.h>
// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CSatelliteControl::CSatelliteControl
// ---------------------------------------------------------
//
CSatelliteControl::CSatelliteControl(MSatelliteEng& aEngine): iEngine(aEngine)               
    {
    //By defaul start with signal strength view
    iCurrentSatelliteView = ESignalStrengthView;
    iSatelliteSignalHeading = NULL;
    iSatelliteGrapgicHeading = NULL;
    }

// ---------------------------------------------------------
// CSatelliteControl::~CSatelliteControl
// ---------------------------------------------------------
//
CSatelliteControl::~CSatelliteControl()
    {    
    AknsUtils::DeregisterControlPosition(this);
    delete iEditorContext;
    delete iSatelliteSignalHeading;
    delete iSatelliteGrapgicHeading;
    delete iCompassViewHeading;
    delete iNoSatelliteData;
    delete iSatActiveBmp;
    delete iSatActiveBmpMask;
    delete iSatInActiveBmp;
    delete iSatInActiveBmpMask;
    delete iSatFrame;
    delete iSatFrameMask;
    delete iFirmamentBmp;
    delete iFirmamentBmpMask;
    delete iFirmaActiveBmp;
    delete iFirmaActiveBmpMask;
    delete iFirmaInActiveBmp;
    delete iFirmaInActiveBmpMask;
    delete iSunBmp;
    delete iSunBmpMask;
    delete iMoonBmp;
    delete iMoonBmpMask;
    delete iFirmamentCompassBmp;
    delete iFirmamentCompassBmpMask;
    delete iFixBmp;
    delete iFixBmpMask;
	delete iAltitudeWindowHeading;
	delete iSpeedWindowHeading;
	delete iDirectionWindowHeading;
	delete iSpeedFormatKmph;
	delete iSpeedFormatMph;
	delete iAltitudeFormatM;
	delete iAltitudeFormatFt;
	delete iDirectionFormat;
    delete iCompassNorth;
    delete iCompassSouth;
    delete iCompassWest;
	delete iCompassEast;
    delete iNorth;
    delete iSouth;
    delete iWest;
	delete iEast;
	delete i2DString;
	delete i3DString;
    iSignalBarRects.Reset();
    iSatelliteNumberLayouts.Reset();
    }

// ---------------------------------------------------------
// CSatelliteControl::NewL
// ---------------------------------------------------------
//
CSatelliteControl* CSatelliteControl::NewL(MSatelliteEng& aEngine)
    {
    CSatelliteControl* self =
        new(ELeave) CSatelliteControl(aEngine);
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop();    // self    
    return self;
    }

// ---------------------------------------------------------
// CSatelliteControl::CountComponentControls
// ---------------------------------------------------------
//
TInt CSatelliteControl::CountComponentControls() const
    {
    //No additional controls. All the drawing is done
    //by one control. Helps reduce flickering
    return 0;
    }

// ---------------------------------------------------------
// CSatelliteControl::ComponentControl
// ---------------------------------------------------------
//
CCoeControl* CSatelliteControl::ComponentControl( TInt /*aIndex*/ ) const
    {
    return NULL;
    }

// ---------------------------------------------------------
// CSatelliteControl::FocusChanged
// ---------------------------------------------------------
//
void CSatelliteControl::FocusChanged( TDrawNow /*aDrawNow*/ )
    {
    //No implemenation here for focus change
    }

// ---------------------------------------------------------
// CSatelliteControl::MinimumSize
// ---------------------------------------------------------
//
TSize CSatelliteControl::MinimumSize()
    {    
	TRect rect = CalculateDialogRect();
    TSize size = rect.Size();
    return size;
    }

// ---------------------------------------------------------
// CSatelliteControl::DialogRect
// ---------------------------------------------------------
//
TRect CSatelliteControl::DialogRect() const
    {    
    return CalculateDialogRect();
    }

// ---------------------------------------------------------
// CSatelliteControl::DialogSize
// ---------------------------------------------------------
//
TSize CSatelliteControl::DialogSize() const
    {
	TRect rect = CalculateDialogRect();
	return (TSize(rect.Size()));
    }

// ---------------------------------------------------------
// CSatelliteControl::WindowLayout
// ---------------------------------------------------------
//
TAknWindowLineLayout CSatelliteControl::WindowLayout() const
    {
    //Get the dialogs layout and return it.
    AknLayoutUtils::TAknCbaLocation cbaLocation( AknLayoutUtils::CbaLocation() );
    TInt variety(0);
    
    //Varient for LAF changes based on the location of the softkeys
    if(Layout_Meta_Data::IsLandscapeOrientation())		
        {
        if ( cbaLocation == AknLayoutUtils::EAknCbaLocationRight )
    		{
    		variety = 1;
    		}
    	else if ( cbaLocation == AknLayoutUtils::EAknCbaLocationLeft )
    		{
    		variety = 2;
    		}
        }
    else
        {
        variety = 0;
        }        
	
	//Return the layout line of the dialog from LAF
    return AknLayoutScalable_Apps::popup_blid_sat_info2_window(variety).LayoutLine();
    }

// ----------------------------------------------------------------------------
// CSatelliteControl::CalculateDialogRect
// Calculates rectangle according to current LAF information.
// ----------------------------------------------------------------------------
//
TRect CSatelliteControl::CalculateDialogRect() const
    {
    TRect mainPaneRect;
    TRect screenRect;
    TInt variety(0);
    TAknLayoutRect mainPane;
    
    AknLayoutUtils::TAknCbaLocation cbaLocation( AknLayoutUtils::CbaLocation() );
    if( Layout_Meta_Data::IsLandscapeOrientation() )	 	
        {
        if ( cbaLocation == AknLayoutUtils::EAknCbaLocationRight )
    		{
    		screenRect = iAvkonAppUi->ApplicationRect();
    		variety = 1;
    		mainPane.LayoutRect( screenRect, AknLayoutScalable_Apps::main_pane( 13 ) );           
		mainPaneRect = mainPane.Rect();
    		}
    	else if ( cbaLocation == AknLayoutUtils::EAknCbaLocationLeft )
    		{
    		variety = 2;
    		mainPaneRect = iAvkonAppUi->ClientRect();
    		}
    	else if ( cbaLocation == AknLayoutUtils::EAknCbaLocationBottom )
    		{
	        variety = 0;
	    	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
    		}    		
        }
    else
        {
        variety = 0;
        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
        }    
    
    TAknLayoutRect mainSatPane;
    mainSatPane.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::popup_blid_sat_info2_window( variety ) );
      
    return mainSatPane.Rect();
    
    }
// ---------------------------------------------------------
// CBlidManualWayPointCtrl::Layout
// ---------------------------------------------------------
//
void CSatelliteControl::Layout()
    {
    SizeChanged();
    }

// ---------------------------------------------------------
// CBlidManualWayPointCtrl::ChangeView
// ---------------------------------------------------------
//
void CSatelliteControl::ChangeView()
	{
    // Change the view variable and update the rects
	switch ( iCurrentSatelliteView )
	    {
	    case ESignalStrengthView:
	        {
	        iCurrentSatelliteView = EGraphicalView;
	        break;
	        }	    
	    case EGraphicalView:
	        {
	        TInt settingsValue = 0;
            CRepository* repository = CRepository::NewL( TUid::Uid( KCRUidLocLocalVariation) );
            CleanupStack::PushL( repository );
            User::LeaveIfError( repository->Get( KLocHideCoordinates,
                                                      settingsValue ));  
            CleanupStack::PopAndDestroy( repository );
            
            if ( ELocCoordinatesHidden == settingsValue)
            {
            	 iCurrentSatelliteView = ESignalStrengthView;
            }
            else
           {
           		iCurrentSatelliteView = ECompassView;
           }
	        break;
	        }
	    case ECompassView:
	        {
	        iCurrentSatelliteView = ESignalStrengthView;
	        break;
	        }
	    default:
	        {
	        break;
	        }
	    }	
	}

// ---------------------------------------------------------
// CSatelliteControl::SetLaunchView
// ---------------------------------------------------------
//
void CSatelliteControl::SetLaunchView(TSatDialogView aView)
	{
	iCurrentSatelliteView = aView;
	}

// ---------------------------------------------------------
// CSatelliteControl::PrepareGraphicalViewIcons
// ---------------------------------------------------------
//
void CSatelliteControl::PrepareGraphicalViewIcons()
	{
	AknIconUtils::SetSize(iFirmamentBmp, iFirmamentRect.Size());
	AknIconUtils::SetSize(iFirmamentBmpMask, iFirmamentRect.Size());
	
	AknIconUtils::SetSize(iFirmaActiveBmp, iSatelliteRect.Size());
	AknIconUtils::SetSize(iFirmaActiveBmpMask, iSatelliteRect.Size());
	AknIconUtils::SetSize(iFirmaInActiveBmp, iSatelliteRect.Size());
	AknIconUtils::SetSize(iFirmaInActiveBmpMask, iSatelliteRect.Size());	
	
	AknIconUtils::SetSize(iMoonBmp, iSunMoonRect.Size());
	AknIconUtils::SetSize(iMoonBmpMask, iSunMoonRect.Size());
	AknIconUtils::SetSize(iSunBmp, iSunMoonRect.Size());
	AknIconUtils::SetSize(iSunBmpMask, iSunMoonRect.Size());
	}

// ---------------------------------------------------------
// CSatelliteControl::PrepareSignalStrengthViewIcons
// ---------------------------------------------------------
//
void CSatelliteControl::PrepareSignalStrengthViewIcons()
	{	
    if(!iSignalBarRects.Count())
    	{
    	return;
    	}
    	    
	TRect rect = iSignalBarRects[1];
	AknIconUtils::SetSize(iSatFrame, rect.Size());
	AknIconUtils::SetSize(iSatFrameMask, rect.Size());
	}

// ---------------------------------------------------------
// CSatelliteDialog::PrepareCompassViewIcons
// ---------------------------------------------------------
//    
void CSatelliteControl::PrepareCompassViewIcons()
    {  	
	AknIconUtils::SetSize(iFirmamentCompassBmp, iFirmamentCompassRect.Size());
	AknIconUtils::SetSize(iFirmamentCompassBmpMask, iFirmamentCompassRect.Size());
	
	AknIconUtils::SetSize(iFixBmp, iTypeRect.Size());
	AknIconUtils::SetSize(iFixBmpMask, iTypeRect.Size());
    }

// ---------------------------------------------------------
// CSatelliteControl::PrepareSignalStrengthViewRectsAndIcons
// ---------------------------------------------------------
//
void CSatelliteControl::PrepareSignalStrengthViewRectsAndIcons()
	{
	iSignalBarRects.Reset();
    iSatelliteNumberLayouts.Reset();
	TAknLayoutScalableParameterLimits paramLimits;
	paramLimits = AknLayoutScalable_Apps::cell_popup_blid_pane_ParamLimits();
	
	TInt numberOfRows = paramLimits.LastRow() - paramLimits.FirstRow();	
	TInt numberOfColumns = paramLimits.LastColumn() - paramLimits.FirstColumn();
	
	TAknLayoutRect layoutWindow;
    layoutWindow.LayoutRect(Rect(), AknLayoutScalable_Apps::grid_popup_blid_pane().LayoutLine());	
    TRect gridRect = layoutWindow.Rect();
	
	iNumberOfRows = paramLimits.LastRow() - paramLimits.FirstRow() + 1;
	iNumberOfColumns = paramLimits.LastColumn() - paramLimits.FirstColumn() + 1;
	
	for(TInt row = paramLimits.FirstRow() ; row <= paramLimits.LastRow(); ++row)
		{
		for(TInt column = paramLimits.FirstColumn() ; column <= paramLimits.LastColumn(); ++column)
			{
			// First get and save the rects of the signal bars
			layoutWindow.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_popup_blid_pane(column, row).LayoutLine());
			TRect cellRect = layoutWindow.Rect();
			
			layoutWindow.LayoutRect(cellRect, AknLayoutScalable_Apps::cell_popup_blid_pane_g1().LayoutLine());
			TRect barRect = layoutWindow.Rect();
			iSignalBarRects.Append(barRect);
			
			// Save the layouts of the satellite numbers
			TAknLayoutText satNumberLayout;
			satNumberLayout.LayoutText(cellRect, AknLayoutScalable_Apps::cell_popup_blid_pane_t1().LayoutLine());			
			iSatelliteNumberLayouts.Append(satNumberLayout);
			}
		}
	PrepareSignalStrengthViewIcons();
	}

// ---------------------------------------------------------
// CSatelliteControl::PrepareGraphicalViewRectsAndIcons
// ---------------------------------------------------------
//
void CSatelliteControl::PrepareGraphicalViewRectsAndIcons()
	{
	TAknLayoutRect layoutWindow;
    layoutWindow.LayoutRect(Rect(), 
    						AknLayoutScalable_Apps::blid_firmament_pane().LayoutLine());
	    						
	// Rect to draw the firmament
    iFirmamentRect = layoutWindow.Rect();
    
    layoutWindow.LayoutRect(iFirmamentRect,
    						AknLayoutScalable_Apps::aid_firma_cardinal().LayoutLine());
        
    //Layout to draw the cardinal point W
    iCardinalWLayout.LayoutText(iFirmamentRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t1().LayoutLine());    
    
    //Layout to draw the cardinal point E
    iCardinalELayout.LayoutText(iFirmamentRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t2().LayoutLine());

	//Layout to draw the cardinal point N
	iCardinalNLayout.LayoutText(iFirmamentRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t3().LayoutLine());

	//Layout to draw the cardinal point S		
	iCardinalSLayout.LayoutText(iFirmamentRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t4().LayoutLine());

	layoutWindow.LayoutRect(iFirmamentRect, 
    						AknLayoutScalable_Apps::blid_sat_info_pane().LayoutLine());
    
    // Parent rect to get the rects of satellites, sun and moon
    TRect parentRect = layoutWindow.Rect();
    
    layoutWindow.LayoutRect(parentRect,
    						AknLayoutScalable_Apps::blid_sat_info_pane_g1().LayoutLine());
    
    iSatelliteRect = layoutWindow.Rect();
    
    layoutWindow.LayoutRect(parentRect, 
    						AknLayoutScalable_Apps::blid_sat_info_pane_g2().LayoutLine());
	
	iSunMoonRect = layoutWindow.Rect();	
	PrepareGraphicalViewIcons();
	}

// ---------------------------------------------------------
// CSatelliteDialog::PrepareCompassViewRectsAndIcons
// ---------------------------------------------------------
//    
void CSatelliteControl::PrepareCompassViewRectsAndIcons()
    {

	TAknLayoutRect layoutWindow;
	TRect parenRect = Rect();
	
    layoutWindow.LayoutRect(parenRect, 
    						AknLayoutScalable_Apps::blid_firmament_pane(1).LayoutLine());
	    						
	// Rect to draw the firmament
    iFirmamentCompassRect = layoutWindow.Rect();
    
    layoutWindow.LayoutRect(iFirmamentCompassRect,
    						AknLayoutScalable_Apps::aid_firma_cardinal(1).LayoutLine());
        
    //Layout to draw the cardinal point W
    iCardinalCompassWLayout.LayoutText(iFirmamentCompassRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t1(1).LayoutLine());    
    
    //Layout to draw the cardinal point E
    iCardinalCompassELayout.LayoutText(iFirmamentCompassRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t2(1).LayoutLine());

	//Layout to draw the cardinal point N
	iCardinalCompassNLayout.LayoutText(iFirmamentCompassRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t3(1).LayoutLine());

	//Layout to draw the cardinal point S		
	iCardinalCompassSLayout.LayoutText(iFirmamentCompassRect, 
    					  		AknLayoutScalable_Apps::blid_firmament_pane_t4(1).LayoutLine());

	// Rect to draw the Type
    layoutWindow.LayoutRect(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_g1(0).LayoutLine());
	    			
	// Rect to draw the Fix Type graphic			
    iTypeRect = layoutWindow.Rect();
    
	// Rect to draw the Fix Type Text - 2D/3D
    iFixTypeLayout.LayoutText(parenRect, 
    					  		AknLayoutScalable_Apps::popup_blid_sat_info2_window_t11(0).LayoutLine());
    
	// Rect to draw the Latitude
    iLatitudeWindowLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t3(0).LayoutLine());

	// Rect to draw the Longitude
    iLongitudeWindowLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t4(0).LayoutLine());

	// Rect to draw the Heading. Altitude.
    iAltitudeWindowHeadingLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t5(0).LayoutLine());

	// Rect to draw the Value. Altitude.
    iAltitudeWindowValueLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t6(0).LayoutLine());

	// Rect to draw the Heading. Speed.
    iSpeedWindowHeadingLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t7(0).LayoutLine());

	// Rect to draw the Value. Speed.
    iSpeedWindowValueLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t8(0).LayoutLine());

	// Rect to draw the Heading. Direction.
    iDirectionWindowHeadingLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t9(0).LayoutLine());

	// Rect to draw the Value. Direction.
    iDirectionWindowValueLayout.LayoutText(parenRect, 
    						AknLayoutScalable_Apps::popup_blid_sat_info2_window_t10(0).LayoutLine());
 
    PrepareCompassViewIcons();    
    }
    
// ---------------------------------------------------------
// CSatelliteControl::ConstructL
// ---------------------------------------------------------
//
void CSatelliteControl::ConstructL( )
	{    
    iSatelliteSignalHeading = iEikonEnv->AllocReadResourceL( R_BLID_SAT_HEADING_SIGNALS );
    iSatelliteGrapgicHeading = iEikonEnv->AllocReadResourceL( R_BLID_SAT_HEADING_GRAPHIC );
	iCompassViewHeading = iEikonEnv->AllocReadResourceL( R_BLID_SAT_HEADING_COMPASS );
	
	iNoSatelliteData = iEikonEnv->AllocReadResourceL( R_BLID_NOTE_NO_SATELLITE_DATA );

	// Altitude,Speed and Direction Strings for Compass View
    iAltitudeWindowHeading = iEikonEnv->AllocReadResourceL( R_BLID_SAT_COMPASS_ALTITUDE );
    iSpeedWindowHeading = iEikonEnv->AllocReadResourceL( R_BLID_SAT_COMPASS_SPEED );
	iDirectionWindowHeading = iEikonEnv->AllocReadResourceL( R_BLID_SAT_COMPASS_DIRECTION );

    iSpeedFormatKmph = iEikonEnv->AllocReadResourceL( R_BLID_SAT_METRIC_SPEED );
    iSpeedFormatMph = iEikonEnv->AllocReadResourceL( R_BLID_SAT_IMPERIAL_SPEED );
    iAltitudeFormatM = iEikonEnv->AllocReadResourceL( R_BLID_SAT_METRIC_METER );
    iAltitudeFormatFt = iEikonEnv->AllocReadResourceL( R_BLID_SAT_IMPERIAL_FOOT );
    iDirectionFormat = iEikonEnv->AllocReadResourceL( R_BLID_SAT_DEGREE );


	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
		
	/* Icons for signal strength view */
	// Code added foe multiple drive support.
	TBuf<KMaxFileName> iconFileName;
	iconFileName.Zero();
	iconFileName.Append( PathInfo::RomRootPath()[0]);
	iconFileName.Append(KBlidSatSystemIconPath);
	
	// Satellite Active signal bar
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnPropBlidActive,		                    
		                    iSatActiveBmp,
		                    iSatActiveBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_active,
		                    EMbmSatelliteQgn_prop_blid_active_mask );
	
	// Satellite In-Active signal bar
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnPropBlidInactive,		                    
		                    iSatInActiveBmp,
		                    iSatInActiveBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_inactive,
		                    EMbmSatelliteQgn_prop_blid_inactive_mask );
	
	// Satellite Frame bar
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnPropBlidBg,		                    
		                    iSatFrame,
		                    iSatFrameMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_bg,
		                    EMbmSatelliteQgn_prop_blid_bg_mask );

	/* Icons for firmament view */
	
	// Icon for the firmament
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnIndiBlidSatFirmaCenter,		                    
		                    iFirmamentBmp,
		                    iFirmamentBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_sat_firma,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_mask );
	
	// Icon for active satellite
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnIndiBlidSatFirmaActive,		                    
		                    iFirmaActiveBmp,
		                    iFirmaActiveBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_active,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_active_mask );
	
	// Icon for In-Active satellite
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnIndiBlidSatFirmaInact,		                    
		                    iFirmaInActiveBmp,
		                    iFirmaInActiveBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_inact,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_inact_mask );
	
	// Icon for the sun
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnIndiBlidSatFirmaSun,		                    
		                    iSunBmp,
		                    iSunBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_sun,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_sun_mask );
	
	// Icon for the moon
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnIndiBlidSatFirmaMoon,		                    
		                    iMoonBmp,
		                    iMoonBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_moon,
		                    EMbmSatelliteQgn_prop_blid_sat_firma_moon_mask );
	
	/* Icons for Compass view */
	
	// Icon for the firmament
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnGrafBlid,		                    
		                    iFirmamentCompassBmp,
		                    iFirmamentCompassBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_graf_blid,
		                    EMbmSatelliteQgn_graf_blid_mask );
		                    
	// Icon for the Type of Fix
	AknsUtils::CreateIconL( skin,
                            KAknsIIDQgnGrafBlidRingfix,		                    
		                    iFixBmp,
		                    iFixBmpMask,
		                    iconFileName,
		                    EMbmSatelliteQgn_graf_blid_ringfix,
		                    EMbmSatelliteQgn_graf_blid_ringfix_mask );

	//Type of Fix to be display on the Fix Ring
	i2DString = StringLoader::LoadL( R_BLID_SAT_COMPASS_2D, iEikonEnv );
    i3DString = StringLoader::LoadL( R_BLID_SAT_COMPASS_3D, iEikonEnv );

	//Cardinal points text to be display on the Compass firmament
	iCompassNorth = StringLoader::LoadL( R_BLID_SAT_COMPASS_NORTH, iEikonEnv );
    iCompassSouth = StringLoader::LoadL( R_BLID_SAT_COMPASS_SOUTH, iEikonEnv );
    iCompassWest = StringLoader::LoadL( R_BLID_SAT_COMPASS_WEST, iEikonEnv );
    iCompassEast = StringLoader::LoadL( R_BLID_SAT_COMPASS_EAST, iEikonEnv );

	//Cardinal points text to be display on the Graphic firmament
	iNorth = StringLoader::LoadL( R_BLID_SAT_SYMBOL_NORTH, iEikonEnv );
    iSouth = StringLoader::LoadL( R_BLID_SAT_SYMBOL_SOUTH, iEikonEnv );
    iWest = StringLoader::LoadL( R_BLID_SAT_SYMBOL_WEST, iEikonEnv );
    iEast = StringLoader::LoadL( R_BLID_SAT_SYMBOL_EAST, iEikonEnv );
    }

// ---------------------------------------------------------
// CSatelliteControl::ConstructFromResourceL
// ---------------------------------------------------------
//
void CSatelliteControl::ConstructFromResourceL(TResourceReader& /*aReader*/)
    {
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
	iEditorContext = CAknsFrameBackgroundControlContext::NewL(
        KAknsIIDQsnFrInput, TRect(0,0,1,1), TRect(0,0,1,1), EFalse );
    ActivateL();
    }

// ---------------------------------------------------------
// CSatelliteControl::SizeChanged
// ---------------------------------------------------------
//
void CSatelliteControl::SizeChanged()
    {    
    AknsUtils::RegisterControlPosition(this);
    TAknLayoutRect topLeft;
    TAknLayoutRect bottomRight;
    
    topLeft.LayoutRect(Rect(), SkinLayout::Input_field_skin_placing__general__Line_2());                
    bottomRight.LayoutRect(TRect(Rect().iBr, Rect().iBr), SkinLayout::Input_field_skin_placing__general__Line_5());

    TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr);
    TRect innerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl);

    iEditorContext->SetFrameRects( outerRect, innerRect );
    // Chain with the background (since the frame doesn't occupy the entire
    // layout and it may even be transparent)
    iEditorContext->SetParentContext( AknsDrawUtils::ControlContextOfParent( this ) );        
    PrepareSignalStrengthViewRectsAndIcons();
    PrepareGraphicalViewRectsAndIcons();
    PrepareCompassViewRectsAndIcons();
    DrawNow();
    }

// ---------------------------------------------------------
// CSatelliteControl::MopSupplyObject
// ---------------------------------------------------------
//
TTypeUid::Ptr CSatelliteControl::MopSupplyObject( TTypeUid aId )
    {
    CCoeControl::MopSupplyObject( aId );
    return MAknsControlContext::SupplyMopObject( aId,  iEditorContext );
    }

// ---------------------------------------------------------
// CSatelliteControl::Draw
// ---------------------------------------------------------
//
void CSatelliteControl::Draw(const TRect& /*aRect*/) const
    {
    CWindowGc& gc=SystemGc();
    TRect rect(Rect());
    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
    AknsDrawUtils::Background( skin, cc, this, gc, rect, KAknsDrawParamNoClearUnderImage);
    
    //First draw the heading
    TRAP_IGNORE(DrawHeadingL());
    
    if(!iEngine.IsSatelliteDataAvailable())
    	{
    	//Draw the empty string "No satellite data" string in the dialog
    	TRAP_IGNORE(DrawEmptyDialogL());
    	return;
    	}
    
	switch ( iCurrentSatelliteView )
	    {
	    case ESignalStrengthView:
	        {
    		//Draw the signal strength view
    		TRAP_IGNORE(DrawSignalStrengthViewL());
	        break;
	        }	    
	    case EGraphicalView:
	        {
    	    //Draw the graphical view
    	    TRAP_IGNORE(DrawGraphicalViewL());
	        break;
	        }
	    case ECompassView:
	        {
    		//Draw the compass view
    		TRAP_IGNORE(DrawCompassViewL());
	        break;
	        }
	    default:
	        {
	        break;
	        }
	    }
    }
    
// ---------------------------------------------------------
// CSatelliteControl::DrawHeadingL
// ---------------------------------------------------------
//
void CSatelliteControl::DrawHeadingL() const
	{
	//Get the rect for the heading frame from LAF
	TAknLayoutRect layoutWindow;
	layoutWindow.LayoutRect(Rect(), AknLayoutScalable_Apps::heading_pane_cp05(2).LayoutLine());	
	TRect headingFrameRect = layoutWindow.Rect();
	
	//Get the rect for the heading text. Parent of the heading text rect
	//is the rect of the heading frame
	TAknLayoutText headingTextLayout;
	headingTextLayout.LayoutText(headingFrameRect, AknLayoutScalable_Avkon::heading_pane_t1(0).LayoutLine());
		
	CWindowGc& gc=SystemGc();
		
	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
	MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); // get parent's cc

    TRgb rgb;
    AknsUtils::GetCachedColor( skin,
                               rgb,
                               KAknsIIDQsnTextColors,
                               EAknsCIQsnTextColorsCG1 );
    gc.SetPenStyle( CGraphicsContext::ESolidPen );                               
    gc.SetPenColor( rgb ); 
        
    //Skin the heading frame
	AknsDrawUtils::DrawFrame(skin, 
							 gc, 
							 headingFrameRect, 
							 headingTextLayout.TextRect(), 
                             KAknsIIDQsnFrPopupHeading,
                             KAknsIIDQsnFrPopupHeadingCenter);
    
	switch ( iCurrentSatelliteView )
	    {
	    case ESignalStrengthView:
	        {
    	    headingTextLayout.DrawText( gc, 
    	                                iSatelliteSignalHeading->Des(),
    	                                ETrue,
    	                                rgb );
	        break;
	        }	    
	    case EGraphicalView:
	        {
    	    headingTextLayout.DrawText( gc, 
    	                                iSatelliteGrapgicHeading->Des(),
    	                                ETrue,
    	                                rgb );
	        break;
	        }
	    case ECompassView:
	        {
    	    headingTextLayout.DrawText( gc, 
    	                                iCompassViewHeading->Des(),
    	                                ETrue,
    	                                rgb );
	        break;
	        }
	    default:
	        {
	        break;
	        }
	    }
	}

// ---------------------------------------------------------
// CSatelliteControl::DrawEmptyDialogL
// ---------------------------------------------------------
//
void CSatelliteControl::DrawEmptyDialogL() const
	{
	TAknLayoutText textRect1;

	textRect1.LayoutText(Rect(), 
    					 AknLayoutScalable_Apps::popup_blid_sat_info2_window_t1());
	
	
	TAknLayoutText textRect2;

	textRect2.LayoutText(Rect(), 
    					 AknLayoutScalable_Apps::popup_blid_sat_info2_window_t2());   					 

    
	CArrayFix<TInt>* wrapWidthArray =
        new( ELeave ) CArrayFixFlat<TInt>(10);

    CleanupStack::PushL( wrapWidthArray );
    
    TInt lineLength1 = textRect1.TextRect().Width();
    TInt lineLength2 = textRect2.TextRect().Width();

    wrapWidthArray->AppendL(lineLength1);
    wrapWidthArray->AppendL(lineLength2);
    
    TPtrC text = *iNoSatelliteData;
    TBuf<200> buffer;
    
    const CFont *font = textRect1.Font();
    AknBidiTextUtils::ConvertToVisualAndWrapToStringL(text,
												      *wrapWidthArray,
												      *font,
												      buffer,
												      ETrue );

    CleanupStack::PopAndDestroy(); // wrapWidthArray
    
    TPtrC line1= buffer;
    TPtrC line2= buffer;
    TInt off = line1.Locate('\n');
    if (off>=0)
	    {
	    line1.Set(line2.Left(off));
	    line2.Set(line2.Mid(off+1));
	    }
    else
	    {
	    line2.Set(_L(""));
	    }

    TInt off2 = line2.Locate('\n');
    if (off2>=0)
	    {
	    line2.Set(line2.Left(off2));
	    }
    
    CWindowGc& gc=SystemGc();
    gc.UseFont(font);
        
    const CAknLayoutFont* layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( font );
    TInt textPaneHeight;
    TInt textPaneAscent;
    if ( layoutFont ) 
    	{
    	textPaneHeight = layoutFont->TextPaneHeight();     
    	textPaneAscent = layoutFont->TextPaneTopToBaseline();
    	}
    else 
    	{
    	textPaneHeight = font->HeightInPixels();         
    	textPaneAscent = font->AscentInPixels(); 
    	}
    //draw text    
    TInt extraVerticalSpace=(textRect1.TextRect().Height()-textPaneHeight);
    TInt baseLineOffset=extraVerticalSpace/2+textPaneAscent;
    gc.DrawText( line1, 
                 textRect1.TextRect(), 
                 baseLineOffset,
                 CGraphicsContext::ECenter  );
                  
    if(line2.Length())
    	{
    	gc.DrawText( line2, 
	                 textRect2.TextRect(), 
	                 baseLineOffset,
	                 CGraphicsContext::ECenter );
    	}    
    }

// ---------------------------------------------------------
// CSatelliteControl::DrawGraphicalViewL
// ---------------------------------------------------------
//
void CSatelliteControl::DrawGraphicalViewL() const
	{
	CWindowGc& gc=SystemGc();
	TSatelliteData satelliteData;
	for(TInt i = 0 ; i < iEngine.NumberOfSatellites(); ++i)
		{
		iEngine.GetSatelliteData(i, satelliteData);
		TInt signalstrength = satelliteData.SignalStrength();
		}	
		
	// Drawing the firmament
	gc.BitBltMasked(iFirmamentRect.iTl,
					iFirmamentBmp,
					iFirmamentBmp->SizeInPixels(),
					iFirmamentBmpMask,
					ETrue);	
	
	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
	TRgb rgb;
    AknsUtils::GetCachedColor( skin,
                               rgb,
                               KAknsIIDQsnTextColors,
                               EAknsCIQsnTextColorsCG1 );
    gc.SetPenStyle( CGraphicsContext::ESolidPen );                               
    gc.SetPenColor( rgb );
	// Draw the cardinal points
	iCardinalNLayout.DrawText(gc, iNorth->Des(), ETrue, rgb );
	iCardinalSLayout.DrawText(gc, iSouth->Des(), ETrue, rgb );
	iCardinalWLayout.DrawText(gc, iWest->Des(), ETrue, rgb );
	iCardinalELayout.DrawText(gc, iEast->Des(), ETrue, rgb );
					
	//Draw the moon
    TReal moonAzmiuth, moonElevation;			
	iEngine.GetMoonAzimuthElevation(moonAzmiuth, moonElevation);
	TRect moonRect = CalculateCelestialBodyRectL(moonAzmiuth, moonElevation, iSunMoonRect.Size());
	gc.BitBltMasked(moonRect.iTl,
					iMoonBmp,
					iMoonBmp->SizeInPixels(),
					iMoonBmpMask,
					ETrue);

	// Draw the sun
	TReal sunAzmiuth, sunElevation;
	iEngine.GetSunAzimuthElevation(sunAzmiuth, sunElevation);
	TRect sunRect = CalculateCelestialBodyRectL(sunAzmiuth, sunElevation, iSunMoonRect.Size());
	
	gc.BitBltMasked(sunRect.iTl,
					iSunBmp,
					iSunBmp->SizeInPixels(),
					iSunBmpMask,
					ETrue);
	
	//Draw all the available satellites
	for(TInt i = 0;i<iEngine.NumberOfSatellites();++i)
		{
		TSatelliteData satData;

		if(iEngine.GetSatelliteData(i, satData) != KErrNotFound)
			{
			TRect rect;
			TInt satId = satData.SatelliteId();	
			rect = CalculateCelestialBodyRectL(satData.Azimuth(), satData.Elevation(), iSatelliteRect.Size());			
			if(satData.IsUsed())
				{
				gc.BitBltMasked(rect.iTl,
								iFirmaActiveBmp,
								iFirmaActiveBmp->SizeInPixels(),
								iFirmaActiveBmpMask,
								ETrue);
				}
			else
				{
				gc.BitBltMasked(rect.iTl,
								iFirmaInActiveBmp,
								iFirmaInActiveBmp->SizeInPixels(),
								iFirmaInActiveBmpMask,
								ETrue);
				}
			TAknLayoutText textLayout;
			textLayout.LayoutText(rect, 
    							  AknLayoutScalable_Apps::blid_sat_info_pane_t1().LayoutLine());
			    							  
			HBufC* satNumber = StringLoader::LoadL( R_BLID_SATELLITE_ID, satData.SatelliteId() );
			HBufC* visualBuffer = HBufC::NewL( satNumber->Size() + KAknBidiExtraSpacePerLine );
		    TPtr visualPtr( visualBuffer->Des() );
		    visualPtr.Zero();
		    TPtr ptr(satNumber->Des());
		    AknTextUtils::LanguageSpecificNumberConversion( ptr );
		    //This portion of code is commented now.We have to check it for language
		    //Like Farsi,Urdu and then it will be removed or uncomented.
		    /*AknBidiTextUtils::ConvertToVisualAndClip( satNumber->Des(),
		                                              visualPtr,
		                                              *textLayout.Font(),
		                                              textLayout.TextRect().Size().iWidth,
		                                              textLayout.TextRect().Size().iWidth );
			textLayout.DrawText(gc, visualPtr);*/
						
			const CFont* fontUsed = iCardinalNLayout.Font();
			const CAknLayoutFont* layoutFont = CAknLayoutFont::AsCAknLayoutFontOrNull( fontUsed );
		    TInt textPaneHeight;
		    TInt textPaneAscent;
		    if ( layoutFont )
		    	{
		    	textPaneHeight = layoutFont->TextPaneHeight();     
		    	textPaneAscent = layoutFont->TextPaneTopToBaseline();
		    	}
		    else 
		    	{
		    	textPaneHeight = fontUsed->HeightInPixels();         
		    	textPaneAscent = fontUsed->AscentInPixels(); 
		    	}
		    //draw text    
		    TInt extraVerticalSpace=(rect.Height()-textPaneHeight);
		    TInt baseLineOffset=extraVerticalSpace/2+textPaneAscent;
		    CGraphicsContext::TTextAlign context;    
    		context = textLayout.Align();   
    		gc.UseFont(fontUsed);
    		//gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
    
		    // Set the rgb color to black
		    rgb.SetBlue(0);
		    rgb.SetGreen(0);
		    rgb.SetRed(0);
		    gc.SetPenColor(rgb);
		        		
		    gc.DrawText( satNumber->Des(), 
		                 rect, 
		                 baseLineOffset,
		                 context );

			delete satNumber;
			delete visualBuffer;
			}
		}	
	}

// ---------------------------------------------------------
// CSatelliteControl::CalculateCelestialBodyRectL
// ---------------------------------------------------------
//
TRect CSatelliteControl::CalculateCelestialBodyRectL(const TReal aAzimuth, 
													 const TReal aElevation,
													 const TSize aIconSize) const
	{
	TPoint point;	
    TReal cosElevation;
    TReal sinAzimuth;
    TReal cosAzimuth;
    TInt pointX(0);
    TInt pointY(0);
    TPoint center = iFirmamentRect.Center();
    
    User::LeaveIfError(
	        Math::Cos( cosElevation, KDegToRad * (aElevation) ));
	        
	User::LeaveIfError(
	        Math::Sin( sinAzimuth, KDegToRad * (aAzimuth)));

	User::LeaveIfError(
	        Math::Cos( cosAzimuth, KDegToRad * (aAzimuth)));	        

	User::LeaveIfError( 
        		TRealToTInt((iFirmamentRect.Height()/2) * cosElevation * sinAzimuth, pointX));
        
    User::LeaveIfError( 
      			TRealToTInt((iFirmamentRect.Height()/2) * cosElevation * cosAzimuth, pointY) );
    
    point = TPoint( (center.iX + pointX ) , (center.iY -  pointY ));        
        
    TPoint boxCenterPoint;    
    TInt half;
    
    TRealToTInt(aIconSize.iWidth/2, half);
    boxCenterPoint.iX = point.iX - half;
    TRealToTInt(aIconSize.iHeight/2, half);
    boxCenterPoint.iY = point.iY - half;
    TRect returnRect(boxCenterPoint, aIconSize);
    
    return returnRect;
	}

// ---------------------------------------------------------
// CSatelliteControl::TRealToTInt
// Rounds the supplied real number into the nearest integer
// ---------------------------------------------------------
//
TInt CSatelliteControl::TRealToTInt( const TReal aSrc, TInt& aResult ) const
    {
    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;
    }

// ---------------------------------------------------------
// CSatelliteControl::DrawSignalStrengthViewL
// ---------------------------------------------------------
//
void CSatelliteControl::DrawSignalStrengthViewL() const
	{
	CWindowGc& gc=SystemGc();
	TInt numberofsatellites = iEngine.NumberOfSatellites();
    
	for(TInt i = 0 ; i < numberofsatellites; ++i)
		{
		TSatelliteData satData;

		if(iEngine.GetSatelliteData(i, satData) != KErrNotFound)			
			{
			TInt satelliteId = satData.SatelliteId();
			TInt signalStrength = satData.SignalStrength();
			if( (satelliteId > KMaxSatellites) || (signalStrength == 0) )
				{
				continue;
				}
			TRect rect = iSignalBarRects[satelliteId-1];			
			CFbsBitmap* bitmap;
			CFbsBitmap* bitmapMask;			
			TInt barHeight = rect.Height() * signalStrength / KBlidMaxSatelliteSignalStrength;
			if(barHeight < rect.Height())
				{
				TInt tmp = rect.Height() - barHeight;
				rect.iTl.iY += tmp;
				}
						
			if(satData.IsUsed())
				{
				bitmap = iSatActiveBmp;
				bitmapMask = iSatActiveBmpMask;
				}
			else
				{
				bitmap = iSatInActiveBmp;
				bitmapMask = iSatInActiveBmpMask;
				}
			
			AknIconUtils::SetSize(bitmap,
								  rect.Size());
            
            AknIconUtils::SetSize(bitmap,
								  rect.Size());
			
			
			gc.BitBltMasked(rect.iTl,
							bitmap,
							bitmap->SizeInPixels(),
							bitmapMask,
							ETrue);
							
			rect = iSignalBarRects[satelliteId-1];
			gc.BitBltMasked(rect.iTl,
							iSatFrame,
							iSatFrame->SizeInPixels(),
							iSatFrameMask,
							ETrue);
			}	
		}
	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
	TRgb rgb;
    AknsUtils::GetCachedColor( skin,
                               rgb,
                               KAknsIIDQsnTextColors,
                               EAknsCIQsnTextColorsCG1 );
    gc.SetPenStyle( CGraphicsContext::ESolidPen );                               
    gc.SetPenColor( rgb );
			
    for(TInt i = 1; i <= KMaxSatellites; ++i)
    	{
    	TSatelliteData satelliteData;
    	iEngine.GetSatelliteData(i, satelliteData);
    	    	
    	HBufC* satNumber = StringLoader::LoadL( R_BLID_SATELLITE_ID, 
    											i );
												
    	
    	HBufC* visualBuffer = HBufC::NewL( satNumber->Size() + 
                                 	   	   KAknBidiExtraSpacePerLine );
	    TPtr visualPtr( visualBuffer->Des() );
	    visualPtr.Zero();
	    AknBidiTextUtils::ConvertToVisualAndClip( satNumber->Des(),
	                                              visualPtr,
	                                              *iSatelliteNumberLayouts[i-1].Font(),
	                                              iSatelliteNumberLayouts[i-1].TextRect().Size().iWidth,
	                                              iSatelliteNumberLayouts[i-1].TextRect().Size().iWidth );
		gc.SetPenStyle(CGraphicsContext::ESolidPen);		
	    iSatelliteNumberLayouts[i-1].DrawText(gc, visualPtr, ETrue, rgb );
	    delete visualBuffer;
    	delete satNumber;
    	}
	}

// ---------------------------------------------------------
// CSatelliteDialog::DrawCompassViewL
// ---------------------------------------------------------
//
void CSatelliteControl::DrawCompassViewL() const
    {    
    CWindowGc& gc=SystemGc();
    
	// Drawing the firmament
	gc.BitBltMasked( iFirmamentCompassRect.iTl,
					 iFirmamentCompassBmp,
					 iFirmamentCompassBmp->SizeInPixels(),
					 iFirmamentCompassBmpMask,
					 ETrue );	

	// Drawing the Fix Ring
	gc.BitBltMasked( iTypeRect.iTl,
					 iFixBmp,
					 iFixBmp->SizeInPixels(),
					 iFixBmpMask,
					 ETrue );
	
	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
	TRgb rgb;
    AknsUtils::GetCachedColor( skin,
                               rgb,
                               KAknsIIDQsnTextColors,
                               EAknsCIQsnTextColorsCG1 );
    gc.SetPenStyle( CGraphicsContext::ESolidPen );                               
    gc.SetPenColor( rgb );
	// Draw the cardinal points
	iCardinalCompassNLayout.DrawText( gc, iCompassNorth->Des(), ETrue, rgb );
	iCardinalCompassSLayout.DrawText( gc, iCompassSouth->Des(), ETrue, rgb );
	iCardinalCompassWLayout.DrawText( gc, iCompassWest->Des(), ETrue, rgb );
	iCardinalCompassELayout.DrawText( gc, iCompassEast->Des(), ETrue, rgb );
    
	// Drawing the Fix Type
	if( iEngine.NumberOfSatellitesUsed() <= K2dFix )
		{
		iFixTypeLayout.DrawText( gc, i2DString->Des(), ETrue, rgb );
		}
	else
		{
		iFixTypeLayout.DrawText( gc, i3DString->Des(), ETrue, rgb );
		}
					
    TPosition pos;
    TCourse course;
    iEngine.GetPosition( pos );
    iEngine.GetCourse( course );   
    TBuf<KSatInfoBufferSize> tempString;
    TBuf<KSatInfoBufferSize> speedString;
  	HBufC* formatter = NULL;     
  	
  	// Display Latitude
  	if ( !Math::IsNaN( pos.Latitude() ) )
  		{
	    TRAP_IGNORE( formatter = 
	                       CAknLocationEditor::DisplayableLocationL( pos,CAknLocationEditor::ELatitudeOnly ) );
	    if( formatter )  
	        {
	        tempString.Copy( formatter->Des() );             
	        delete formatter;
	        }
		iLatitudeWindowLayout.DrawText( gc, tempString, ETrue, rgb );
  		}

  	// Display Longitude
  	if ( !Math::IsNaN( pos.Longitude() ) )
  		{
	    TRAP_IGNORE( formatter = 
	                       CAknLocationEditor::DisplayableLocationL( pos,CAknLocationEditor::ELongitudeOnly ) );
	    if( formatter )  
	        {
	        tempString.Copy( formatter->Des() );             
	        delete formatter;
	        }
		iLongitudeWindowLayout.DrawText( gc, tempString, ETrue, rgb );
  		}

  	// Display Altitude
    TReal altitude = pos.Altitude();
		iAltitudeWindowHeadingLayout.DrawText( gc, iAltitudeWindowHeading->Des(), ETrue, rgb );
    TInt result(0);
  	if ( !Math::IsNaN( altitude ) && TRealToTInt( altitude , result ) == KErrNone )
  		{
        if ( iEngine.SysOfMeasurementL() == ELocMetric )
            {
            StringLoader::Format( tempString, *iAltitudeFormatM, 
                                  0, result );
            }
        else
        	{
        	TInt imperialAlt( 0 );
        	if ( TRealToTInt( ( altitude*KMetreToFoot ) , imperialAlt ) == KErrNone )
	        	{
	            StringLoader::Format( tempString, *iAltitudeFormatFt, 
	                                  0, imperialAlt );
	        	}
        	}
		iAltitudeWindowValueLayout.DrawText( gc, tempString, ETrue, rgb );
  		}
    
  	// Display Speed
    TReal speed = course.Speed();
    iSpeedWindowHeadingLayout.DrawText( gc, iSpeedWindowHeading->Des(), ETrue, rgb );
  	if ( !Math::IsNaN( speed ) )
  		{
        Math::Round( speed, speed, KDecimals3 );
        TReal speedInKmph = speed * KSpeedConvertion;
        
        if ( iEngine.SysOfMeasurementL() == ELocMetric )
            {
            speedString.Format( KSpeedFormat, speedInKmph );
            formatter = iSpeedFormatKmph;
            }
        else
        	{
            speedInKmph *= KKilometreToMiles;
            speedString.Format( KSpeedFormat, speedInKmph );
            formatter = iSpeedFormatMph;   
        	}
		StringLoader::Format( tempString, *formatter, 0, speedString );
		iSpeedWindowValueLayout.DrawText( gc, tempString, ETrue, rgb );
  		}
    
 	// Display Direction
    TReal heading = course.Heading();
    iDirectionWindowHeadingLayout.DrawText( gc, iDirectionWindowHeading->Des(), ETrue, rgb );
    if ( !Math::IsNaN( heading ) )
        {
				StringLoader::Format( tempString, *iDirectionFormat, 0, heading );  
				iDirectionWindowValueLayout.DrawText( gc, tempString, ETrue, rgb );
        }   
    
    }
    
// ---------------------------------------------------------
// CSatelliteControl::InputCapabilities
// ---------------------------------------------------------
//
TCoeInputCapabilities CSatelliteControl::InputCapabilities() const
	{
	TCoeInputCapabilities inputCapabilities(TCoeInputCapabilities::ENone);	
	return inputCapabilities;
	}

#ifdef RD_SCALABLE_UI_V2
// ---------------------------------------------------------
// CSatelliteDialog::HandlePointerEventL
// ---------------------------------------------------------
//    
void CSatelliteControl::HandlePointerEventL(const TPointerEvent& aPointerEvent)
    {
    CCoeControl::HandlePointerEventL(aPointerEvent);
    if ( AknLayoutUtils::PenEnabled() )
        {
    	// Display the context specific menu on double tapping on the fields.
    	if(aPointerEvent.iType == TPointerEvent::EButton1Down && 
    	   iEngine.IsSatelliteDataAvailable() )
    		{
#ifdef RD_TACTILE_FEEDBACK
            MTouchFeedback* feedback = MTouchFeedback::Instance();
            if (feedback)
                {
                feedback->InstantFeedback(ETouchFeedbackBasic);
                }
#endif //RD_TACTILE_FEEDBACK
    		// Change view soft key pressed.Notify the control to change 
    		// the view and draw.
    		ChangeView();		
    		DrawNow();
    		}	
        }
    }
#endif // RD_SCALABLE_UI_V2
// End of file