diff -r 000000000000 -r dab8a81a92de omads/omadsappui/AspSyncUtil/src/AspContentListDialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsappui/AspSyncUtil/src/AspContentListDialog.cpp Mon Nov 23 14:46:41 2009 +0200 @@ -0,0 +1,493 @@ +/* +* Copyright (c) 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 "AspContentListDialog.h" +#include "AspContentDialog.h" +#include "AspDialogUtil.h" +#include "AspSyncUtil.rh" // for menu command ids +#include "AspUtil.h" +#include "AspDebug.h" +#include "AspDefines.h" +#include "AspResHandler.h" +#include + + +#include // for bitmap enumerations +#include // GulArray +#include // FeatureManager + + + +// ============================ MEMBER FUNCTIONS =============================== + + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::ShowDialogL +// +// ----------------------------------------------------------------------------- +// +TBool CAspContentListDialog::ShowDialogL(const TAspParam& aParam) + { + CAspContentListDialog* dialog = CAspContentListDialog::NewL(aParam); + + TBool ret = dialog->ExecuteLD(R_ASP_CONTENT_LIST_DIALOG); + + return ret; + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::NewL +// +// ----------------------------------------------------------------------------- +// +CAspContentListDialog* CAspContentListDialog::NewL(const TAspParam& aParam) + { + FLOG( _L("CAspContentListDialog::NewL START") ); + + CAspContentListDialog* self = new (ELeave) CAspContentListDialog(aParam); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + FLOG( _L("CAspContentListDialog::NewL END") ); + return(self); + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::CAspContentListDialog +// +// ----------------------------------------------------------------------------- +CAspContentListDialog::CAspContentListDialog(const TAspParam& aParam) + { + iApplicationId = aParam.iApplicationId; + iProfile = aParam.iProfile; + iSyncSession = aParam.iSyncSession; + + __ASSERT_ALWAYS(iProfile, TUtil::Panic(KErrGeneral)); + __ASSERT_ALWAYS(iSyncSession, TUtil::Panic(KErrGeneral)); + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::ConstructL +// +// ----------------------------------------------------------------------------- +void CAspContentListDialog::ConstructL() + { + FLOG( _L("CAspContentListDialog::ConstructL START" ) ); + + // contruct menu for our dialog + CAknDialog::ConstructL(R_ASP_CONTENT_LIST_DIALOG_MENU); + + // get previous title so it can be restored + iStatusPaneHandler = CStatusPaneHandler::NewL(iAvkonAppUi); + iStatusPaneHandler->StoreOriginalTitleL(); + + + TAspParam param(iApplicationId, iSyncSession); + param.iProfile = iProfile; + param.iMode = CAspContentList::EInitAll; + + iContentList = CAspContentList::NewL(param); + + iStatusPaneHandler->SetTitleL(R_ASP_CONTENT_LIST_DIALOG_TITLE); + + FLOG( _L("CAspContentListDialog::ConstructL END") ); + } + + +// ----------------------------------------------------------------------------- +// Destructor +// +// ----------------------------------------------------------------------------- +CAspContentListDialog::~CAspContentListDialog() + { + FLOG( _L("CAspContentListDialog::~CAspContentListDialog START") ); + + if (iAvkonAppUi) + { + iAvkonAppUi->RemoveFromStack(this); + } + + delete iStatusPaneHandler; + delete iContentList; + + FLOG( _L("CAspContentListDialog::~CAspContentListDialog END") ); + } + + +//------------------------------------------------------------------------------ +// CAspContentListDialog::ActivateL (from CCoeControl) +// +// Called by system when dialog is activated. +//------------------------------------------------------------------------------ +// +void CAspContentListDialog::ActivateL() + { + CAknDialog::ActivateL(); + + // this cannot be in ConstructL which is executed before dialog is launched + iAvkonAppUi->AddToStackL(this); + } + + +//------------------------------------------------------------------------------ +// CAspContentListDialog::GetHelpContext +// +//------------------------------------------------------------------------------ +// +void CAspContentListDialog::GetHelpContext(TCoeHelpContext& aContext) const + { + aContext.iMajor = KUidSmlSyncApp; + //aContext.iContext = KDS_HLP_APPS_VIEW; + } + + +//------------------------------------------------------------------------------ +// CAspContentListDialog::ProcessCommandL +// +// Handle commands from menu. +//------------------------------------------------------------------------------ +// +void CAspContentListDialog::ProcessCommandL(TInt aCommandId) + { + HideMenu(); + + switch (aCommandId) + { + case EAspMenuCmdEdit: + { + ShowContentL(); + break; + } + + case EAspMenuCmdHelp: + { + TUtil::LaunchHelpAppL(iEikonEnv); + break; + } + + case EAspMenuCmdExit: + case EAknCmdExit: + case EEikCmdExit: + { + // close dialog and exit calling application + iAvkonAppUi->ProcessCommandL(EAknCmdExit); + break; + } + + default: + { + break; + } + } + } + + +//------------------------------------------------------------------------------ +// CAspContentListDialog::OkToExitL +// +//------------------------------------------------------------------------------ +// +TBool CAspContentListDialog::OkToExitL(TInt aButtonId) + { + if (aButtonId == EEikBidCancel) + { + // exit going on - must return true. + return ETrue; + } + + if (aButtonId == EAknSoftkeyBack) + { + return ETrue; + } + + return CAknDialog::OkToExitL(aButtonId); + } + + +// ---------------------------------------------------------------------------- +// CAspContentListDialog::OfferKeyEventL +// +// ---------------------------------------------------------------------------- +// +TKeyResponse CAspContentListDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + if (aType == EEventKey) + { + switch (aKeyEvent.iCode) + { + case EKeyOK: + { + ShowContentL(); + return EKeyWasConsumed; + } + + case EKeyEscape: // framework calls this when dialog must shut down + { + return CAknDialog::OfferKeyEventL(aKeyEvent, aType); + } + + default: + { + break; + } + } + } + + return CAknDialog::OfferKeyEventL( aKeyEvent, aType); + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::PreLayoutDynInitL +// +// Called by framework before dialog is shown. +// ----------------------------------------------------------------------------- +// +void CAspContentListDialog::PreLayoutDynInitL() + { + iSettingListBox = (CAknDoubleLargeStyleListBox*) ControlOrNull (EAspContentListDialogList); + + __ASSERT_ALWAYS(iSettingListBox, TUtil::Panic(KErrGeneral)); + + iSettingListBox->SetListBoxObserver(this); + iSettingListBox->CreateScrollBarFrameL(ETrue); + iSettingListBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + + TFileName bitmapName; + CAspResHandler::GetBitmapFileName(bitmapName); + + CArrayPtr* icons = new (ELeave) CAknIconArray(KDefaultArraySize); + CleanupStack::PushL(icons); + + // NOTE: icons must be appended in correct order (TAspContentListDialogIconIndex) + icons->AppendL(IconL(KAknsIIDQgnPropSmlSyncServer, bitmapName, EMbmAspsyncutilQgn_prop_sml_sync_server, EMbmAspsyncutilQgn_prop_sml_sync_server_mask)); + icons->AppendL(IconL(KAknsIIDQgnPropSmlSyncToServer, bitmapName, EMbmAspsyncutilQgn_prop_sml_sync_to_server, EMbmAspsyncutilQgn_prop_sml_sync_to_server_mask)); + icons->AppendL(IconL(KAknsIIDQgnPropSmlSyncFromServer, bitmapName, EMbmAspsyncutilQgn_prop_sml_sync_from_server, EMbmAspsyncutilQgn_prop_sml_sync_from_server_mask)); + icons->AppendL(IconL(KAknsIIDQgnPropSmlSyncOff, bitmapName, EMbmAspsyncutilQgn_prop_sml_sync_off, EMbmAspsyncutilQgn_prop_sml_sync_off_mask)); + + iSettingListBox->ItemDrawer()->FormattedCellData()->SetIconArrayL(icons); + CleanupStack::Pop(icons); + + UpdateListBoxL(); + + iSettingListBox->UpdateScrollBarsL(); + iSettingListBox->ScrollBarFrame()->MoveVertThumbTo(0); + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::IconL +// +// ----------------------------------------------------------------------------- +// +CGulIcon* CAspContentListDialog::IconL(TAknsItemID aId, const TDesC& aFileName, TInt aFileIndex, TInt aFileMaskIndex) + { + return TDialogUtil::CreateIconL(aId, aFileName, aFileIndex, aFileMaskIndex); + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::DynInitMenuPaneL +// +// Called by framework before menu is shown. +// ----------------------------------------------------------------------------- +// +void CAspContentListDialog::DynInitMenuPaneL(TInt aResourceID, CEikMenuPane* /*aMenuPane*/) + { + if (aResourceID != R_ASP_CONTENT_LIST_DIALOG_MENU_PANE) + { + return; + } + + if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) + { + TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdHelp); + } + + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::HandleListBoxEventL (from MEikListBoxObserver) +// +// ----------------------------------------------------------------------------- +// +void CAspContentListDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent /*aEventType*/) + { + } + + +// ---------------------------------------------------------------------------- +// CAspContentListDialog::HandleResourceChange +// +// ---------------------------------------------------------------------------- +// +void CAspContentListDialog::HandleResourceChange(TInt aType) + { + if (aType == KEikDynamicLayoutVariantSwitch) //Handle change in layout orientation + { + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + SetRect(mainPaneRect); + iSettingListBox->SetSize(mainPaneRect.Size()); + CCoeControl::HandleResourceChange(aType); + DrawDeferred(); + return; + } + + CCoeControl::HandleResourceChange(aType); + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::UpdateListBoxL +// +// ----------------------------------------------------------------------------- +// +void CAspContentListDialog::UpdateListBoxL() + { + TInt iconIndex = EIconNotDefined; + + CAknDoubleLargeStyleListBox* listBox = ListBox(); + CDesCArray* items = (CDesCArray*) listBox->Model()->ItemTextArray(); + items->Reset(); + listBox->ItemDrawer()->ClearAllPropertiesL(); + + TInt count = iContentList->ProviderCount(); + + for (TInt i=0; iProviderItem(i); + + firstLine = CAspResHandler::GetContentNameLC(providerItem.iDataProviderId, providerItem.iDisplayName); + + TInt index = iContentList->FindTaskIndexForProvider(providerItem.iDataProviderId); + + if (index != KErrNotFound) + { + TAspTaskItem& task = iContentList->TaskItem(index); + TInt status = iContentList->CheckMandatoryTaskDataL(task.iTaskId); + if (status == EMandatoryOk) + { + secondLine = CAspResHandler::ReadLC(R_ASP_DEFINED); + if (task.iSyncDirection == ESyncDirectionTwoWay) + { + iconIndex = EIconBothDirections; + } + if (task.iSyncDirection == ESyncDirectionOneWayFromDevice) + { + iconIndex = EIconDeviceToServer; + } + if (task.iSyncDirection == ESyncDirectionOneWayIntoDevice) + { + iconIndex = EIconServerToDevice; + } + } + else + { + secondLine = CAspResHandler::ReadLC(R_ASP_NOT_DEFINED); + } + } + else + { + secondLine = CAspResHandler::ReadLC(R_ASP_NOT_DEFINED); + } + + TPtr ptr1 = firstLine->Des(); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion(ptr1); + TPtr ptr2 = secondLine->Des(); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion(ptr2); + + HBufC* hBuf = NULL; + hBuf = TDialogUtil::ConstructListBoxItemLC(firstLine->Des(), secondLine->Des(), iconIndex); + + items->AppendL(hBuf->Des()); + + CleanupStack::PopAndDestroy(hBuf); + CleanupStack::PopAndDestroy(secondLine); + CleanupStack::PopAndDestroy(firstLine); + } + + listBox->HandleItemAdditionL(); + + if (listBox->Model()->NumberOfItems() == 0) + { + User::Leave(KErrNotFound); + } + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::ShowContentL +// +// ----------------------------------------------------------------------------- +// +void CAspContentListDialog::ShowContentL() + { + TAspParam param(iApplicationId, iSyncSession); + param.iProfile = iProfile; + param.iDataProviderId = SelectedProvider().iDataProviderId; + param.iSyncTaskId = KErrNotFound; + + CAspContentDialog::ShowDialogL(param); + + iContentList->InitAllTasksL(); + + UpdateListBoxL(); + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::ListBox +// +// ----------------------------------------------------------------------------- +// +CAknDoubleLargeStyleListBox* CAspContentListDialog::ListBox() + { + __ASSERT_DEBUG(iSettingListBox, TUtil::Panic(KErrGeneral)); + + return iSettingListBox; + } + + +// ----------------------------------------------------------------------------- +// CAspContentListDialog::SelectedProvider +// +// ----------------------------------------------------------------------------- +// +TAspProviderItem& CAspContentListDialog::SelectedProvider() + { + TInt index = ListBox()->CurrentItemIndex(); + + return iContentList->ProviderItem(index); + } + + + +// End of File