basiclocationinfodisplay/blid/ui/src/CBlidTripMeterView.cpp
branchRCL_3
changeset 17 1fc85118c3ae
parent 16 8173571d354e
child 18 870918037e16
equal deleted inserted replaced
16:8173571d354e 17:1fc85118c3ae
     1 /*
       
     2 * Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Provides blid main view class methods.
       
    15 *
       
    16 */
       
    17 
       
    18 // SYSTEM INCLUDES
       
    19 #include <blid.rsg>
       
    20 //Added for HTK toolkit support
       
    21 #include <alf/alfenv.h>
       
    22 #include <alf/alfcontrolgroup.h>
       
    23 #include <alf/alfdisplay.h>
       
    24 #include <alf/alftransformation.h>
       
    25 #include <alf/alfroster.h>
       
    26 //End of addition
       
    27 
       
    28 #include <csxhelp/blid.hlp.hrh>
       
    29 #include <hlplch.h>
       
    30 
       
    31 // USER INCLUDES
       
    32 #include "cblidnotedialog.h"
       
    33 #include "CBlidTripMeterView.h"
       
    34 #include "Blid.hrh"
       
    35 #include "CHtkTripMeterControl.h"
       
    36 #include "MBlidLocation.h"
       
    37 #include "MBlidRouter.h"
       
    38 #include "MBlidSettings.h"
       
    39 #include "CBlidEng.h"
       
    40 #include "CBlidDocument.h"
       
    41 #include "CBlidAppUi.h"
       
    42 #include "bliduiconsts.h"
       
    43 #include "CBlidLocSettingLauncher.h"
       
    44 #include "BlidUID.h"
       
    45 
       
    46 #include <locationvariationdomaincrkeys.h>
       
    47 #include <centralrepository.h>
       
    48 
       
    49 
       
    50 // ================= MEMBER FUNCTIONS =======================
       
    51 // ----------------------------------------------------------------------------
       
    52 // CBlidTripMeterView::NewLC
       
    53 // Two-phased constructor.
       
    54 // ----------------------------------------------------------------------------
       
    55 //
       
    56 CBlidTripMeterView* CBlidTripMeterView::NewLC( MKeyProcessor& aKeyProcessor,
       
    57 											   CAlfEnv& aEnv )
       
    58     {
       
    59     CBlidTripMeterView* self = new (ELeave) CBlidTripMeterView(aKeyProcessor, aEnv );
       
    60     CleanupStack::PushL( self );
       
    61     self->ConstructL();
       
    62     return self;
       
    63     }
       
    64 // ----------------------------------------------------------------------------
       
    65 // CBlidTripMeterView::CBlidTripMeterView
       
    66 // C++ default constructor can NOT contain any code, that
       
    67 // might leave.
       
    68 // ----------------------------------------------------------------------------
       
    69 //
       
    70 CBlidTripMeterView::CBlidTripMeterView( MKeyProcessor& aKeyProcessor,
       
    71 										CAlfEnv& aEnv ):
       
    72     CBlidBaseView( aKeyProcessor ),
       
    73     iEnv(aEnv)
       
    74     {
       
    75     }
       
    76 
       
    77 // ----------------------------------------------------------------------------
       
    78 // CBlidTripMeterView::ConstructL
       
    79 // Symbian 2nd phase constructor can leave.
       
    80 // ----------------------------------------------------------------------------
       
    81 //
       
    82 void CBlidTripMeterView::ConstructL()
       
    83     {
       
    84     BaseConstructL( R_BLID_TRIPMETER_VIEW );
       
    85     
       
    86    	// Create an instance of our list control.
       
    87 	iTripCtrl = CHtkTripMeterControl::NewL(iEnv,
       
    88 										   *this,
       
    89 										   this,
       
    90 										   ClientRect(),
       
    91             							   iLocation,
       
    92             							   iRouter,
       
    93             							   *iEngine,
       
    94             							   *this);
       
    95             							   
       
    96 	// Create a control group.
       
    97 	iTripCtrlGroup = &( iEnv.NewControlGroupL( KPrimaryTripGroup ) );
       
    98 
       
    99 	// pass ownership of the list control to the control group
       
   100 	iTripCtrlGroup->AppendL(iTripCtrl);
       
   101 	
       
   102     iCtrlDisplay = &( iEnv.NewDisplayL( ClientRect(), CAlfEnv::ENewDisplayAsCoeControl ) );
       
   103 	// Use the Avkon skin background as the display background.
       
   104 	iCtrlDisplay->SetClearBackgroundL(CAlfDisplay::EClearWithSkinBackground);
       
   105 
       
   106     iNoteDialog = CBlidNoteDialog::NewL();
       
   107     
       
   108     iLauncher = NULL;    
       
   109     }
       
   110 
       
   111 // ----------------------------------------------------------------------------
       
   112 // CBlidMainView::~CBlidMainView
       
   113 // ----------------------------------------------------------------------------
       
   114 //
       
   115 CBlidTripMeterView::~CBlidTripMeterView()
       
   116     {
       
   117     delete iNoteDialog;
       
   118     delete iLauncher;
       
   119     }
       
   120 
       
   121 // ---------------------------------------------------------
       
   122 // CBlidTripMeterView::NotifyL
       
   123 // ---------------------------------------------------------
       
   124 //
       
   125 void CBlidTripMeterView::NotifyL( const TBool aOnlineMode )
       
   126     {
       
   127     if(iTripCtrl->HasTripStarted())
       
   128         {
       
   129         if(aOnlineMode)
       
   130             {
       
   131             if(iTripCtrl->WasGPSDataLost())
       
   132                 {
       
   133                 if(static_cast<CBlidAppUi*>(AppUi())->IsForeground())
       
   134                     {
       
   135                     iTripCtrl->SetGPSDataAvailability(EFalse);                
       
   136                     iNoteDialog->ExecuteNoteDialog();                                    
       
   137                     }
       
   138 				}
       
   139             }        
       
   140         }
       
   141     
       
   142     if( iTripCtrl )
       
   143         {
       
   144         iTripCtrl->UpdateL();
       
   145         }
       
   146     CBlidBaseView::NotifyL( aOnlineMode );     
       
   147     }
       
   148 
       
   149 // ---------------------------------------------------------
       
   150 // CBlidTripMeterView::NotifyErrorL
       
   151 // ---------------------------------------------------------
       
   152 //
       
   153 void CBlidTripMeterView::NotifyErrorL( TInt aErrorCode )
       
   154     {
       
   155     CBlidBaseView::NotifyErrorL( aErrorCode );    
       
   156         
       
   157     if( iTripCtrl )
       
   158         {
       
   159         iTripCtrl->UpdateL();
       
   160         }
       
   161     }
       
   162     
       
   163 // ----------------------------------------------------------------------------
       
   164 // TUid CBlidTripMeterView::Id
       
   165 // ----------------------------------------------------------------------------
       
   166 //
       
   167 TUid CBlidTripMeterView::Id() const
       
   168     {
       
   169     return TUid::Uid(EBlidTripMeterView);
       
   170     }
       
   171 
       
   172 // ----------------------------------------------------------------------------
       
   173 // CBlidTripMeterView::HandleCommandL
       
   174 // ----------------------------------------------------------------------------
       
   175 //
       
   176 void CBlidTripMeterView::HandleCommandL(TInt aCommand)
       
   177     {
       
   178     switch ( aCommand )
       
   179         {
       
   180         case EBlidCmdTripStart:
       
   181         case EBlidCmdTripStop:
       
   182         case EBlidCmdTripReset:
       
   183         case EBlidCmdTripClear:
       
   184         	{
       
   185          	iTripCtrl->ProcessCommandL(aCommand);
       
   186          	break;
       
   187         	}
       
   188         case EBlidCmdTripResume:
       
   189         	{        	
       
   190 	        iTripCtrl->ProcessCommandL(aCommand);
       
   191          	break;
       
   192         	}
       
   193         case EBlidCmdSavedWaypoints:
       
   194         	{
       
   195         	AppUi()->ActivateLocalViewL( TUid::Uid( EBlidSavedWayptsView ) );
       
   196 			break;  
       
   197   	      	}
       
   198   	    case EBlidCmdLmk:
       
   199 	        {
       
   200 	        LaunchLandmarksDialogL();
       
   201             break;
       
   202 	        }
       
   203 	    case EBlidCmdWaypoint:
       
   204             {
       
   205             TInt index(0);
       
   206 
       
   207             if ( iRouter->Count() > 0 )
       
   208                 {
       
   209                 index = SelectWaypointL();
       
   210                 if ( index != KErrCancel )
       
   211                     {
       
   212                     iRouter->SetWaypoint( index );
       
   213                     }
       
   214                 }
       
   215             break;
       
   216             }            
       
   217         case EBlidCmdSaveLocation:
       
   218         	{
       
   219         	if ( !FeatureManager::FeatureSupported( KFeatureIdLandmarks ) )
       
   220         		{
       
   221         		if ( InsertWaypointL() )
       
   222 	                {
       
   223 	                static_cast<CBlidDocument*>(AppUi()->Document())->SaveL();
       
   224 	                }
       
   225         		}
       
   226         	else
       
   227         		{
       
   228         		SaveCurrentPositionAsLandmarkL();
       
   229         		}
       
   230             break;		        		
       
   231         	}
       
   232        	case EBlidCmdShowDetails:
       
   233 	       	{
       
   234 	       	ShowCurrentPositionInfoL();
       
   235 			break;	       		
       
   236 	       	}
       
   237         case EBlidCmdLaunchPositionSettings:
       
   238         	{
       
   239         	if(!iLauncher)
       
   240         		{
       
   241         		iLauncher = CBlidLocSettingsLauncher::NewL();        		
       
   242         		}
       
   243         	iLauncher->LaunchL();
       
   244         	break;
       
   245         	}
       
   246         case EBlidNavigationMskInfo:
       
   247 	        {
       
   248 	        iTripCtrl->DisplayInfoPopUpMsgL();
       
   249 			break;	        	
       
   250 	        }
       
   251         case EBlidCmdSatelliteStatus:
       
   252             {
       
   253             TBool lBacklightNormal = EFalse;
       
   254             MBlidSettings* setting = iEngine->SettingsModel();        
       
   255             if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
       
   256                 {
       
   257                 setting->SetBacklightOption(EBlidBackLightNormal);
       
   258                 iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal);
       
   259                 lBacklightNormal = ETrue;    
       
   260                 }
       
   261             (static_cast<CBlidAppUi*>(AppUi()))->HandleCommandL( aCommand );
       
   262             if(lBacklightNormal)
       
   263                 {
       
   264                 iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn); 
       
   265                 setting->SetBacklightOption(EBlidBackLightOnDuringNavigation);               
       
   266                 }
       
   267             break;
       
   268             }        
       
   269         case EBlidCmdSettings:
       
   270             {
       
   271             iIsSettingsViewActive = ETrue;
       
   272             (static_cast<CBlidAppUi*>(AppUi()))->HandleCommandL( aCommand );
       
   273              break;
       
   274             }                 
       
   275        case EAknCmdHelp:
       
   276             {
       
   277             TCoeHelpContext context( TUid::Uid(KBLIDUID3), KHLP_BLID_TRIPMETER );
       
   278             CArrayFix<TCoeHelpContext>* tripHelp = new CArrayFixFlat<TCoeHelpContext>(1);
       
   279             CleanupStack::PushL( tripHelp );
       
   280             tripHelp->AppendL(context);
       
   281             HlpLauncher::LaunchHelpApplicationL(iCoeEnv->WsSession(), tripHelp );
       
   282             CleanupStack::Pop( tripHelp );                        
       
   283             break;
       
   284             }
       
   285         default:
       
   286             {
       
   287             static_cast<CBlidAppUi*>(AppUi())->HandleCommandL( aCommand );
       
   288             break;
       
   289             }
       
   290         } //switch
       
   291     }
       
   292 
       
   293 // ----------------------------------------------------------------------------
       
   294 // CBlidTripMeterView::DoActivateL
       
   295 // ----------------------------------------------------------------------------
       
   296 //
       
   297 void CBlidTripMeterView::DoActivateL(
       
   298    const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/,
       
   299    const TDesC8& /*aCustomMessage*/)
       
   300     {
       
   301     #ifdef _DEBUG
       
   302     RDebug::Print(_L("CBlidTripMeterView::DoActivateL() called"));
       
   303     #endif
       
   304     
       
   305 	iIsSettingsViewActive = EFalse;
       
   306 	    
       
   307     iLocation->SetObserver(*this, EBlidTripMeterView ); 
       
   308 	
       
   309 	iTripCtrl->MakeTitleL( R_BLID_TITLE_TRIPMETER );
       
   310     iTripCtrl->UpdateL();
       
   311 
       
   312     if( aPrevViewId.iViewUid.iUid != EBlidNavigationView )
       
   313 	    {
       
   314 	    iTripCtrl->CreateNaviPaneL( EFalse );
       
   315 	    iTripCtrl->ActivateTabL( *( iTripCtrl->GetNiviDecorator( ) ), EBlidTripMeterView );	
       
   316 	    }
       
   317 	
       
   318 	// Hide the navigation control group
       
   319 	iCtrlDisplay->Roster().Hide( iEnv.ControlGroup( KPrimaryGroup ) );
       
   320 	
       
   321 	// Show the control group on the display.
       
   322 	iCtrlDisplay->Roster().ShowL( *iTripCtrlGroup );    
       
   323 
       
   324     MenuBar()->SetContextMenuTitleResourceId(R_BLID_TRIP_METER_VIEW_OK_MENUBAR);
       
   325     MBlidSettings* setting = iEngine->SettingsModel();        
       
   326     if(setting->GetBacklightOption() == EBlidBackLightOnDuringNavigation)
       
   327     	{
       
   328     	iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightAlwaysOn);
       
   329     	}
       
   330     		
       
   331    }
       
   332 
       
   333 // ----------------------------------------------------------------------------
       
   334 // CBlidTripMeterView::DoDeactivate
       
   335 // ----------------------------------------------------------------------------
       
   336 //
       
   337 void CBlidTripMeterView::DoDeactivate()
       
   338     {
       
   339     TRAP_IGNORE(iEngine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal));
       
   340     }
       
   341 
       
   342 // ---------------------------------------------------------
       
   343 // CBlidTripMeterView::DynInitMenuPaneL
       
   344 // ---------------------------------------------------------
       
   345 //
       
   346 void CBlidTripMeterView::DynInitMenuPaneL(
       
   347     TInt aResourceId,
       
   348     CEikMenuPane* aMenuPane )
       
   349     {
       
   350     switch( aResourceId )
       
   351         {
       
   352         case R_BLID_TRIP_METER_VIEW_OK_MENU:            
       
   353         case R_BLID_TRIPMETER_MENU:
       
   354             {
       
   355               if(iLocation->HasTripStarted())
       
   356             	{
       
   357             	aMenuPane->SetItemDimmed( EBlidCmdTripStart, ETrue );
       
   358             	aMenuPane->SetItemDimmed( EBlidCmdTripResume, ETrue );   
       
   359             	aMenuPane->SetItemDimmed( EBlidCmdTripStop, EFalse );
       
   360             	aMenuPane->SetItemDimmed( EBlidCmdTripReset, EFalse ); 
       
   361             	
       
   362             	if(aResourceId != R_BLID_TRIP_METER_VIEW_OK_MENU)
       
   363             	    {
       
   364                 	aMenuPane->SetItemDimmed( EBlidCmdTripClear, ETrue ); 
       
   365             	    }            	            	
       
   366             	}else
       
   367               if(iLocation->HasTripNotStarted())  
       
   368                 {
       
   369             	aMenuPane->SetItemDimmed( EBlidCmdTripStop, ETrue ); 
       
   370             	aMenuPane->SetItemDimmed( EBlidCmdTripResume, ETrue ); 
       
   371             	aMenuPane->SetItemDimmed( EBlidCmdTripStart, EFalse );
       
   372             	aMenuPane->SetItemDimmed( EBlidCmdTripReset, ETrue ); 
       
   373             	
       
   374             	if(aResourceId != R_BLID_TRIP_METER_VIEW_OK_MENU)
       
   375             	    {
       
   376                 	aMenuPane->SetItemDimmed( EBlidCmdTripClear, ETrue ); 
       
   377             	    }            	            	
       
   378             	}else
       
   379                if(!iLocation->HasTripStarted())
       
   380             	{
       
   381             	if(iLocation->IsTripCleared())
       
   382             	    {
       
   383             	    aMenuPane->SetItemDimmed( EBlidCmdTripResume, ETrue );             	    
       
   384             	    aMenuPane->SetItemDimmed( EBlidCmdTripReset, ETrue );             	    
       
   385             	    }
       
   386             	else
       
   387             	    {
       
   388             	    aMenuPane->SetItemDimmed( EBlidCmdTripStart, ETrue );
       
   389             	    }
       
   390             	
       
   391             	if(iLocation->IsTripReset())
       
   392             	    {
       
   393             	    aMenuPane->SetItemDimmed( EBlidCmdTripReset, ETrue );
       
   394             	    }
       
   395             	
       
   396 		        aMenuPane->SetItemDimmed( EBlidCmdTripStop, ETrue );		        
       
   397 		        
       
   398             	if(aResourceId != R_BLID_TRIP_METER_VIEW_OK_MENU)
       
   399             	    {
       
   400             	    if(iLocation->IsTripCleared())
       
   401             	        {
       
   402             	        aMenuPane->SetItemDimmed( EBlidCmdTripClear, ETrue );            	        
       
   403             	        }
       
   404             	    }            	            	
       
   405             	}
       
   406             break;
       
   407             }
       
   408         case R_BLID_TRIP_VIEW_MENU:
       
   409             {
       
   410    			// Hide the satellite status menu option				
       
   411             if ( !(iLocation->IsGPSDeviceConnected() && 
       
   412                    iLocation->SatelliteCapability()) )
       
   413                 {                
       
   414                 aMenuPane->SetItemDimmed( EBlidCmdSatelliteStatus, ETrue );                
       
   415                 }            
       
   416 			// hide the save position.
       
   417             if(!iLocation->IsOnline())
       
   418                 {
       
   419                 aMenuPane->SetItemDimmed( EBlidCmdCurrentLocation, ETrue );
       
   420                 }
       
   421 
       
   422 			if ( !iRouter->Count() )
       
   423                 {
       
   424                 aMenuPane->SetItemDimmed( EBlidCmdSavedWaypoints, ETrue );
       
   425                 }
       
   426                 
       
   427 			if ( FeatureManager::FeatureSupported( KFeatureIdLandmarks ) )
       
   428 				{
       
   429 				aMenuPane->SetItemDimmed( EBlidCmdSavedWaypoints, ETrue );
       
   430 				}			
       
   431             break;
       
   432             }
       
   433         case R_BLID_MAIN_MENU:
       
   434             {
       
   435             CBlidBaseView::HandleHelpFeatureL( aMenuPane );
       
   436             break;
       
   437             }  
       
   438         case R_BLID_SAVE_CURRENT_LOCATION_MENU:
       
   439         	{
       
   440         		TInt settingsValue = 0;
       
   441 	            CRepository* repository = CRepository::NewL( TUid::Uid( KCRUidLocLocalVariation) );
       
   442 	            CleanupStack::PushL( repository );
       
   443 	            User::LeaveIfError( repository->Get( KLocHideCoordinates,
       
   444 	                                                      settingsValue ));  
       
   445 	            CleanupStack::PopAndDestroy( repository );
       
   446 	            
       
   447 	            if ( ELocCoordinatesHidden == settingsValue )
       
   448 	            {
       
   449 	            	 aMenuPane->SetItemDimmed( EBlidCmdShowDetails, ETrue );
       
   450 	            }
       
   451 	            else
       
   452 	            {
       
   453 	             	 aMenuPane->SetItemDimmed( EBlidCmdShowDetails, EFalse );
       
   454 	            }	
       
   455         	}
       
   456         default:
       
   457             {
       
   458             break;
       
   459             }
       
   460         }
       
   461     }
       
   462 
       
   463 // ----------------------------------------------------------
       
   464 // Handle Resource Change Events: Display orientation switch
       
   465 // ----------------------------------------------------------
       
   466 //
       
   467 void CBlidTripMeterView::HandleResourceChangeL( TInt aType )
       
   468     {
       
   469     if(aType == KEikDynamicLayoutVariantSwitch)
       
   470         {
       
   471         TRect rect;
       
   472         AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect);
       
   473         
       
   474         // Notify skin of changed display size.
       
   475         iEnv.PrimaryDisplay().SetVisibleArea(rect);
       
   476         iTripCtrl->UpdateLayoutL();
       
   477         }
       
   478     }
       
   479 
       
   480 // ----------------------------------------------------------------------------
       
   481 // CBlidTripMeterView::GetControl
       
   482 // ----------------------------------------------------------------------------
       
   483 //
       
   484 CHtkTripMeterControl* CBlidTripMeterView::GetControl()
       
   485     {
       
   486     return iTripCtrl;
       
   487     }
       
   488 
       
   489 
       
   490 #ifdef RD_SCALABLE_UI_V2
       
   491 // ---------------------------------------------------------------------------
       
   492 // CBlidTripMeterView::HandleListBoxSelectionL
       
   493 // ---------------------------------------------------------------------------
       
   494 //
       
   495 void CBlidTripMeterView::HandleListBoxSelectionL()
       
   496     {
       
   497     //Nothing to do here
       
   498     }
       
   499 #endif // RD_SCALABLE_UI_V2
       
   500 // End of File
       
   501 
       
   502