diff -r 8e7494275d3a -r 4f0867e42d62 omads/omadsappui/AspSyncUtil/src/AspContentDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsappui/AspSyncUtil/src/AspContentDialog.cpp Wed Sep 01 12:30:02 2010 +0100 @@ -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 + +#include // for bitmap enumerations +#include // for GulArray +#include // 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(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* 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* 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 EEventItemSingleClicked: + 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; indexDeleteAllowed(); + + 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; iSetHeaderL(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; iiHidden != 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; iiMandatory && 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; iiIndex == 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; iiItemId == 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 +