96 // C++ default destructor. |
94 // C++ default destructor. |
97 // ----------------------------------------------------------------------------- |
95 // ----------------------------------------------------------------------------- |
98 // |
96 // |
99 CXnPluginData::~CXnPluginData() |
97 CXnPluginData::~CXnPluginData() |
100 { |
98 { |
101 if ( iLoader ) |
|
102 { |
|
103 iLoader->Cancel(); |
|
104 } |
|
105 |
|
106 delete iLoader; |
|
107 |
|
108 Flush(); |
99 Flush(); |
109 } |
100 } |
110 |
101 |
111 // ----------------------------------------------------------------------------- |
102 // ----------------------------------------------------------------------------- |
112 // CXnPluginData::ConstructL() |
103 // CXnPluginData::ConstructL() |
113 // 2nd phase constructor |
104 // 2nd phase constructor |
114 // ----------------------------------------------------------------------------- |
105 // ----------------------------------------------------------------------------- |
115 // |
106 // |
116 void CXnPluginData::ConstructL() |
107 void CXnPluginData::ConstructL() |
117 { |
108 { |
118 iLoader = CPeriodic::NewL( CActive::EPriorityStandard ); |
|
119 } |
109 } |
120 |
110 |
121 // ----------------------------------------------------------------------------- |
111 // ----------------------------------------------------------------------------- |
122 // CXnPluginData::Load() |
112 // CXnPluginData::Load() |
|
113 // |
123 // ----------------------------------------------------------------------------- |
114 // ----------------------------------------------------------------------------- |
124 // |
115 // |
125 TInt CXnPluginData::Load() |
116 TInt CXnPluginData::Load() |
126 { |
117 { |
127 if ( Occupied() ) |
118 if ( Occupied() ) |
162 return err; |
150 return err; |
163 } |
151 } |
164 |
152 |
165 // ----------------------------------------------------------------------------- |
153 // ----------------------------------------------------------------------------- |
166 // CXnPluginData::Destroy() |
154 // CXnPluginData::Destroy() |
|
155 // |
167 // ----------------------------------------------------------------------------- |
156 // ----------------------------------------------------------------------------- |
168 // |
157 // |
169 void CXnPluginData::Destroy() |
158 void CXnPluginData::Destroy() |
170 { |
159 { |
171 if ( Occupied() ) |
160 if ( Occupied() ) |
172 { |
161 { |
173 DestroyPublishers(); |
162 DestroyPublishers( EAiFwPluginShutdown ); |
174 |
163 |
175 TRAP_IGNORE( iManager.Parser().DestroyWidgetL( *this ) ); |
164 TRAP_IGNORE( iManager.Parser().DestroyWidgetL( *this ) ); |
176 } |
165 } |
177 |
166 |
178 Flush(); |
167 Flush(); |
179 } |
168 } |
180 |
169 |
181 // ----------------------------------------------------------------------------- |
170 // ----------------------------------------------------------------------------- |
182 // CXnPluginData::LoadPublishers |
|
183 // Loads data plugins associated to the plugin |
|
184 // ----------------------------------------------------------------------------- |
|
185 // |
|
186 void CXnPluginData::LoadPublishers() |
|
187 { |
|
188 if ( !Active() || !Occupied() || iContentSourceNodes.Count() == 0 ) |
|
189 { |
|
190 return; |
|
191 } |
|
192 |
|
193 iLoader->Cancel(); |
|
194 |
|
195 iLoader->Start( TTimeIntervalMicroSeconds32( 50 ), |
|
196 TTimeIntervalMicroSeconds32( 50 ), |
|
197 TCallBack( PeriodicEventL, this ) ); |
|
198 } |
|
199 |
|
200 // ----------------------------------------------------------------------------- |
|
201 // CXnPluginData::PeriodicEventL() |
|
202 // |
|
203 // ----------------------------------------------------------------------------- |
|
204 // |
|
205 /* static */ TInt CXnPluginData::PeriodicEventL( TAny* aAny ) |
|
206 { |
|
207 CXnPluginData* self = static_cast< CXnPluginData* >( aAny ); |
|
208 |
|
209 self->iLoader->Cancel(); |
|
210 |
|
211 TInt reason( EAiFwPluginStartup ); |
|
212 |
|
213 if ( self->LoadPublishers( reason ) != KErrNone ) |
|
214 { |
|
215 self->iManager.UnloadWidgetFromPluginL( *self, ETrue ); |
|
216 |
|
217 self->ShowContentRemovedError(); |
|
218 } |
|
219 |
|
220 return KErrNone; |
|
221 } |
|
222 |
|
223 // ----------------------------------------------------------------------------- |
|
224 // CXnPluginData::LoadPublishers() |
171 // CXnPluginData::LoadPublishers() |
225 // |
172 // |
226 // ----------------------------------------------------------------------------- |
173 // ----------------------------------------------------------------------------- |
227 // |
174 // |
228 TInt CXnPluginData::LoadPublishers( TInt aReason ) |
175 void CXnPluginData::LoadPublishers( TInt aReason ) |
229 { |
176 { |
230 __PRINTS( "*** CXnPluginData::LoadPublishers" ); |
177 __PRINTS( "*** CXnPluginData::LoadPublishers" ); |
231 |
178 |
232 TInt err( KErrNone ); |
179 if ( !Active() || !Occupied() ) |
233 |
180 { |
234 TRAP( err, |
181 __PRINTS( "*** CXnPluginData::LoadPublishers - done, !Active() || !Occupied()" ); |
235 for ( TInt i = 0; i < iContentSourceNodes.Count(); i++ ) |
182 |
236 { |
183 return; |
237 CXnNodeAppIf& plugin( iContentSourceNodes[i]->AppIfL() ); |
184 } |
238 |
185 |
239 TInt retval( |
186 TInt count( iPublishers.Count() ); |
240 iManager.AppUiAdapter().LoadPublisher( plugin, aReason ) ); |
187 |
241 |
188 if ( count == 0 ) |
242 if ( !err ) |
189 { |
243 { |
190 TRAP_IGNORE( NotifyPublisherReadyL() ); |
244 err = retval; |
191 } |
245 } |
192 else |
246 } |
193 { |
247 ); |
194 for ( TInt i = 0; i < count; i++ ) |
248 |
195 { |
249 iVirginPublishers = EFalse; |
196 iPublishers[i]->Load( aReason ); |
250 |
197 } |
251 if ( !Removable() ) |
|
252 { |
|
253 // Not allowed to remove even it fails |
|
254 return KErrNone; |
|
255 } |
198 } |
256 |
199 |
257 __PRINTS( "*** CXnPluginData::LoadPublishers - done" ); |
200 __PRINTS( "*** CXnPluginData::LoadPublishers - done" ); |
258 |
201 } |
259 return err; |
202 |
|
203 // ----------------------------------------------------------------------------- |
|
204 // CXnPluginData::NotifyPublisherReadyL() |
|
205 // |
|
206 // ----------------------------------------------------------------------------- |
|
207 // |
|
208 void CXnPluginData::NotifyPublisherReadyL() |
|
209 { |
|
210 if ( iParent ) |
|
211 { |
|
212 // Forward to parent |
|
213 iParent->NotifyPublisherReadyL(); |
|
214 } |
260 } |
215 } |
261 |
216 |
262 // ----------------------------------------------------------------------------- |
217 // ----------------------------------------------------------------------------- |
263 // CXnPluginData::DestroyPublishers |
218 // CXnPluginData::DestroyPublishers |
264 // Remove data plugins associated to the plugin |
219 // |
265 // ----------------------------------------------------------------------------- |
220 // ----------------------------------------------------------------------------- |
266 // |
221 // |
267 void CXnPluginData::DestroyPublishers() |
222 void CXnPluginData::DestroyPublishers( TInt aReason ) |
268 { |
223 { |
269 __PRINTS( "*** CXnPluginData::DestroyPublishers" ); |
224 __PRINTS( "*** CXnPluginData::DestroyPublishers" ); |
270 |
225 |
271 if ( Occupied() ) |
226 if ( !Occupied() ) |
272 { |
227 { |
273 // If not all plugins loaded yet |
228 __PRINTS( "*** CXnPluginData::DestroyPublishers - done, !Occupied()" ); |
274 iLoader->Cancel(); |
|
275 |
229 |
276 TRAP_IGNORE( DoDestroyPublishersL() ); |
230 return; |
277 |
|
278 User::Heap().Compress(); |
|
279 } |
231 } |
280 |
232 |
|
233 for ( TInt i = 0; i < iPublishers.Count(); i++ ) |
|
234 { |
|
235 iPublishers[i]->Destroy( aReason ); |
|
236 } |
|
237 |
281 __PRINTS( "*** CXnPluginData::DestroyPublishers - done" ); |
238 __PRINTS( "*** CXnPluginData::DestroyPublishers - done" ); |
282 } |
239 } |
283 |
240 |
284 // ----------------------------------------------------------------------------- |
241 // ----------------------------------------------------------------------------- |
285 // CXnPluginData::VirginPublishers |
|
286 // |
|
287 // ----------------------------------------------------------------------------- |
|
288 // |
|
289 TBool CXnPluginData::VirginPublishers() const |
|
290 { |
|
291 return iVirginPublishers; |
|
292 } |
|
293 |
|
294 // ----------------------------------------------------------------------------- |
|
295 // CXnPluginData::DoDestroyPublishersL |
|
296 // Remove data plugins associated to the plugin |
|
297 // ----------------------------------------------------------------------------- |
|
298 // |
|
299 void CXnPluginData::DoDestroyPublishersL() |
|
300 { |
|
301 __TIME_MARK( time ); |
|
302 |
|
303 for ( TInt i = 0; i < iContentSourceNodes.Count(); i++ ) |
|
304 { |
|
305 CXnNodeAppIf& plugin( iContentSourceNodes[i]->AppIfL() ); |
|
306 |
|
307 // Destruction is synchronous |
|
308 iManager.AppUiAdapter().DestroyPublisher( |
|
309 plugin, EAiFwPluginShutdown ); |
|
310 } |
|
311 |
|
312 __TIME_ENDMARK( "CXnPluginData::DoDestroyPublishersL, done", time ); |
|
313 } |
|
314 |
|
315 // ----------------------------------------------------------------------------- |
|
316 // CXnPluginData::SetConfigurationIdL() |
242 // CXnPluginData::SetConfigurationIdL() |
|
243 // |
317 // ----------------------------------------------------------------------------- |
244 // ----------------------------------------------------------------------------- |
318 // |
245 // |
319 void CXnPluginData::SetConfigurationIdL( const TDesC8& aConfigurationId ) |
246 void CXnPluginData::SetConfigurationIdL( const TDesC8& aConfigurationId ) |
320 { |
247 { |
321 delete iConfigurationId; |
248 delete iConfigurationId; |
454 } |
389 } |
455 } |
390 } |
456 |
391 |
457 // ----------------------------------------------------------------------------- |
392 // ----------------------------------------------------------------------------- |
458 // CXnPluginData::SetContentSourceNodeL() |
393 // CXnPluginData::SetContentSourceNodeL() |
|
394 // |
459 // ----------------------------------------------------------------------------- |
395 // ----------------------------------------------------------------------------- |
460 // |
396 // |
461 void CXnPluginData::SetContentSourceNodeL( CXnNode* aNode ) |
397 void CXnPluginData::SetContentSourceNodeL( CXnNode* aNode ) |
462 { |
398 { |
463 User::LeaveIfError( iContentSourceNodes.InsertInAddressOrder( aNode ) ); |
399 if ( !aNode ) |
|
400 { |
|
401 return; |
|
402 } |
|
403 |
|
404 for ( TInt i = 0; i < iPublishers.Count(); i++ ) |
|
405 { |
|
406 if ( *iPublishers[i] == *aNode ) |
|
407 { |
|
408 // Duplicate entries not allowed |
|
409 return; |
|
410 } |
|
411 } |
|
412 |
|
413 CXnPublisherData* publisher = |
|
414 CXnPublisherData::NewLC( *this, *aNode ); |
|
415 |
|
416 iPublishers.AppendL( publisher ); |
|
417 CleanupStack::Pop( publisher ); |
464 } |
418 } |
465 |
419 |
466 // ----------------------------------------------------------------------------- |
420 // ----------------------------------------------------------------------------- |
467 // CXnPluginData::ContentSourceNodesL() |
421 // CXnPluginData::ContentSourceNodesL() |
|
422 // |
468 // ----------------------------------------------------------------------------- |
423 // ----------------------------------------------------------------------------- |
469 // |
424 // |
470 void CXnPluginData::ContentSourceNodesL( RPointerArray< CXnNode >& aList ) const |
425 void CXnPluginData::ContentSourceNodesL( RPointerArray< CXnNode >& aList ) const |
471 { |
426 { |
472 for ( TInt i = 0; i < iContentSourceNodes.Count(); i++ ) |
427 for ( TInt i = 0; i < iPublishers.Count(); i++ ) |
473 { |
428 { |
474 aList.AppendL( iContentSourceNodes[i] ); |
429 aList.AppendL( iPublishers[i]->ContentSource() ); |
475 } |
430 } |
476 } |
431 } |
477 |
432 |
|
433 // ----------------------------------------------------------------------------- |
|
434 // CXnPluginData::Publishers() |
|
435 // |
|
436 // ----------------------------------------------------------------------------- |
|
437 // |
|
438 void CXnPluginData::PublishersL( RPointerArray< CXnPublisherData >& aList ) const |
|
439 { |
|
440 for ( TInt i = 0; i < iPublishers.Count(); i++ ) |
|
441 { |
|
442 aList.AppendL( iPublishers[i] ); |
|
443 } |
|
444 } |
|
445 |
478 // ----------------------------------------------------------------------------- |
446 // ----------------------------------------------------------------------------- |
479 // CXnPluginData::SetAppearanceNodeL() |
447 // CXnPluginData::SetAppearanceNodeL() |
|
448 // |
480 // ----------------------------------------------------------------------------- |
449 // ----------------------------------------------------------------------------- |
481 // |
450 // |
482 void CXnPluginData::SetAppearanceNodeL( CXnNode* aNode ) |
451 void CXnPluginData::SetAppearanceNodeL( CXnNode* aNode ) |
483 { |
452 { |
484 User::LeaveIfError( iAppearanceNodes.InsertInAddressOrder( aNode ) ); |
453 User::LeaveIfError( iAppearanceNodes.InsertInAddressOrder( aNode ) ); |
485 } |
454 } |
486 |
455 |
487 // ----------------------------------------------------------------------------- |
456 // ----------------------------------------------------------------------------- |
488 // CXnPluginData::AppearanceNodesL() |
457 // CXnPluginData::AppearanceNodesL() |
|
458 // |
489 // ----------------------------------------------------------------------------- |
459 // ----------------------------------------------------------------------------- |
490 // |
460 // |
491 void CXnPluginData::AppearanceNodesL( RPointerArray< CXnNode >& aList ) const |
461 void CXnPluginData::AppearanceNodesL( RPointerArray< CXnNode >& aList ) const |
492 { |
462 { |
493 for ( TInt i = 0; i < iAppearanceNodes.Count(); i++ ) |
463 for ( TInt i = 0; i < iAppearanceNodes.Count(); i++ ) |
496 } |
466 } |
497 } |
467 } |
498 |
468 |
499 // ----------------------------------------------------------------------------- |
469 // ----------------------------------------------------------------------------- |
500 // CXnPluginData::SetInitialFocusNodeL() |
470 // CXnPluginData::SetInitialFocusNodeL() |
|
471 // |
501 // ----------------------------------------------------------------------------- |
472 // ----------------------------------------------------------------------------- |
502 // |
473 // |
503 void CXnPluginData::SetInitialFocusNodeL( CXnNode* aNode ) |
474 void CXnPluginData::SetInitialFocusNodeL( CXnNode* aNode ) |
504 { |
475 { |
505 User::LeaveIfError( iInitialFocusNodes.InsertInAddressOrder( aNode ) ); |
476 User::LeaveIfError( iInitialFocusNodes.InsertInAddressOrder( aNode ) ); |
506 } |
477 } |
507 |
478 |
508 // ----------------------------------------------------------------------------- |
479 // ----------------------------------------------------------------------------- |
509 // CXnPluginData::InitialFocusNodesL() |
480 // CXnPluginData::InitialFocusNodesL() |
|
481 // |
510 // ----------------------------------------------------------------------------- |
482 // ----------------------------------------------------------------------------- |
511 // |
483 // |
512 void CXnPluginData::InitialFocusNodesL( RPointerArray< CXnNode >& aList ) const |
484 void CXnPluginData::InitialFocusNodesL( RPointerArray< CXnNode >& aList ) const |
513 { |
485 { |
514 for ( TInt i = 0; i < iInitialFocusNodes.Count(); i++ ) |
486 for ( TInt i = 0; i < iInitialFocusNodes.Count(); i++ ) |
632 return ( iPopupNodes.Count() > 0 ); |
604 return ( iPopupNodes.Count() > 0 ); |
633 } |
605 } |
634 |
606 |
635 // ----------------------------------------------------------------------------- |
607 // ----------------------------------------------------------------------------- |
636 // CXnPluginData::PopupNodesL() |
608 // CXnPluginData::PopupNodesL() |
|
609 // |
637 // ----------------------------------------------------------------------------- |
610 // ----------------------------------------------------------------------------- |
638 // |
611 // |
639 void CXnPluginData::PopupNodesL( RPointerArray< CXnNode >& aList ) const |
612 void CXnPluginData::PopupNodesL( RPointerArray< CXnNode >& aList ) const |
640 { |
613 { |
641 for ( TInt i = 0; i < iPopupNodes.Count(); i++ ) |
614 for ( TInt i = 0; i < iPopupNodes.Count(); i++ ) |
642 { |
615 { |
643 aList.AppendL( iPopupNodes[i] ); |
616 aList.AppendL( iPopupNodes[i] ); |
644 } |
617 } |
645 } |
|
646 |
|
647 //------------------------------------------------------------------------------ |
|
648 // CXnPluginData::ShowContentRemovedError() |
|
649 // |
|
650 //------------------------------------------------------------------------------ |
|
651 // |
|
652 void CXnPluginData::ShowContentRemovedError() |
|
653 { |
|
654 TRAP_IGNORE( DoShowContentRemovedErrorL() ); |
|
655 } |
|
656 |
|
657 //------------------------------------------------------------------------------ |
|
658 // CXnPluginData::DoShowContentRemovedErrorL() |
|
659 // |
|
660 //------------------------------------------------------------------------------ |
|
661 // |
|
662 void CXnPluginData::DoShowContentRemovedErrorL() |
|
663 { |
|
664 HBufC* msg( StringLoader::LoadLC( R_QTN_HS_ERROR_WIDGETS_REMOVED ) ); |
|
665 |
|
666 CAknErrorNote* note = new ( ELeave ) CAknErrorNote; |
|
667 CleanupStack::PushL( note ); |
|
668 |
|
669 note->ExecuteLD( *msg ); |
|
670 |
|
671 CleanupStack::Pop( note ); |
|
672 CleanupStack::PopAndDestroy( msg ); |
|
673 } |
|
674 |
|
675 //------------------------------------------------------------------------------ |
|
676 // CXnPluginData::ShowOutOfMemErrorL() |
|
677 // |
|
678 //------------------------------------------------------------------------------ |
|
679 // |
|
680 void CXnPluginData::ShowOutOfMemError() |
|
681 { |
|
682 TRAP_IGNORE( ViewManager().OomSysHandler().HandlePotentialOomL() ); |
|
683 } |
618 } |
684 |
619 |
685 // ----------------------------------------------------------------------------- |
620 // ----------------------------------------------------------------------------- |
686 // CXnViewData::SetLockingStatus |
621 // CXnViewData::SetLockingStatus |
687 // |
622 // |