diff -r 137ebc85284b -r 1b758917cafc idlehomescreen/xmluicontroller/src/databuffertransactionelement.cpp --- a/idlehomescreen/xmluicontroller/src/databuffertransactionelement.cpp Tue May 25 12:29:32 2010 +0300 +++ b/idlehomescreen/xmluicontroller/src/databuffertransactionelement.cpp Wed Jun 09 09:29:04 2010 +0300 @@ -19,6 +19,7 @@ #include "databuffertransactionelement.h" #include "aixmluiutils.h" +#include "xncomponent.h" #include "xntype.h" #include "xntext.h" #include "xnnewsticker.h" @@ -51,13 +52,32 @@ CDataBufferTransactionElement::~CDataBufferTransactionElement() { + delete iNewData; + delete iCid; } void CDataBufferTransactionElement::InitializeL( CXnNodeAppIf& aTarget, const TDesC8& aData ) { CheckTypeL( aTarget ); SetTarget( aTarget ); - iNewData.Set( aData ); + + delete iNewData; + iNewData = NULL; + + iNewData = aData.AllocL(); + } + +void CDataBufferTransactionElement::InitializeL( CXnNodeAppIf& aTarget, const TDesC8& aData, + const TDesC& aCid, TInt aIndex ) + { + InitializeL( aTarget, aData ); + + iIndex = aIndex; + + delete iCid; + iCid = NULL; + + iCid = aCid.AllocL(); } void CDataBufferTransactionElement::UpdateDataL() @@ -73,7 +93,13 @@ { CTransactionElement::Reset(); - iNewData.Set( KNullDesC8); + delete iNewData; + iNewData = NULL; + + delete iCid; + iCid = NULL; + + iIndex = KErrNotFound; } TBool CDataBufferTransactionElement::IsSupported( CXnNodeAppIf& aTarget, @@ -103,6 +129,10 @@ // Newsticker support return ( type == XnNewstickerInterface::MXnNewstickerInterface::Type() ); } + else if ( aContentType == KContentTypeData ) + { + return ( type == AiUiDef::xml::element::KData() ); + } return EFalse; } @@ -112,13 +142,14 @@ // Get type info const TDesC8& type = LeaveIfNull( aTarget.Type(), KErrNotSupported )->Type(); - // Text element, menu item, and newsticker supported + // Text element, menu item, data and newsticker supported if ( type != XnTextInterface::MXnTextInterface::Type() && type != KXnMenuItem && type != KXnMenu && type != XnPropertyNames::softkey::KNodeName && type != XnPropertyNames::volumecontrol::KSlider && - type != XnNewstickerInterface::MXnNewstickerInterface::Type() ) + type != XnNewstickerInterface::MXnNewstickerInterface::Type() && + type != AiUiDef::xml::element::KData() ) { User::Leave( KErrNotSupported ); } @@ -132,7 +163,7 @@ if ( type == XnTextInterface::MXnTextInterface::Type() ) // Text element { // Set character data directly to target - Target().SetPCDataL( iNewData ); + Target().SetPCDataL( iNewData ? *iNewData : KNullDesC8() ); } else if ( type == XnPropertyNames::softkey::KNodeName || type == KXnMenuItem || @@ -150,7 +181,7 @@ CleanupStack::PushL( propertyValue ); propertyValue->SetStringValueL( CXnDomPropertyValue::EString, - iNewData ); + iNewData ? *iNewData : KNullDesC8() ); CXnProperty* newProperty = CXnProperty::NewL( XnPropertyNames::menu::KLabel, propertyValue, @@ -175,9 +206,14 @@ LeaveIfNull( volumeControl, KErrNotSupported ); TInt32 volume = 0; - User::LeaveIfError( AiUtility::ParseInt( volume, iNewData ) ); + User::LeaveIfError( AiUtility::ParseInt( volume, iNewData ? *iNewData : KNullDesC8() ) ); volumeControl->SetValue( volume ); } + else if ( type == AiUiDef::xml::element::KData() ) + { + CXnComponent& component( Target().ParentL()->Component() ); + component.SetDataL( iNewData ? *iNewData : KNullDesC8(), iCid ? *iCid : KNullDesC(), iIndex ); + } else { User::Leave( KErrNotSupported );