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 UI class methods. |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 // INCLUDE FILES |
|
20 #include <AknsUtils.h> |
|
21 #include <Blid.rsg> |
|
22 #include <akncontext.h> |
|
23 #include <hlplch.h> |
|
24 #include <StringLoader.h> |
|
25 #include <blid.mbg> |
|
26 #include <CSatelliteInfoUI.h> |
|
27 |
|
28 #include "CBlidAppUi.h" |
|
29 #include "Blid.hrh" |
|
30 #include "CBlidDocument.h" |
|
31 #include "CBlidMainView.h" |
|
32 #include "CBlidNavigationView.h" |
|
33 #include "CBlidTripMeterView.h" |
|
34 #include "CBlidSettingsView.h" |
|
35 #include "CBlidSavedWayptsView.h" |
|
36 #include "CBlidSatelliteView.h" |
|
37 #include "CBlidEng.h" |
|
38 #include "Blidutils.h" |
|
39 #include "CHtkNavigationControl.h" |
|
40 #include "CHtkTripMeterControl.h" |
|
41 #include "FileSystemInfo.h" |
|
42 #include "BlidUID.h" |
|
43 |
|
44 |
|
45 #ifdef _DEBUG |
|
46 _LIT( KPanicMsg, "CBlidAppUi::TabChangedL"); |
|
47 |
|
48 enum TPanicCode |
|
49 { |
|
50 KBlidNullPointer = 1 |
|
51 }; |
|
52 #endif |
|
53 |
|
54 // ================= MEMBER FUNCTIONS ======================= |
|
55 // |
|
56 // ---------------------------------------------------------- |
|
57 // CBlidAppUi::ConstructL |
|
58 // Second phase construction |
|
59 // ---------------------------------------------------------- |
|
60 // |
|
61 void CBlidAppUi::ConstructL() |
|
62 |
|
63 { |
|
64 RDebug::Print(_L("CBlidAppUi::ConstructL() called")); |
|
65 |
|
66 TLocale locale; |
|
67 locale.SetUnitsGeneral(EUnitsMetric); |
|
68 locale.Set(); |
|
69 |
|
70 |
|
71 BaseConstructL( EAknEnableSkin | EAknEnableMSK | EAknSingleClickCompatible); |
|
72 |
|
73 //Code added for HTK tool kit support |
|
74 // Create the environment |
|
75 iAlfEnv = CAlfEnv::NewL(); |
|
76 |
|
77 // assign private path to the texture manager |
|
78 CFileSystemInfo* fileSystemInfo = CFileSystemInfo::NewLC(TUid::Uid(KBLIDUID3)); |
|
79 TFileName path = fileSystemInfo->PrivatePath(); |
|
80 CleanupStack::PopAndDestroy(fileSystemInfo); |
|
81 |
|
82 iAlfEnv->TextureManager().SetImagePathL( path ); |
|
83 |
|
84 //End of addition. |
|
85 iContextPane = ETrue; |
|
86 iIsSatViewActive = EFalse; |
|
87 |
|
88 CBlidBaseView* navigationView = CBlidNavigationView::NewLC( *this, *iAlfEnv ); |
|
89 AddViewL( navigationView ); // transfer ownership to CAknViewAppUi |
|
90 CleanupStack::Pop( navigationView ); // navigationView |
|
91 |
|
92 CBlidBaseView* tripMeterView = CBlidTripMeterView::NewLC( *this, *iAlfEnv ); |
|
93 AddViewL( tripMeterView ); |
|
94 CleanupStack::Pop( tripMeterView ); // tripMeterView |
|
95 |
|
96 CBlidBaseView* settingsView = CBlidSettingsView::NewLC(*this); |
|
97 AddViewL( settingsView ); |
|
98 CleanupStack::Pop( settingsView ); // settingsView |
|
99 |
|
100 CBlidBaseView* savedwayptsView = CBlidSavedWayptsView::NewLC(*this); |
|
101 AddViewL( savedwayptsView ); |
|
102 CleanupStack::Pop( savedwayptsView ); // savedwayptsView |
|
103 |
|
104 CBlidMainView* mainview = CBlidMainView::NewLC( *this, *iAlfEnv ); |
|
105 AddViewL( mainview ); |
|
106 CleanupStack::Pop( mainview ); // mainview |
|
107 |
|
108 CBlidSatelliteView* mainSatview = CBlidSatelliteView::NewLC( *this, *iAlfEnv ); |
|
109 AddViewL( mainSatview ); |
|
110 CleanupStack::Pop( mainSatview ); // mainSatview |
|
111 |
|
112 SetDefaultViewL( *mainview ); |
|
113 |
|
114 //start requesting |
|
115 CBlidEng* engine = BlidDocument()->Engine(); |
|
116 |
|
117 if( engine->LocationModel() ) |
|
118 { |
|
119 HBufC* srvName = StringLoader::LoadLC( |
|
120 R_BLID_SERVICE_RULE_NAME, iCoeEnv ); |
|
121 |
|
122 engine->LocationModel()->InitialLocationRequestL( *srvName ); |
|
123 CleanupStack::PopAndDestroy(srvName); //srvName |
|
124 engine->LocationModel()->StartRequesting(); |
|
125 } |
|
126 } |
|
127 |
|
128 // ---------------------------------------------------- |
|
129 // CBlidAppUi::~CBlidAppUi |
|
130 // Destructor |
|
131 // Frees reserved resources |
|
132 // ---------------------------------------------------- |
|
133 // |
|
134 CBlidAppUi::~CBlidAppUi() |
|
135 { |
|
136 delete iAlfEnv; |
|
137 } |
|
138 |
|
139 // ---------------------------------------------------- |
|
140 // CBlidAppUi::LocDocument |
|
141 // Returns the Location document object. |
|
142 // ---------------------------------------------------- |
|
143 // |
|
144 CBlidDocument* CBlidAppUi::BlidDocument() const |
|
145 { |
|
146 // Explicit cast: the document must always be of type CBlidDocument |
|
147 return static_cast<CBlidDocument*>(Document()); |
|
148 } |
|
149 |
|
150 // ---------------------------------------------------- |
|
151 // CBlidAppUi::ShowDialog |
|
152 // Displayes Overwrite waypoint note |
|
153 // ---------------------------------------------------- |
|
154 // |
|
155 void CBlidAppUi::ShowDialogL( const BlidNotes::TBlidNotes /*aNoteId*/ ) |
|
156 { |
|
157 BlidNotes::OverWriteWaypointNoteL(); |
|
158 } |
|
159 |
|
160 |
|
161 |
|
162 // ---------------------------------------------------- |
|
163 // CBlidAppUi::SkinChange |
|
164 // Handle skin change |
|
165 // ---------------------------------------------------- |
|
166 // |
|
167 void CBlidAppUi::SkinChange() |
|
168 { |
|
169 iContextPane = !iContextPane; |
|
170 } |
|
171 |
|
172 // ---------------------------------------------------- |
|
173 // CBlidAppUi::HandleCommandL |
|
174 // Handle options menu commands |
|
175 // ---------------------------------------------------- |
|
176 // |
|
177 void CBlidAppUi::HandleCommandL(TInt aCommand) |
|
178 { |
|
179 switch ( aCommand ) |
|
180 { |
|
181 case EAknCmdHelp: |
|
182 { |
|
183 HlpLauncher::LaunchHelpApplicationL(iCoeEnv->WsSession(), |
|
184 AppHelpContextL()); |
|
185 break; |
|
186 } |
|
187 // these all are same: save & exit |
|
188 case EAknSoftkeyBack: |
|
189 case EAknSoftkeyExit: |
|
190 case EEikCmdExit: |
|
191 { |
|
192 CBlidTripMeterView* view = static_cast<CBlidTripMeterView*>( View( TUid::Uid( EBlidTripMeterView ) ) ); |
|
193 if( view ) |
|
194 { |
|
195 view->GetControl()->SaveOdometerValue(); |
|
196 } |
|
197 ////////////////////////////////////// |
|
198 RWsSession& ws = iCoeEnv->WsSession(); |
|
199 TApaTaskList taskList(ws); |
|
200 TUid appUid = { KBLIDUID3 }; |
|
201 TApaTask task = taskList.FindApp( appUid ); |
|
202 if ( task.Exists() ) |
|
203 { |
|
204 // stop any task runing for this application. |
|
205 task.EndTask(); |
|
206 } |
|
207 //////////////////////////////////////// |
|
208 Exit(); |
|
209 break; |
|
210 } |
|
211 case EBlidCmdSettings: |
|
212 { |
|
213 ActivateLocalViewL( TUid::Uid(EBlidSettingsView) ); |
|
214 break; |
|
215 } |
|
216 case EBlidCmdSatelliteStatus: |
|
217 { |
|
218 TRAPD( error, LaunchSatelliteInfoDlgL() ); |
|
219 if ( error != KErrNone ) |
|
220 { |
|
221 // need to be NULL, before leave |
|
222 iSatelliteInfo = NULL; |
|
223 User::Leave( error ); |
|
224 } |
|
225 break; |
|
226 } |
|
227 default: |
|
228 break; |
|
229 } |
|
230 } |
|
231 |
|
232 // ---------------------------------------------------- |
|
233 // CBlidAppUi::TabChangedL |
|
234 // Called when Tab is changed, activates appropriate view |
|
235 // ---------------------------------------------------- |
|
236 // |
|
237 void CBlidAppUi::TabChangedL(TInt aIndex) |
|
238 { |
|
239 // Gets a subpane control by ID |
|
240 CAknNavigationControlContainer* naviCtrlContainer = |
|
241 static_cast<CAknNavigationControlContainer*> |
|
242 ( StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); |
|
243 __ASSERT_DEBUG( naviCtrlContainer, |
|
244 User::Panic(KPanicMsg, KBlidNullPointer) ); |
|
245 |
|
246 // Return topmost object from navigation pane's object stack. |
|
247 CAknNavigationDecorator* decorator = naviCtrlContainer->Top(); |
|
248 __ASSERT_DEBUG( decorator && decorator->ControlType() == |
|
249 CAknNavigationDecorator::ETabGroup, |
|
250 User::Panic( KPanicMsg, KBlidNullPointer ) ); |
|
251 |
|
252 CAknTabGroup* tabGroup = |
|
253 static_cast< CAknTabGroup* > ( decorator->DecoratedControl() ); |
|
254 __ASSERT_DEBUG( tabGroup && aIndex >= 0 && aIndex < tabGroup->TabCount(), |
|
255 User::Panic(KPanicMsg, KBlidNullPointer)); |
|
256 ActivateLocalViewL(TUid::Uid(tabGroup->TabIdFromIndex(aIndex))); |
|
257 } |
|
258 |
|
259 // ---------------------------------------------------- |
|
260 // CBlidAppUi::HandleForegroundEventL |
|
261 // Called whenever app goes to background or comes to foreground |
|
262 // ---------------------------------------------------- |
|
263 // |
|
264 void CBlidAppUi::HandleForegroundEventL(TBool aForeground) |
|
265 { |
|
266 CAknAppUi::HandleForegroundEventL( aForeground ); |
|
267 iForeground = aForeground; |
|
268 |
|
269 CBlidEng* engine = BlidDocument()->Engine(); |
|
270 if(aForeground) |
|
271 { |
|
272 engine->SetAppMode(CBlidEng::EAppForeground); |
|
273 if(engine->LocationModel() ) |
|
274 { |
|
275 if( engine->LocationModel()->GetRegisteredViewId() == EBlidNavigationView ) |
|
276 { |
|
277 CBlidNavigationView* view = static_cast<CBlidNavigationView*>(View(TUid::Uid(EBlidNavigationView))); |
|
278 view->GetControl()->UpdateL(); |
|
279 } |
|
280 if( engine->LocationModel()->GetRegisteredViewId() == EBlidTripMeterView ) |
|
281 { |
|
282 CBlidTripMeterView* view = static_cast<CBlidTripMeterView*>( View( TUid::Uid( EBlidTripMeterView ) ) ); |
|
283 view->GetControl()->UpdateL(); |
|
284 } |
|
285 } |
|
286 } |
|
287 else |
|
288 { |
|
289 engine->SetAppMode(CBlidEng::EAppBackground); |
|
290 engine->SetBackLightStateL(CBlidEng::EBlidBacklightNormal); |
|
291 if( engine->LocationModel()->GetRegisteredViewId() == EBlidNavigationView ) |
|
292 { |
|
293 CBlidNavigationView* view = static_cast<CBlidNavigationView*>( View( TUid::Uid( EBlidNavigationView ) ) ); |
|
294 view->GetControl()->StopPlayerL(); |
|
295 } |
|
296 } |
|
297 |
|
298 |
|
299 if ( iSatelliteInfo ) |
|
300 { |
|
301 iSatelliteInfo->HandleForegroundEventL( aForeground ); |
|
302 } |
|
303 |
|
304 } |
|
305 |
|
306 // ---------------------------------------------------- |
|
307 // CBlidAppUi::ProcessKeyEventL |
|
308 // Process key event |
|
309 // ---------------------------------------------------- |
|
310 // |
|
311 TBool CBlidAppUi::ProcessKeyEventL( const TKeyEvent& /*aKeyEvent*/, |
|
312 TEventCode /*aType*/ ) |
|
313 { |
|
314 return EKeyWasNotConsumed; |
|
315 } |
|
316 |
|
317 // ---------------------------------------------------- |
|
318 // CBlidAppUi::TabObserver |
|
319 // Retruns CBlidAppUi pointer, which is Tab observer |
|
320 // ---------------------------------------------------- |
|
321 // |
|
322 MAknTabObserver* CBlidAppUi::TabObserver() |
|
323 { |
|
324 return this; |
|
325 } |
|
326 |
|
327 // ---------------------------------------------------- |
|
328 // CBlidAppUi::LaunchSatelliteInfoDlgL |
|
329 // Launches Satellite info dialog |
|
330 // ---------------------------------------------------- |
|
331 // |
|
332 void CBlidAppUi::LaunchSatelliteInfoDlgL() |
|
333 { |
|
334 HBufC* srvName = StringLoader::LoadLC( |
|
335 R_BLID_SERVICE_RULE_NAME, |
|
336 iCoeEnv ); |
|
337 iSatelliteInfo = CSatelliteInfoUI::NewL(); |
|
338 iSatelliteInfo->ExecuteLD( *srvName ); |
|
339 CleanupStack::PopAndDestroy(srvName); //srvName |
|
340 iSatelliteInfo = NULL; |
|
341 } |
|
342 |
|
343 // ---------------------------------------------------- |
|
344 // CBlidAppUi::IsForeground |
|
345 // Checks if App is in foreground |
|
346 // ---------------------------------------------------- |
|
347 // |
|
348 TBool CBlidAppUi::IsForeground() |
|
349 { |
|
350 return iForeground; |
|
351 } |
|
352 |
|
353 // ---------------------------------------------------- |
|
354 // CBlidAppUi::HandleResourceChangeL |
|
355 // Handles a change to the resources |
|
356 // ---------------------------------------------------- |
|
357 // |
|
358 void CBlidAppUi::HandleResourceChangeL( TInt aType ) |
|
359 { |
|
360 CAknAppUi::HandleResourceChangeL( aType ); |
|
361 CBlidEng* engine = BlidDocument()->Engine(); |
|
362 |
|
363 if( engine->LocationModel() ) |
|
364 { |
|
365 CBlidNavigationView* NavView = static_cast<CBlidNavigationView*>(View(TUid::Uid(EBlidNavigationView))); |
|
366 NavView->HandleResourceChangeL( aType ); |
|
367 |
|
368 CBlidTripMeterView* TripView = static_cast<CBlidTripMeterView*>(View(TUid::Uid(EBlidTripMeterView))); |
|
369 TripView->HandleResourceChangeL( aType ); |
|
370 |
|
371 CBlidMainView* MainView = static_cast<CBlidMainView*>(View(TUid::Uid(EBlidMainView))); |
|
372 MainView->HandleResourceChangeL( aType ); |
|
373 |
|
374 CBlidSatelliteView* SatView = static_cast<CBlidSatelliteView*>(View(TUid::Uid(EBlidMainSatelliteView))); |
|
375 SatView->HandleResourceChangeL( aType ); |
|
376 } |
|
377 } |
|
378 |
|
379 // ---------------------------------------------------- |
|
380 // CBlidAppUi::SetSatelliteViewActive |
|
381 // Set satellite view active or inactive |
|
382 // ---------------------------------------------------- |
|
383 // |
|
384 void CBlidAppUi::SetSatelliteViewActive( TBool aActive ) |
|
385 { |
|
386 iIsSatViewActive = aActive; |
|
387 } |
|
388 |
|
389 // ---------------------------------------------------- |
|
390 // CBlidAppUi::IsSatelliteViewActive |
|
391 // Check if Satellite view is active |
|
392 // ---------------------------------------------------- |
|
393 // |
|
394 TBool CBlidAppUi::IsSatelliteViewActive( ) |
|
395 { |
|
396 return iIsSatViewActive; |
|
397 } |
|
398 |
|
399 // ---------------------------------------------------- |
|
400 // CBlidAppUi::ResetOdoMeterValueL |
|
401 // Resets the odometer value |
|
402 // ---------------------------------------------------- |
|
403 // |
|
404 void CBlidAppUi::ResetOdoMeterValueL() |
|
405 { |
|
406 CBlidTripMeterView* view = static_cast<CBlidTripMeterView*>(View(TUid::Uid(EBlidTripMeterView))); |
|
407 if( view ) |
|
408 { |
|
409 view->GetControl()->ResetOdometerDistanceL(); |
|
410 } |
|
411 } |
|
412 // End of File |
|