void CMainMenuGridContainer::DeleteItemL(TInt aIndex) { CArrayPtr<CGulIcon>* icons = iGrid->ItemDrawer()->FormattedCellData()->IconArray(); if (icons && aIndex >= 0 && aIndex < icons->Count()) { //Delete item if index is valid. _LIT(KItem, "%d\t\t0"); TBuf<8> buf; MDesCArray* array = iGrid->Model()->ItemTextArray(); CDesCArray* cArray = (CDesCArray*)array; //Remove icon and items. icons->Delete(aIndex); cArray->Delete(aIndex, (cArray->Count() - aIndex)); iGrid->HandleItemRemovalL(); //Re-add the items behind, needed since we changed the indexes. for (TInt i = aIndex; i < icons->Count(); i++) { buf.Format(KItem, i); cArray->AppendL(buf); } //Inform list box that data was added. iGrid->HandleItemAdditionL(); SetGridGraphicStyleL(); } }
// --------------------------------------------------------------------------- // CAppMngr2ListContainer::DeleteItemSpecificIcons() // --------------------------------------------------------------------------- // void CAppMngr2ListContainer::DeleteItemSpecificIcons( CArrayPtr<CGulIcon>& aIconArray ) { if( iItemSpecificIcons ) { TInt iconArrayCount = aIconArray.Count(); TInt firstItemSpecificIcon = iconArrayCount - iItemSpecificIcons; for( TInt index = firstItemSpecificIcon; index < iconArrayCount; index++ ) { delete aIconArray[ index ]; } aIconArray.Delete( firstItemSpecificIcon, iItemSpecificIcons ); iItemSpecificIcons = 0; } }
// ------------------------------------------------------------------------------------------------ // CNSmlDataModBase::MergeEntityL // Merges data from old entity to new entity. // ------------------------------------------------------------------------------------------------ void CNSmlDataModBase::MergeEntityL( CVersitParser* aNewEntity, CVersitParser* aOldEntity, TBool& aModified, TBool aFieldLevel ) const { _DBG_FILE("CNSmlDataModBase::MergeEntityL(): begin"); // Remove all data that was not supposed to be supported by the partner but // it was still sent to us. StripAllNotOnPartnerListL( aNewEntity, aModified ); if( !aFieldLevel ) { // Remove all properties from old item that are supported by remote server. // If it is field level then old this is not done. StripAllOnPartnerListL( aOldEntity, aModified, ETrue ); CArrayPtr<CParserProperty>* mergeProps = aOldEntity->ArrayOfProperties( ETrue ); if( mergeProps ) { CleanupStack::PushL( mergeProps ); for( TInt i = 0; i < mergeProps->Count(); i++ ) { aNewEntity->AddPropertyL( mergeProps->At( i ), ETrue ); } CleanupStack::PopAndDestroy(); // mergeProps } } else // Support for Field level merge { //Field level merge. Merge new item with old item. Properties of //the old item are copied to new item if the new item entity does not //contain certain property. //------------------------------------------------------------------------ // Old New Merged //------------------------------------------------------------------------ // BEGIN:VCARD -> BEGIN:VCARD = BEGIN:VCARD // VERSION:2.1 -> VERSION:2.1 = VERSION:2.1 // N:Smith;John -> N:White;John = N:White;John // ORG:Firm = ORG:Firm // TITLE:Boss = TITLE:Boss // -> TEL;CELL;VOICE:1234 = TEL;CELL;VOICE:1234 // END:VCARD -> END:VCARD = END:VCARD CArrayPtr<CParserProperty>* newProps = aNewEntity->ArrayOfProperties( EFalse ); if( newProps ) { CArrayPtr<CParserProperty>* oldProps = aOldEntity->ArrayOfProperties( EFalse ); // Iterate through old list of properties. Add missing properties from old // contact item, if some of the properties is not included in new item. for( TInt i = 0; i < oldProps->Count(); ) { CParserProperty* oldProperty = oldProps->At( i ); //Check if the property is included in received vCard CArrayPtr<CParserProperty>* properties = aNewEntity->PropertyL( oldProperty->Name(), oldProperty->Uid(), EFalse ); if ( !properties ) { // New vCard does not include certain property. Copy all matching properties from // existing contact item. CArrayPtr<CParserProperty>* oldProperties = aOldEntity->PropertyL( oldProperty->Name(), oldProperty->Uid(), ETrue ); CleanupPtrArrayPushL( oldProperties ); for ( TInt j = oldProperties->Count()-1; j >= 0; --j ) { CParserProperty* property = oldProperties->At( j ); oldProperties->Delete( j ); CleanupStack::PushL( property ); aNewEntity->AddPropertyL( property, EFalse ); CleanupStack::Pop( property ); aModified = ETrue; } CleanupStack::PopAndDestroy( oldProperties ); } else { // If new vCard includes at least one property with same name we will not copy // any any property with same name from existing contact item. delete properties; ++i; } } } } #ifdef __NSML_DEBUG__ CArrayPtr<CParserProperty>* props = aNewEntity->ArrayOfProperties( EFalse ); for( TInt i = 0; i < props->Count(); i++ ) { TBuf8<512> b; const CParserProperty* p = props->At( i ); b = p->Name(); const CArrayPtr<CParserParam>* pa = ( ( CNSmlProperty* )p )->Parameters(); if( pa ) { for( TInt i2 = 0; i2 < pa->Count(); i2++ ) { b.Append( _L8(":") ); b.Append( pa->At( i2 )->Name() ); } } DBG_ARGS8(_S8("CNSmlDataModBase::MergeEntityL(): %S"), &b); } #endif // __NSML_DEBUG__ _DBG_FILE("CNSmlDataModBase::MergeEntityL(): end"); }
// ------------------------------------------------------------------------------------------------ // CNSmlDataModBase::StripAllNotOnPartnerListL // Strips all data from entity that is not supported by remote server. // ------------------------------------------------------------------------------------------------ void CNSmlDataModBase::StripAllNotOnPartnerListL( CVersitParser* aEntity, TBool& aModified, TBool aParamLevelCheck ) const { _DBG_FILE("CNSmlDataModBase::StripAllNotOnPartnerListL(): begin"); TInt remotepropertycount = iRemoteStoreFormat->MimeFormat( iUsedRemoteMimeType ).PropertyCount(); if( iRemoteStoreFormat->MimeFormat( iUsedRemoteMimeType ).PropertyCount() ) { // Check correct Data Sync protocol TInt value( EDataSyncNotRunning ); TSmlProtocolVersion usedSyncProtocol( ESmlVersion1_2 ); TInt error = RProperty::Get( KPSUidDataSynchronizationInternalKeys, KDataSyncStatus, value ); if ( error == KErrNone && value == EDataSyncRunning ) { usedSyncProtocol = ESmlVersion1_1_2; } TBool wasModified( EFalse ); CArrayPtr<CParserProperty>* allProps = aEntity->ArrayOfProperties( EFalse ); for( TInt i = 0; i < allProps->Count(); ) // Variable i is not increased here because size of count might be changes during loop { const CParserProperty& ownProperty = *allProps->At( i ); TBool removeMe( ETrue ); for( TInt i2 = 0; i2 < iRemoteStoreFormat->MimeFormat( iUsedRemoteMimeType ).PropertyCount(); i2++ ) { const CSmlDataProperty& remoteProperty = iRemoteStoreFormat->MimeFormat( iUsedRemoteMimeType ).Property( i2 ); TPtrC8 remotename = remoteProperty.Field().Name().DesC(); if( !ownProperty.Name().Compare( remoteProperty.Field().Name().DesC() ) ) { TInt remoteparamcount = remoteProperty.ParamCount(); if( remoteProperty.ParamCount() > 0 && aParamLevelCheck ) { if ( usedSyncProtocol == ESmlVersion1_1_2 ) { const CParserProperty* p = allProps->At( i ); TInt entityParamCount = (( CNSmlProperty* )p)->ParamCount(); if( entityParamCount > 0) { for( TInt i3 = 0; i3 < remoteProperty.ParamCount(); i3++ ) { TPtrC8 remoteparamname = remoteProperty.Param( i3 ).Field().Name().DesC(); if( ownProperty.Param( remoteProperty.Param( i3 ).Field().Name().DesC() ) ) { removeMe = EFalse; } } } else { removeMe = EFalse; } } else // ESmlVersion1_2 { CArrayPtr<CParserParam>* ownerparamarray = ownProperty.ParamArray(); if(ownerparamarray != NULL) { for(TInt ownerparam = 0; ownerparam < ownerparamarray->Count(); ownerparam++) { removeMe = ETrue; const CParserParam& ownParam = *ownerparamarray->At( ownerparam ); TPtrC8 ownparamname = ownParam.Name(); TPtrC8 ownparamvalue = ownParam.Value(); if(ownparamvalue == _L8("")) { for(TInt remoteparam = 0; remoteparam < remoteProperty.ParamCount(); remoteparam++) { TDesC8 remoteparamname = remoteProperty.Param( remoteparam ).Field().Name().DesC(); const CSmlDataField& field = remoteProperty.Param( remoteparam ).Field(); if( field.EnumValueCount() > 0) { for( TInt rmtenumcount = 0; rmtenumcount < field.EnumValueCount(); rmtenumcount++ ) { TPtrC8 rmtenumvalue = field.EnumValue( rmtenumcount ).DesC(); if( rmtenumvalue.Compare(ownparamname)== 0 ) { removeMe = EFalse; break; } } } else { removeMe = EFalse; break; } } } else { //Handling when the device supports VersitTokenType as "Encoding" if(ownparamname == KVersitTokenENCODING) { removeMe = EFalse; } else { for(TInt remoteparam = 0; remoteparam < remoteProperty.ParamCount(); remoteparam++) { TDesC8 remoteparamname = remoteProperty.Param( remoteparam ).Field().Name().DesC(); if(ownparamname.Compare(remoteProperty.Param( remoteparam ).Field().Name().DesC()) == 0) { const CSmlDataField& field = remoteProperty.Param( remoteparam ).Field(); if( field.EnumValueCount() > 0) { for( TInt rmtenumcount = 0; rmtenumcount < field.EnumValueCount(); rmtenumcount++ ) { TPtrC8 rmtenumvalue = field.EnumValue( rmtenumcount ).DesC(); if( rmtenumvalue.Compare(ownparamvalue)== 0 ) { removeMe = EFalse; break; } } } else { removeMe = EFalse; break; } } } } } if( removeMe ) { break; } } } else { removeMe = EFalse; } } } else { removeMe = EFalse; } if( !removeMe ) { break; } } } if( removeMe ) { #ifdef __NSML_DEBUG__ TPtrC8 pn( ownProperty.Name() ); DBG_ARGS8(_S8("CNSmlDataModBase::StripAllNotOnPartnerListL(): Dropping %S"), &pn); #endif // __NSML_DEBUG__ delete allProps->At( i ); allProps->Delete( i ); wasModified = ETrue; aModified = ETrue; } else { #ifdef __NSML_DEBUG__ TPtrC8 pn( ownProperty.Name() ); DBG_ARGS8(_S8("CNSmlDataModBase::StripAllNotOnPartnerListL(): NOT dropping %S"), &pn); #endif // __NSML_DEBUG__ i++; } } // can't use aModified as that may have been set earlier! if( wasModified ) { allProps->Compress(); } } _DBG_FILE("CNSmlDataModBase::StripAllNotOnPartnerListL(): end"); }