--- a/idlehomescreen/xmluirendering/uiengine/src/xnplugindata.cpp Tue Apr 27 16:26:12 2010 +0300
+++ b/idlehomescreen/xmluirendering/uiengine/src/xnplugindata.cpp Tue May 11 16:02:39 2010 +0300
@@ -17,12 +17,9 @@
// System includes
#include <utf.h>
-#include <aifwdefs.h>
-#include <StringLoader.h>
-#include <aknnotewrappers.h>
// User includes
-#include <xnuiengine.rsg>
+#include <aifwdefs.h>
#include "xnappuiadapter.h"
#include "xncomposer.h"
#include "xnodtparser.h"
@@ -31,6 +28,7 @@
#include "xnnode.h"
#include "xnplugindata.h"
#include "xnviewdata.h"
+#include "xnpublisherdata.h"
#include "xnviewmanager.h"
#include "xnoomsyshandler.h"
#include "xnpanic.h"
@@ -98,13 +96,6 @@
//
CXnPluginData::~CXnPluginData()
{
- if ( iLoader )
- {
- iLoader->Cancel();
- }
-
- delete iLoader;
-
Flush();
}
@@ -115,11 +106,11 @@
//
void CXnPluginData::ConstructL()
{
- iLoader = CPeriodic::NewL( CActive::EPriorityStandard );
}
// -----------------------------------------------------------------------------
// CXnPluginData::Load()
+//
// -----------------------------------------------------------------------------
//
TInt CXnPluginData::Load()
@@ -146,12 +137,9 @@
}
if ( err == KErrNone )
- {
- // Mark publishers as virgin
- iVirginPublishers = ETrue;
-
+ {
// Succesfully composed, try schedule publishers' loading
- LoadPublishers();
+ LoadPublishers( EAiFwPluginStartup );
}
else if ( err == KXnErrPluginFailure )
{
@@ -164,13 +152,14 @@
// -----------------------------------------------------------------------------
// CXnPluginData::Destroy()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::Destroy()
{
if ( Occupied() )
{
- DestroyPublishers();
+ DestroyPublishers( EAiFwPluginShutdown );
TRAP_IGNORE( iManager.Parser().DestroyWidgetL( *this ) );
}
@@ -179,141 +168,79 @@
}
// -----------------------------------------------------------------------------
-// CXnPluginData::LoadPublishers
-// Loads data plugins associated to the plugin
-// -----------------------------------------------------------------------------
-//
-void CXnPluginData::LoadPublishers()
- {
- if ( !Active() || !Occupied() || iContentSourceNodes.Count() == 0 )
- {
- return;
- }
-
- iLoader->Cancel();
-
- iLoader->Start( TTimeIntervalMicroSeconds32( 50 ),
- TTimeIntervalMicroSeconds32( 50 ),
- TCallBack( PeriodicEventL, this ) );
- }
-
-// -----------------------------------------------------------------------------
-// CXnPluginData::PeriodicEventL()
-//
-// -----------------------------------------------------------------------------
-//
-/* static */ TInt CXnPluginData::PeriodicEventL( TAny* aAny )
- {
- CXnPluginData* self = static_cast< CXnPluginData* >( aAny );
-
- self->iLoader->Cancel();
-
- TInt reason( EAiFwPluginStartup );
-
- if ( self->LoadPublishers( reason ) != KErrNone )
- {
- self->iManager.UnloadWidgetFromPluginL( *self, ETrue );
-
- self->ShowContentRemovedError();
- }
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
// CXnPluginData::LoadPublishers()
//
// -----------------------------------------------------------------------------
//
-TInt CXnPluginData::LoadPublishers( TInt aReason )
+void CXnPluginData::LoadPublishers( TInt aReason )
{
__PRINTS( "*** CXnPluginData::LoadPublishers" );
+
+ if ( !Active() || !Occupied() )
+ {
+ __PRINTS( "*** CXnPluginData::LoadPublishers - done, !Active() || !Occupied()" );
+
+ return;
+ }
- TInt err( KErrNone );
-
- TRAP( err,
- for ( TInt i = 0; i < iContentSourceNodes.Count(); i++ )
- {
- CXnNodeAppIf& plugin( iContentSourceNodes[i]->AppIfL() );
-
- TInt retval(
- iManager.AppUiAdapter().LoadPublisher( plugin, aReason ) );
-
- if ( !err )
- {
- err = retval;
- }
- }
- );
-
- iVirginPublishers = EFalse;
+ TInt count( iPublishers.Count() );
- if ( !Removable() )
+ if ( count == 0 )
{
- // Not allowed to remove even it fails
- return KErrNone;
+ TRAP_IGNORE( NotifyPublisherReadyL() );
+ }
+ else
+ {
+ for ( TInt i = 0; i < count; i++ )
+ {
+ iPublishers[i]->Load( aReason );
+ }
}
__PRINTS( "*** CXnPluginData::LoadPublishers - done" );
-
- return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CXnPluginData::NotifyPublisherReadyL()
+//
+// -----------------------------------------------------------------------------
+//
+void CXnPluginData::NotifyPublisherReadyL()
+ {
+ if ( iParent )
+ {
+ // Forward to parent
+ iParent->NotifyPublisherReadyL();
+ }
}
// -----------------------------------------------------------------------------
// CXnPluginData::DestroyPublishers
-// Remove data plugins associated to the plugin
+//
// -----------------------------------------------------------------------------
//
-void CXnPluginData::DestroyPublishers()
+void CXnPluginData::DestroyPublishers( TInt aReason )
{
__PRINTS( "*** CXnPluginData::DestroyPublishers" );
- if ( Occupied() )
+ if ( !Occupied() )
{
- // If not all plugins loaded yet
- iLoader->Cancel();
+ __PRINTS( "*** CXnPluginData::DestroyPublishers - done, !Occupied()" );
- TRAP_IGNORE( DoDestroyPublishersL() );
-
- User::Heap().Compress();
+ return;
}
+ for ( TInt i = 0; i < iPublishers.Count(); i++ )
+ {
+ iPublishers[i]->Destroy( aReason );
+ }
+
__PRINTS( "*** CXnPluginData::DestroyPublishers - done" );
}
// -----------------------------------------------------------------------------
-// CXnPluginData::VirginPublishers
-//
-// -----------------------------------------------------------------------------
-//
-TBool CXnPluginData::VirginPublishers() const
- {
- return iVirginPublishers;
- }
-
-// -----------------------------------------------------------------------------
-// CXnPluginData::DoDestroyPublishersL
-// Remove data plugins associated to the plugin
-// -----------------------------------------------------------------------------
+// CXnPluginData::SetConfigurationIdL()
//
-void CXnPluginData::DoDestroyPublishersL()
- {
- __TIME_MARK( time );
-
- for ( TInt i = 0; i < iContentSourceNodes.Count(); i++ )
- {
- CXnNodeAppIf& plugin( iContentSourceNodes[i]->AppIfL() );
-
- // Destruction is synchronous
- iManager.AppUiAdapter().DestroyPublisher(
- plugin, EAiFwPluginShutdown );
- }
-
- __TIME_ENDMARK( "CXnPluginData::DoDestroyPublishersL, done", time );
- }
-
-// -----------------------------------------------------------------------------
-// CXnPluginData::SetConfigurationIdL()
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetConfigurationIdL( const TDesC8& aConfigurationId )
@@ -326,6 +253,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetPluginIdL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetPluginIdL( const TDesC8& aPluginId )
@@ -338,6 +266,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetPluginUidL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetPluginUidL( const TDesC8& aPluginUid )
@@ -350,6 +279,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetPluginNameL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetPluginNameL( const TDesC8& aPluginName )
@@ -389,6 +319,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetPluginTypeL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetPluginTypeL( const TDesC8& aPluginType )
@@ -401,6 +332,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetResources()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetResources( CArrayPtrSeg< CXnResource >* aResources )
@@ -418,6 +350,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::ResourcesL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::ResourcesL( CArrayPtrSeg< CXnResource >& aList ) const
@@ -430,6 +363,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetControlL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetControlL( CXnNode* aNode )
@@ -444,6 +378,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::ControlsL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::ControlsL( RPointerArray< CXnControlAdapter >& aList ) const
@@ -456,27 +391,61 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetContentSourceNodeL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetContentSourceNodeL( CXnNode* aNode )
- {
- User::LeaveIfError( iContentSourceNodes.InsertInAddressOrder( aNode ) );
+ {
+ if ( !aNode )
+ {
+ return;
+ }
+
+ for ( TInt i = 0; i < iPublishers.Count(); i++ )
+ {
+ if ( *iPublishers[i] == *aNode )
+ {
+ // Duplicate entries not allowed
+ return;
+ }
+ }
+
+ CXnPublisherData* publisher =
+ CXnPublisherData::NewLC( *this, *aNode );
+
+ iPublishers.AppendL( publisher );
+ CleanupStack::Pop( publisher );
}
// -----------------------------------------------------------------------------
// CXnPluginData::ContentSourceNodesL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::ContentSourceNodesL( RPointerArray< CXnNode >& aList ) const
{
- for ( TInt i = 0; i < iContentSourceNodes.Count(); i++ )
+ for ( TInt i = 0; i < iPublishers.Count(); i++ )
{
- aList.AppendL( iContentSourceNodes[i] );
+ aList.AppendL( iPublishers[i]->ContentSource() );
}
}
// -----------------------------------------------------------------------------
+// CXnPluginData::Publishers()
+//
+// -----------------------------------------------------------------------------
+//
+void CXnPluginData::PublishersL( RPointerArray< CXnPublisherData >& aList ) const
+ {
+ for ( TInt i = 0; i < iPublishers.Count(); i++ )
+ {
+ aList.AppendL( iPublishers[i] );
+ }
+ }
+
+// -----------------------------------------------------------------------------
// CXnPluginData::SetAppearanceNodeL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetAppearanceNodeL( CXnNode* aNode )
@@ -486,6 +455,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::AppearanceNodesL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::AppearanceNodesL( RPointerArray< CXnNode >& aList ) const
@@ -498,6 +468,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::SetInitialFocusNodeL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::SetInitialFocusNodeL( CXnNode* aNode )
@@ -507,6 +478,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::InitialFocusNodesL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::InitialFocusNodesL( RPointerArray< CXnNode >& aList ) const
@@ -558,12 +530,12 @@
iResources = NULL;
}
- iControls.Reset();
- iContentSourceNodes.Reset();
+ iPublishers.ResetAndDestroy();
+ iControls.Reset();
iAppearanceNodes.Reset();
iInitialFocusNodes.Reset();
- iPopupNodes.Reset();
- iPluginsData.ResetAndDestroy();
+ iPopupNodes.Reset();
+ iPluginsData.ResetAndDestroy();
User::Heap().Compress();
}
@@ -634,6 +606,7 @@
// -----------------------------------------------------------------------------
// CXnPluginData::PopupNodesL()
+//
// -----------------------------------------------------------------------------
//
void CXnPluginData::PopupNodesL( RPointerArray< CXnNode >& aList ) const
@@ -644,44 +617,6 @@
}
}
-//------------------------------------------------------------------------------
-// CXnPluginData::ShowContentRemovedError()
-//
-//------------------------------------------------------------------------------
-//
-void CXnPluginData::ShowContentRemovedError()
- {
- TRAP_IGNORE( DoShowContentRemovedErrorL() );
- }
-
-//------------------------------------------------------------------------------
-// CXnPluginData::DoShowContentRemovedErrorL()
-//
-//------------------------------------------------------------------------------
-//
-void CXnPluginData::DoShowContentRemovedErrorL()
- {
- HBufC* msg( StringLoader::LoadLC( R_QTN_HS_ERROR_WIDGETS_REMOVED ) );
-
- CAknErrorNote* note = new ( ELeave ) CAknErrorNote;
- CleanupStack::PushL( note );
-
- note->ExecuteLD( *msg );
-
- CleanupStack::Pop( note );
- CleanupStack::PopAndDestroy( msg );
- }
-
-//------------------------------------------------------------------------------
-// CXnPluginData::ShowOutOfMemErrorL()
-//
-//------------------------------------------------------------------------------
-//
-void CXnPluginData::ShowOutOfMemError()
- {
- TRAP_IGNORE( ViewManager().OomSysHandler().HandlePotentialOomL() );
- }
-
// -----------------------------------------------------------------------------
// CXnViewData::SetLockingStatus
//