omads/omadsappui/AspSyncUtil/src/AspContentDialog.cpp
changeset 0 dab8a81a92de
child 1 95fdac6ccb5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsappui/AspSyncUtil/src/AspContentDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
@@ -0,0 +1,1203 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// INCLUDE FILES
+#include "AspContentDialog.h"
+#include "AspUtil.h"
+#include "AspDefines.h"
+#include "AspDialogUtil.h"
+#include "AspResHandler.h"
+#include "AspDebug.h"
+#include "AspSyncUtil.rh"
+#include <csxhelp/ds.hlp.hrh>
+
+#include <aspsyncutil.mbg>  // for bitmap enumerations
+#include <AknIconArray.h>   // for GulArray
+#include <featmgr.h>   // FeatureManager
+#include "AspSchedule.h"
+
+const TInt KMSKControlId( CEikButtonGroupContainer::EMiddleSoftkeyPosition );
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::ShowDialogL
+// 
+// -----------------------------------------------------------------------------
+TBool CAspContentDialog::ShowDialogL(TAspParam& aParam)
+	{
+	CAspContentDialog* dialog = CAspContentDialog::NewL(aParam);
+
+	return dialog->ExecuteLD(R_ASP_CONTENT_DIALOG);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::NewL
+//
+// -----------------------------------------------------------------------------
+CAspContentDialog* CAspContentDialog::NewL(TAspParam& aParam)
+    {
+    FLOG( _L("CAspContentDialog::NewL START") );
+    
+    CAspContentDialog* self = new (ELeave) CAspContentDialog(aParam);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    FLOG( _L("CAspContentDialog::NewL END") );
+    return(self);
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::CAspContentDialog
+//
+//------------------------------------------------------------------------------
+//
+CAspContentDialog::CAspContentDialog(TAspParam& aParam)
+	{
+	iApplicationId = aParam.iApplicationId;
+	iProfile = aParam.iProfile;
+	iSyncSession = aParam.iSyncSession;
+	iContentList = aParam.iContentList;
+	iDialogParam = &aParam;
+	iDataProviderId = aParam.iDataProviderId;
+	
+	iDataStoreChanged = EFalse;
+	iMskEmpty = EFalse;
+	
+    __ASSERT_ALWAYS(iDataProviderId != KErrNotFound, TUtil::Panic(KErrGeneral));	
+	__ASSERT_ALWAYS(iProfile, TUtil::Panic(KErrGeneral));
+	__ASSERT_ALWAYS(iContentList, TUtil::Panic(KErrGeneral));
+	__ASSERT_ALWAYS(iSyncSession, TUtil::Panic(KErrGeneral));
+	}
+
+
+//------------------------------------------------------------------------------
+// Destructor
+//
+//------------------------------------------------------------------------------
+//
+CAspContentDialog::~CAspContentDialog()
+	{
+    FLOG( _L("CAspContentDialog::~CAspContentDialog START") );
+	    
+    if (iSettingList)
+    	{
+    	iSettingList->ResetAndDestroy();
+	    delete iSettingList;
+    	}
+
+	delete iStatusPaneHandler;
+	delete iLocalDataStores;
+	
+	if (iAvkonAppUi)
+		{
+		iAvkonAppUi->RemoveFromStack(this);
+		}
+		
+    FLOG( _L("CAspContentDialog::~CAspContentDialog END") );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspContentDialog::ConstructL()
+    {
+    FLOG( _L("CAspContentDialog::ConstructL START") );
+    
+	CAknDialog::ConstructL(R_ASP_CONTENT_DIALOG_MENU);
+	
+	iSettingEnforcement = TUtil::SettingEnforcementState();
+	
+    iSettingList = new (ELeave) CArrayPtrFlat<CAspListItemData>(KDefaultArraySize);
+	
+	iLocalDataStores = new (ELeave) CDesCArrayFlat(KDefaultArraySize);
+	iContentList->GetLocalDatabaseList(iDataProviderId, iLocalDataStores);
+	
+	TInt count = iLocalDataStores->Count();
+	if (count == 0)
+		{
+		if (iDataProviderId == KUidNSmlAdapterEMail.iUid)
+			{
+			TDialogUtil::ShowErrorNoteL(R_ASP_NO_MAILBOXES);
+			}
+		else
+			{
+			TDialogUtil::ShowErrorNoteL(R_ASP_LOG_ERR_LOCALDATABASE);
+			User::Leave(KErrNotFound);
+			}
+		}
+		
+	InitTaskDataL();
+
+	// get previous title so it can be restored
+	iStatusPaneHandler = CStatusPaneHandler::NewL(iAvkonAppUi);
+	iStatusPaneHandler->StoreOriginalTitleL();
+	
+	// store current navi pane
+    iStatusPaneHandler->StoreNavipaneL();
+
+	FLOG( _L("CAspContentDialog::ConstructL END") );
+    } 
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::ActivateL (from CCoeControl)
+//
+// Called by system when dialog is activated
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::ActivateL()
+	{
+    CAknDialog::ActivateL();
+
+	// this cannot be in ConstructL which is executed before dialog is launched
+	iAvkonAppUi->AddToStackL(this);
+    }
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::CheckContentSettingL
+//
+// Check if the MSK label is correct for the context
+//------------------------------------------------------------------------------
+
+void CAspContentDialog::CheckContentSettingL(const TKeyEvent& aKeyEvent)
+	{
+	
+	TInt curIndex = iListBox->CurrentItemIndex();
+	TInt count = iSettingList->Count();
+	CAspListItemData* lastItem = (*iSettingList)[--count];
+	
+	switch (aKeyEvent.iCode)
+		{
+		case EKeyUpArrow:
+			{
+				if (curIndex)
+				{
+					curIndex--;
+				}
+				else
+				{
+				    curIndex = lastItem->iIndex;
+				}
+			break;
+			}
+		case EKeyDownArrow:
+			{
+				if (curIndex == lastItem->iIndex)
+				{
+				curIndex = 0;
+				}
+				else
+				{
+				curIndex++;
+				}
+			break;
+			}
+		}	
+	CAspListItemData* curItem = GetItemForIndex(curIndex);
+	if(curItem->iHidden == EVisibilityReadOnly)
+	{
+		UpdateMiddleSoftKeyLabelL(EAknSoftkeyOpen,R_TEXT_SOFTKEY_EMPTY);
+	   	iMskEmpty = ETrue;
+	   	return;	
+	}
+	if(iMskEmpty)
+	{
+		UpdateMiddleSoftKeyLabelL(EAknSoftkeyEmpty,R_QTN_MSK_CHANGE);
+	   	iMskEmpty = EFalse;
+	}
+
+	}
+	
+//------------------------------------------------------------------------------
+// CAspContentDialog::UpdateMiddleSoftKeyLabelL 
+//
+// Update the MSK 
+//------------------------------------------------------------------------------
+	void CAspContentDialog::UpdateMiddleSoftKeyLabelL(TInt aCommandId,TInt aResourceId)
+	{
+		ButtonGroupContainer().RemoveCommandFromStack(KMSKControlId,aCommandId );
+		HBufC* middleSKText = StringLoader::LoadLC( aResourceId );
+
+		ButtonGroupContainer().AddCommandToStackL(
+		KMSKControlId,
+		aCommandId,
+		*middleSKText );
+		CleanupStack::PopAndDestroy( middleSKText );
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::GetHelpContext
+//
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::GetHelpContext(TCoeHelpContext& aContext) const
+	{
+	aContext.iMajor = KUidSmlSyncApp;
+    
+	TInt dataProvider = DataProviderType();
+	if (dataProvider == EApplicationIdContact)
+		{
+		aContext.iContext = KDS_HLP_SETTINGS_CNT;
+		}
+	else if (dataProvider == EApplicationIdCalendar)
+		{
+		aContext.iContext = KDS_HLP_SETTINGS_CAL;
+		}
+	else if (dataProvider == EApplicationIdNote)
+		{
+		aContext.iContext = KDS_HLP_SETTINGS_NOTES;
+		}
+	else if (dataProvider == EApplicationIdSms)
+		{
+		aContext.iContext = KDS_HLP_SETTINGS_SMS;
+		}
+	else
+		{
+		aContext.iContext = KDS_HLP_MAIN_VIEW;  // unknown application
+		}
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::ProcessCommandL
+//
+// Handle menu commands.
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::ProcessCommandL( TInt aCommandId )
+	{
+	HideMenu();
+
+	switch (aCommandId)
+		{
+
+		case EAknCmdHelp:
+			{
+			TUtil::LaunchHelpAppL(iEikonEnv);
+            break;
+			}
+
+		case EAspMenuCmdChange:
+			{				
+			HandleOKL();
+
+			break;
+			}
+
+        case EAspMenuCmdExit:
+        case EAknCmdExit:
+        case EEikCmdExit:
+			{
+			// close dialog and exit calling application
+			iAvkonAppUi->ProcessCommandL(EAknCmdExit);
+			break;
+			}
+
+
+		default:
+		    break;
+		}
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::OfferKeyEventL
+//
+// Handle key events.
+//------------------------------------------------------------------------------
+//
+TKeyResponse CAspContentDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	if (aType == EEventKey)
+		{
+		switch (aKeyEvent.iCode)
+			{
+			case EKeyEscape:  // framework calls this when dialog must shut down
+				{
+				return CAknDialog::OfferKeyEventL(aKeyEvent, aType);
+        		}
+
+			case EKeyEnter:
+			case EKeyOK: // OK button
+				{
+				HandleOKL();
+				return EKeyWasConsumed;
+				}
+			case EKeyUpArrow:
+			case EKeyDownArrow:
+			    {
+			    	if(!iSettingEnforcement)
+				    {
+				    TRAPD(err ,CheckContentSettingL(aKeyEvent));
+		         	User::LeaveIfError(err);
+				    }
+			    break;
+			    }
+			}
+		}
+
+	return CAknDialog::OfferKeyEventL(aKeyEvent, aType);
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::OkToExitL
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspContentDialog::OkToExitL(TInt aButtonId)
+	{
+	if (aButtonId == EEikBidCancel)
+		{
+		// save silently and quit application
+		TRAP_IGNORE(SaveSettingsL());
+		return ETrue;
+		}
+
+	if (aButtonId == EAknSoftkeyBack)
+        {
+		TInt index = CheckMandatoryFields();
+		if (index != KErrNotFound)
+			{
+			if (!TDialogUtil::ShowConfirmationQueryL(R_ASP_EXIT_ANYWAY))
+				{
+				iListBox->SetCurrentItemIndexAndDraw(index);
+				return EFalse; // leave dialog open
+				}
+			}
+		
+		TRAP_IGNORE(SaveSettingsL());
+		
+		return ETrue;
+		}
+		
+	if (aButtonId == EAknSoftkeyOpen||aButtonId == EAknSoftkeyEmpty )  // MSK
+        {
+        HandleOKL();
+		return EFalse;  // leave dialog open
+		}
+		
+
+	return CAknDialog::OkToExitL(aButtonId);
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::PreLayoutDynInitL
+//
+// Called by system before the dialog is shown.
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::PreLayoutDynInitL()
+	{
+	iListBox = (CAknSettingStyleListBox*)Control(EAspContentDialog);
+	
+   	__ASSERT_ALWAYS(iListBox, TUtil::Panic(KErrGeneral));
+	
+	iListBox->SetListBoxObserver(this);
+	iListBox->CreateScrollBarFrameL(ETrue);
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+	                   CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+	                   
+   	SetIconsL();	                   
+	
+    CreateSettingsListL();
+    UpdateListBoxL(iListBox, iSettingList);
+	TInt curIndex = iListBox->CurrentItemIndex();
+		
+	CAspListItemData* curItem = GetItemForIndex(curIndex);
+	TBool isPCSuite = CAspProfile::IsPCSuiteProfile(iProfile);
+	
+	if(iSettingEnforcement || curItem->iHidden == EVisibilityReadOnly)
+	{
+	UpdateMiddleSoftKeyLabelL(EAknSoftkeyOpen,R_TEXT_SOFTKEY_EMPTY);	
+   		
+	}
+	
+	//Set title pane text
+	TInt index = iContentList->FindProviderIndex(iDataProviderId);
+	if (index != KErrNotFound)
+		{
+		TAspProviderItem& item = iContentList->ProviderItem(index);
+    	HBufC* hBuf = CAspResHandler::GetContentTitleLC(iDataProviderId, 
+    	                                                item.iDisplayName);
+	    iStatusPaneHandler->SetTitleL(hBuf->Des());
+	    CleanupStack::PopAndDestroy(hBuf);
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspContentDialog::SetIconsL
+//
+// ----------------------------------------------------------------------------
+//
+void CAspContentDialog::SetIconsL()
+    {
+    if (!iListBox)
+    	{
+    	return;
+    	}
+ 
+ 	TFileName bitmapName;
+	CAspResHandler::GetBitmapFileName(bitmapName);
+	CArrayPtr<CGulIcon>* icons = new (ELeave) CAknIconArray(KDefaultArraySize);
+	CleanupStack::PushL(icons);
+	
+	icons->AppendL(IconL(KAknsIIDQgnIndiSettProtectedAdd, bitmapName, 
+	                     EMbmAspsyncutilQgn_indi_sett_protected_add,
+	                     EMbmAspsyncutilQgn_indi_sett_protected_add_mask));
+	
+    // delete old icons
+    CArrayPtr<CGulIcon>* arr = iListBox->ItemDrawer()->FormattedCellData()->IconArray();
+    if (arr)
+    	{
+    	arr->ResetAndDestroy();
+	    delete arr;
+	    arr = NULL;
+    	}
+
+	iListBox->ItemDrawer()->FormattedCellData()->SetIconArrayL(icons);
+	CleanupStack::Pop(icons);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::IconL
+// 
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CAspContentDialog::IconL(TAknsItemID aId, const TDesC& aFileName,
+                                   TInt aFileIndex, TInt aFileMaskIndex)
+	{
+    return TDialogUtil::CreateIconL(aId, aFileName, aFileIndex, aFileMaskIndex);
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::DynInitMenuPaneL
+//
+// Called by system before menu is shown.
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::DynInitMenuPaneL( TInt aResourceID, CEikMenuPane* aMenuPane)
+	{
+    if (aResourceID != R_ASP_CONTENT_DIALOG_MENU_PANE)
+		{
+		return;
+		}
+
+	if (iListBox->Model()->NumberOfItems() == 0)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdChange);
+		}
+		
+	CAspListItemData* item = GetItemForIndex(iListBox->CurrentItemIndex());
+
+	if (item->iHidden == EVisibilityReadOnly)
+	    {
+	    TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdChange);
+	    }
+	    
+	TInt provider = DataProviderType();
+
+	if (provider == KErrNotFound)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAknCmdHelp);
+		}
+	
+    if (!FeatureManager::FeatureSupported(KFeatureIdHelp))
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAknCmdHelp);
+		}
+
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::HandleListBoxEventL
+//
+// Handle listbox events.
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/, 
+                                            TListBoxEvent aEventType)
+	{
+    switch ( aEventType )
+        {
+        case EEventItemDoubleClicked:
+            HandleOKL();
+            break;
+        default:
+           break;
+        }
+	}
+
+
+//-----------------------------------------------------------------------------
+// CAspContentDialog::HandleOKL
+//
+// Handle content parameter editing.
+//-----------------------------------------------------------------------------
+//
+void CAspContentDialog::HandleOKL()
+	{
+	CAspListItemData* item = GetItemForIndex(iListBox->CurrentItemIndex());
+	if (item->iHidden == EVisibilityReadOnly)
+    	{
+    	if(!iSettingEnforcement)
+    	{
+     	TDialogUtil::ShowInformationNoteL(R_ASP_NOTE_READ_ONLY);
+    	}
+     	else
+     	{
+     		TDialogUtil::ShowInformationNoteL(R_ASP_PROTECTED_SETTING);	
+     	}
+  		return;
+     	}
+
+	if (EditSettingItemL(*item))
+		{
+		SetVisibility();
+		UpdateListBoxL(iListBox, iSettingList);
+		}
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspContentDialog::HandleResourceChange
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspContentDialog::HandleResourceChange(TInt aType)
+    {   
+    if (aType == KEikDynamicLayoutVariantSwitch) //Handle change in layout orientation
+        {
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+        SetRect(mainPaneRect);
+        iListBox->SetSize(mainPaneRect.Size());
+        CCoeControl::HandleResourceChange(aType);
+		DrawDeferred();
+	    return;
+		}
+		
+    if (aType == KAknsMessageSkinChange)
+        {
+        TRAP_IGNORE(SetIconsL());
+        }
+		
+		
+    CCoeControl::HandleResourceChange(aType);
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::InitTaskDataL
+//
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::InitTaskDataL()
+	{
+	iContentList->ReadTaskL(iDataProviderId, iLocalDatabase, iRemoteDatabase,
+		                    iTaskEnabled, iSyncDirection);
+		                        
+   	if (iSettingEnforcement)
+		{
+		return;
+		}
+
+    // check that local database exists
+    if (iLocalDatabase.Length() > 0)
+    	{
+    	TInt pos = 0;
+    	if (iLocalDataStores->Find(iLocalDatabase, pos) != 0)
+    		{
+    		iLocalDatabase = KNullDesC; // local database not found
+    		iDataStoreChanged = ETrue;
+    		}
+    	}
+
+    if (iLocalDatabase.Length() == 0)
+    	{
+    	if (iDataProviderId == KUidNSmlAdapterEMail.iUid)
+    		{
+    		iContentList->UpdateDataProviderL(iDataProviderId);
+    		}
+    		
+	    TInt index = iContentList->FindProviderIndex(iDataProviderId);
+	    if (index != KErrNotFound)
+		    {
+		    TAspProviderItem& item = iContentList->ProviderItem(index);
+     		if (item.iDefaultDataStore.Length() > 0)
+			    {
+			    iLocalDatabase = item.iDefaultDataStore;
+			    iDataStoreChanged = ETrue;
+			    }
+		    }
+    	}
+    }
+
+
+// ----------------------------------------------------------------------------
+// CAspContentDialog::UpdateListBoxL
+// 
+// Add settings headers into listbox.
+// ----------------------------------------------------------------------------
+//
+void CAspContentDialog::UpdateListBoxL(CEikTextListBox* aListBox,
+                                       CAspSettingList* aItemList)
+	{
+	CDesCArray* arr = (CDesCArray*)aListBox->Model()->ItemTextArray();
+	arr->Reset();
+
+	TInt count = aItemList->Count();
+	for (TInt index=0; index<count; index++ )
+		{
+	   	TBool convert = ETrue;
+	   	TBool isPCSuite=CAspProfile::IsPCSuiteProfile(iProfile);
+	   	TBool readOnly = iProfile->DeleteAllowed();
+
+		CAspListItemData* item = (*aItemList)[index];
+		TInt id=item->iItemId;
+		if(iSettingEnforcement)
+		{
+			if(id==EAspLocalDatabase ||id==EAspRemoteDatabase )
+			convert=EFalse;
+		}
+		else
+		{
+ 			   if(isPCSuite|| !readOnly)
+				{
+					if(id==EAspRemoteDatabase)
+					convert=EFalse;
+				}
+	
+		}
+		if (item->iHidden != EVisibilityHidden)
+			{
+			HBufC* hBuf = item->ListItemTextL(convert);
+			CleanupStack::PushL(hBuf);
+
+			arr->AppendL(hBuf->Des());
+			
+			// store listbox index (from zero up) into setting item 
+			item->iIndex = arr->Count() - 1;
+
+			CleanupStack::PopAndDestroy(hBuf);
+			}
+		else
+			{
+			item->iIndex = KErrNotFound;
+			}
+		}
+
+	aListBox->HandleItemAdditionL();
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspContentDialog::CreateSettingsListL
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspContentDialog::CreateSettingsListL()
+	{
+	AddItemL(EAspLocalDatabase, R_ASP_SETT_LOCAL_DATABASE);
+	AddRemoteDatabaseL(iDataProviderId);
+
+	// write setting data into each CAspListItemData
+	TInt count = iSettingList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		InitSettingItemL((*iSettingList)[i]);
+		}
+
+    SetVisibility();
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspContentDialog::AddItemL
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspContentDialog::AddItemL(TInt aItemId, TInt aResourceId)
+	{
+    CAspListItemData* item = CAspListItemData::NewLC();
+	item->SetHeaderL(aResourceId);
+	item->iItemId = aItemId;
+	iSettingList->AppendL(item);
+	CleanupStack::Pop(item);
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspContentDialog::AddRemoteDatabaseL
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspContentDialog::AddRemoteDatabaseL(TInt aDataProviderId)
+	{
+    CAspListItemData* item = CAspListItemData::NewLC();
+    TInt resId = CAspResHandler::RemoteDatabaseHeaderId(aDataProviderId);
+	item->SetHeaderL(resId);
+	item->iItemId = EAspRemoteDatabase;
+	iSettingList->AppendL(item);
+	CleanupStack::Pop(item);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::SetVisibility
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspContentDialog::SetVisibility()
+	{
+    TBool isPCSuite = CAspProfile::IsPCSuiteProfile(iProfile);
+    TBool readOnly = iProfile->DeleteAllowed();
+    	
+	Item(EAspLocalDatabase)->iHidden = EVisibilityNormal;
+	if (iLocalDataStores->Count() < 2)
+		{
+		if (iDialogParam->iDataProviderId != KUidNSmlAdapterEMail.iUid)
+			{
+			Item(EAspLocalDatabase)->iHidden = EVisibilityHidden;
+			}
+		}
+		
+	if (isPCSuite)
+		{
+		if (Item(EAspLocalDatabase)->iHidden == EVisibilityNormal)
+			{
+			if (iDialogParam->iDataProviderId != KUidNSmlAdapterEMail.iUid)
+				{
+				Item(EAspLocalDatabase)->iHidden = EVisibilityReadOnly;
+				}
+			}
+		
+		TInt provider = DataProviderType();
+	    if (provider != KErrNotFound)
+		    {
+		    Item(EAspRemoteDatabase)->iHidden = EVisibilityReadOnly;    
+		    }
+		}
+
+	if(!readOnly)
+		{
+		TInt provider = DataProviderType();
+	    if (provider != KErrNotFound)
+		    {
+		    Item(EAspRemoteDatabase)->iHidden = EVisibilityReadOnly;    
+		    }
+		}
+		
+    if (iSettingEnforcement)
+    	{
+    	SetAllReadOnly(); // profile database is locked
+    	}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::SetAllReadOnly
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspContentDialog::SetAllReadOnly()
+	{
+	TInt count = iSettingList->Count();
+
+	for (TInt i=0; i<count; i++ )
+		{
+		CAspListItemData* item = (*iSettingList)[i];
+		if (item->iHidden != EVisibilityHidden)
+			{
+			item->iHidden = EVisibilityReadOnly;
+			}
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::InitSettingItemL
+// 
+// Constructs CAspListItemData for one setting.
+// -----------------------------------------------------------------------------
+//
+void CAspContentDialog::InitSettingItemL(CAspListItemData* aItem)
+	{
+	iBuf = KNullDesC;  // reset common buffer
+	
+	switch (aItem->iItemId)
+		{
+		case EAspLocalDatabase:
+			{
+    		aItem->SetValueL(iLocalDatabase);
+    		aItem->SetDisplayValueL(R_ASP_SETTING_VALUE_NONE);
+    		
+    		aItem->iMaxLength = KAspMaxLocalNameLength;
+    		aItem->iLatinInput = ETrue;
+    		aItem->iItemType = CAspListItemData::ETypeLocalDatabase;
+			break;
+			}
+
+		case EAspRemoteDatabase:
+			{
+			aItem->SetValueL(iRemoteDatabase);
+			aItem->SetDisplayValueL(R_ASP_MUST_BE_DEFINED);
+			
+			aItem->iMaxLength = KAspMaxRemoteNameLength;
+			aItem->iLatinInput = ETrue;
+			aItem->iMandatory = ETrue;
+			aItem->iItemType = CAspListItemData::ETypeText;
+			break;
+			}
+
+        default:
+			break;
+		}
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::SaveSettingsL
+//
+// Save content settings.
+//------------------------------------------------------------------------------
+//
+void CAspContentDialog::SaveSettingsL()
+	{
+	if (iSettingEnforcement)
+		{
+		return;
+		}
+    	
+	TBool localDatabaseChanged = EFalse;
+	TBool remoteDatabaseChanged = EFalse;
+
+	TPtrC ptr1 = Item(EAspLocalDatabase)->Value();
+	if (ptr1.Compare(iLocalDatabase) != 0)
+		{
+		localDatabaseChanged = ETrue;
+		}
+		
+	TPtrC ptr2 = Item(EAspRemoteDatabase)->Value();
+	if (ptr2.Compare(iRemoteDatabase) != 0)
+		{
+		remoteDatabaseChanged = ETrue;
+		}
+	
+	if (remoteDatabaseChanged || localDatabaseChanged || iDataStoreChanged)
+		{
+		iLocalDatabase = Item(EAspLocalDatabase)->Value();
+	    iRemoteDatabase = Item(EAspRemoteDatabase)->Value();
+        
+   	    iContentList->CreateTaskL(iDataProviderId, iLocalDatabase, iRemoteDatabase,
+	                              iTaskEnabled, iSyncDirection);
+		                          
+        iContentList->InitAllTasksL(); // iContentList comes from main view		                          
+		}
+		
+#ifdef RD_DSUI_TIMEDSYNC
+	CAspSchedule* schedule = CAspSchedule::NewLC();
+	TInt profileId = schedule->ProfileId();
+	if (profileId == iProfile->ProfileId())
+		{
+		schedule->UpdateProfileSettingsL();
+		}
+	CleanupStack::PopAndDestroy(schedule);
+#endif
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::CheckMandatoryFields
+//
+// Check that mandatory fields are filled correctly.
+//------------------------------------------------------------------------------
+//
+TInt CAspContentDialog::CheckMandatoryFields()
+	{
+	if (iSettingEnforcement)
+		{
+		return KErrNotFound;
+		}
+
+    if (!iContentList->TaskEnabled(iDataProviderId))
+    	{
+   		return KErrNotFound; // not part of sync - no need to check mandatory
+    	}
+	
+    TInt count = iSettingList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		CAspListItemData* item = (*iSettingList)[i];
+		if (item->iMandatory && item->IsEmpty() && (item->iHidden == EVisibilityNormal))
+			{
+			return item->iIndex;
+			}
+		}
+		
+	return KErrNotFound;
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::EditSettingItemL
+//
+// Calls setting editing functions. 
+//------------------------------------------------------------------------------
+//
+TBool CAspContentDialog::EditSettingItemL(CAspListItemData& aItem)
+	{
+	TBool ret = EFalse;
+	
+	switch (aItem.iItemType)
+		{
+		case CAspListItemData::ETypeText:
+			ret = EditSettingItemTextL(aItem);
+		    break;
+
+		case CAspListItemData::ETypeList:
+			ret = EditSettingItemListL(aItem);
+		    break;
+		
+		case CAspListItemData::ETypeLocalDatabase:
+			ret = EditSettingItemLocalDatabaseL(aItem);
+			break;
+
+		default:
+		    break;
+
+		}
+
+    return ret;
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::EditSettingItemListL
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspContentDialog::EditSettingItemListL(CAspListItemData& aItem)
+	{
+	TInt curSelection = aItem.iNumberData;
+	CDesCArray* arr = CAspResHandler::ReadDesArrayStaticLC(aItem.iResource);
+	
+	TBool ret = TDialogUtil::ShowListEditorL(arr, aItem.Header(), curSelection);
+	if (ret)
+		{
+		aItem.iNumberData = curSelection; 
+		aItem.SetValueL((*arr)[curSelection]);
+		}
+
+	CleanupStack::PopAndDestroy(arr);
+	return ret;
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::EditSettingItemTextL
+//
+// Edit text setting item.
+//------------------------------------------------------------------------------
+//
+TBool CAspContentDialog::EditSettingItemTextL(CAspListItemData& aItem)
+	{
+	TUtil::StrCopy(iBuf, aItem.Value());
+	
+    TBool ret = TDialogUtil::ShowTextEditorL(iBuf, aItem.Header(), 
+                aItem.iMandatory, aItem.iLatinInput, aItem.iMaxLength);
+   	if (ret)
+		{
+		aItem.SetValueL(iBuf);
+		}
+		
+	return ret;
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::EditSettingItemLocalDatabaseL
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspContentDialog::EditSettingItemLocalDatabaseL(CAspListItemData& aItem)
+	{
+	if (iLocalDataStores->Count() < 1)
+		{
+		if (iDataProviderId == KUidNSmlAdapterEMail.iUid)
+			{
+			TDialogUtil::ShowErrorNoteL(R_ASP_NO_MAILBOXES);
+			}
+			
+		return EFalse;
+		}
+	
+	TInt curSelection = 0;
+	TInt countDatabase = iLocalDataStores->Count();
+	
+	while (iLocalDataStores->Find(iLocalDatabase, curSelection) && (curSelection < countDatabase))
+		{
+		curSelection++;
+		}
+	if (TDialogUtil::ShowListEditorL(iLocalDataStores, aItem.Header(), curSelection))
+		{
+		aItem.SetValueL((*iLocalDataStores)[curSelection]);
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspContentDialog::EditSettingItemYesNoL
+//
+// Change Yes/No value straight if ok key is pressed.
+//------------------------------------------------------------------------------
+//
+TBool CAspContentDialog::EditSettingItemYesNoL(CAspListItemData& aItem)
+	{
+	CDesCArray* arr = CAspResHandler::ReadDesArrayStaticLC(aItem.iResource);
+	
+	if (aItem.iNumberData == EAspSettingDisabled)
+		{
+		aItem.iNumberData = EAspSettingEnabled;
+		}
+	else
+		{
+		aItem.iNumberData = EAspSettingDisabled;
+		}
+	
+	
+	// store localized setting text (Yes/No)
+	aItem.SetValueL( (*arr)[aItem.iNumberData] );
+
+	CleanupStack::PopAndDestroy(arr);
+	return ETrue;
+	}
+
+
+//-----------------------------------------------------------------------------
+// CAspContentDialog::GetItemForIndex
+// 
+// Find item in list position aIndex.
+//-----------------------------------------------------------------------------
+//
+CAspListItemData* CAspContentDialog::GetItemForIndex(TInt aIndex)
+	{
+	CAspListItemData* item = NULL;
+	
+	TInt count = iSettingList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		CAspListItemData* temp = (*iSettingList)[i];
+		if (temp->iIndex == aIndex)
+			{
+			item = temp;
+			break;
+			}
+		}
+
+	__ASSERT_ALWAYS(item, TUtil::Panic(KErrGeneral));
+
+    return item;
+	}
+
+
+//-----------------------------------------------------------------------------
+// CAspContentDialog::Item
+// 
+// Find item with aItemId (TAspConnectionSettingItem).
+//-----------------------------------------------------------------------------
+//
+CAspListItemData* CAspContentDialog::Item(TInt aItemId)
+	{
+	CAspListItemData* item = NULL;
+
+	TInt count = iSettingList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		CAspListItemData* temp = (*iSettingList)[i];
+		if (temp->iItemId == aItemId)
+			{
+			item = temp;
+			break;
+			}
+		}
+	
+	__ASSERT_ALWAYS(item, TUtil::Panic(KErrGeneral));
+
+    return item;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspContentDialog::DataProviderType
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAspContentDialog::DataProviderType() const
+    {
+    if (iDialogParam->iDataProviderId == KUidNSmlAdapterContact.iUid)
+    	{
+    	return EApplicationIdContact;
+    	}
+    if (iDialogParam->iDataProviderId == KUidNSmlAdapterCalendar.iUid)
+    	{
+    	return EApplicationIdCalendar;
+    	}
+    if (iDialogParam->iDataProviderId == KUidNSmlAdapterEMail.iUid)
+    	{
+    	return EApplicationIdEmail;
+    	}
+    if (iDialogParam->iDataProviderId == KUidNSmlAdapterNote.iUid)
+    	{
+    	return EApplicationIdNote;
+    	}
+    if (iDialogParam->iDataProviderId == KUidNSmlAdapterSms.iUid)
+    	{
+    	return EApplicationIdSms;
+    	}
+	if (iDialogParam->iDataProviderId == KUidNSmlAdapterMMS.iUid)
+    	{
+    	return EApplicationIdMms;
+    	}
+    if (iDialogParam->iDataProviderId == KUidNSmlAdapterBookmarks.iUid)
+    	{
+    	return EApplicationIdBookmarks;
+    	}
+
+    return KErrNotFound;
+    } 
+
+
+
+
+// End of file
+