omads/omadsappui/AspSyncUtil/src/AspProfileSelectionDialog.cpp
branchRCL_3
changeset 52 4f0867e42d62
parent 0 dab8a81a92de
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsappui/AspSyncUtil/src/AspProfileSelectionDialog.cpp	Wed Sep 01 12:30:02 2010 +0100
@@ -0,0 +1,608 @@
+/*
+* 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 "AspProfileSelectionDialog.h"
+#include "AspSchedule.h"
+#include "AspProfileWizard.h"
+#include "AspSyncUtil.rh"
+#include "AspDebug.h"
+#include <csxhelp/ds.hlp.hrh>
+
+#include <AspSyncUtil.mbg>  // for bitmap enumerations
+#include <Avkon.mbg>
+#include <akniconarray.h>   // for GulArray
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::ShowDialogL
+// 
+// -----------------------------------------------------------------------------
+TBool CAspProfileSelectionDialog::ShowDialogL(TAspParam& aParam)
+	{
+	CAspProfileSelectionDialog* dialog = CAspProfileSelectionDialog::NewL(aParam);
+
+	TBool ret = dialog->ExecuteLD(R_ASP_AUTO_SYNC_PROFILE_DIALOG);
+
+    return ret;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::NewL
+//
+// -----------------------------------------------------------------------------
+CAspProfileSelectionDialog* CAspProfileSelectionDialog::NewL(TAspParam& aParam)
+    {
+    FLOG( _L("CAspProfileSelectionDialog::NewL START") );
+
+    CAspProfileSelectionDialog* self = new (ELeave) CAspProfileSelectionDialog(aParam);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    FLOG( _L("CAspProfileSelectionDialog::NewL END") );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::CAspProfileSelectionDialog
+// 
+// -----------------------------------------------------------------------------
+//
+CAspProfileSelectionDialog::CAspProfileSelectionDialog(TAspParam& aParam)
+	{
+    iSyncSession = aParam.iSyncSession;
+    iApplicationId = aParam.iApplicationId;
+    iProfileId = aParam.iProfileId;
+    iDialogParam = &aParam;
+           
+	__ASSERT_ALWAYS(iSyncSession, TUtil::Panic(KErrGeneral));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::ConstructL()
+    {
+    FLOG( _L("CAspProfileSelectionDialog::ConstructL START") );
+	
+	CAknDialog::ConstructL(R_ASP_AUTO_SYNC_PROFILE_DIALOG_MENU);
+
+	TAspParam param(iApplicationId, iSyncSession);
+	CAspProfileList* list = CAspProfileList::NewLC(param);
+	list->ReadAllProfilesL(CAspProfileList::ENoMandatoryCheck);
+		
+    TAspFilterInfo info;
+    info.iFilterType = TAspFilterInfo::EIncludeRemoteProfile;
+    iProfileList = list->FilteredListL(info);
+    iProfileList->Sort();
+    CleanupStack::PopAndDestroy(list);
+	
+    param.iMode = CAspContentList::EInitDataProviders;
+	iContentList = CAspContentList::NewL(param);
+
+
+	// get previous title so it can be restored
+	iStatusPaneHandler = CStatusPaneHandler::NewL(iAvkonAppUi);
+	iStatusPaneHandler->StoreOriginalTitleL();
+	
+	iCommandSetId = R_ASP_CBA_OPTIONS_SELECT_BACK;
+	
+	FLOG( _L("CAspProfileSelectionDialog::ConstructL END") );
+    }
+
+
+// ----------------------------------------------------------------------------
+// Destructor
+//
+// ----------------------------------------------------------------------------
+//
+CAspProfileSelectionDialog::~CAspProfileSelectionDialog()
+    {
+    FLOG( _L("CAspProfileSelectionDialog::~CAspProfileSelectionDialog START") );
+
+    delete iProfileList;
+    delete iContentList;
+	delete iStatusPaneHandler;
+	
+    if (iAvkonAppUi)
+    	{
+    	iAvkonAppUi->RemoveFromStack(this);
+    	}
+
+	FLOG( _L("CAspProfileSelectionDialog::~CAspProfileSelectionDialog END") );
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspProfileSelectionDialog::ActivateL
+//
+// Called by system when dialog is activated.
+//------------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::ActivateL()
+	{
+    CAknDialog::ActivateL();
+
+	// this cannot be in ConstructL which is executed before dialog is launched
+	iAvkonAppUi->AddToStackL(this);
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspContentListDialog::GetHelpContext
+//
+//------------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::GetHelpContext(TCoeHelpContext& aContext) const
+	{
+	aContext.iMajor = KUidSmlSyncApp;
+	//aContext.iContext = KDS_HLP_SET_CONN_SETTINGS;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::HandleListBoxEventL
+// 
+// -----------------------------------------------------------------------------
+void CAspProfileSelectionDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/,
+                                             TListBoxEvent /*aEventType*/)
+	{
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::PreLayoutDynInitL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::PreLayoutDynInitL()
+    {
+    iListBox = (CAknSingleGraphicStyleListBox*) (ControlOrNull(EAspAutoSyncProfileDialogList));
+    
+   	__ASSERT_ALWAYS(iListBox, TUtil::Panic(KErrGeneral));
+    
+	iListBox->SetListBoxObserver(this);
+	iListBox->CreateScrollBarFrameL(ETrue);
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+	                 CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+	
+	SetIconsL();
+	
+    
+    TInt index = iProfileList->ListIndex(iProfileId);
+    if (index == KErrNotFound)
+    	{
+    	// select first profile
+    	if (iProfileList->Count() > 0)
+    		{
+   	    	TAspProfileItem& item = iProfileList->Item(0);
+   	    	iProfileId = item.iProfileId;	
+    		}
+    	}
+
+    UpdateListBoxL();
+    
+
+	iStatusPaneHandler->SetTitleL(R_ASP_TITLE_AUTOMATIC_SYNC_PROFILE_SELECTION);
+	iStatusPaneHandler->SetNaviPaneTitleL(KNullDesC);
+    }
+
+
+// ----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::SetIconsL
+//
+// ----------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::SetIconsL()
+    {
+    if (!iListBox)
+    	{
+    	return;
+    	}
+ 
+ 	TFileName bitmapName;
+	CAspResHandler::GetBitmapFileName(bitmapName);
+	CArrayPtr<CGulIcon>* icons = new (ELeave) CAknIconArray(KDefaultArraySize);
+	CleanupStack::PushL(icons);
+		
+	
+	icons->AppendL(IconL(KAknsIIDQgnPropCheckboxOff, bitmapName,
+	                     EMbmAvkonQgn_prop_checkbox_off,
+	                     EMbmAvkonQgn_prop_checkbox_off_mask));
+
+	/*
+	icons->AppendL(IconL(KAknsIIDQgnIndiMarkedAdd, bitmapName, 
+	                     EMbmAvkonQgn_indi_marked_add,
+	                     EMbmAvkonQgn_indi_marked_add_mask));
+	*/
+
+	icons->AppendL(IconL(KAknsIIDQgnIndiSettProtectedAdd, bitmapName, 
+	                     EMbmAspsyncutilQgn_indi_sett_protected_add,
+	                     EMbmAspsyncutilQgn_indi_sett_protected_add_mask));
+	
+    // delete old icons
+    CArrayPtr<CGulIcon>* arr = iListBox->ItemDrawer()->ColumnData()->IconArray();
+    if (arr)
+    	{
+    	arr->ResetAndDestroy();
+	    delete arr;
+	    arr = NULL;
+    	}
+
+	iListBox->ItemDrawer()->ColumnData()->SetIconArray(icons);
+	CleanupStack::Pop(icons);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::IconL
+// 
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CAspProfileSelectionDialog::IconL(TAknsItemID aId, const TDesC& aFileName, TInt aFileIndex, TInt aFileMaskIndex)
+	{
+    return TDialogUtil::CreateIconL(aId, aFileName, aFileIndex, aFileMaskIndex);
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspProfileSelectionDialog::DynInitMenuPaneL
+//
+// Called by system before menu is shown.
+//------------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::DynInitMenuPaneL(TInt aResourceID, CEikMenuPane* aMenuPane)
+	{
+    if (aResourceID != R_ASP_AUTO_SYNC_PROFILE_DIALOG_MENU_PANE)
+		{
+		return;
+		}
+		
+	TInt index = iListBox->CurrentItemIndex();
+	if (index != KErrNotFound)
+		{
+	    TAspProfileItem& item = iProfileList->Item(index);
+	
+	    if (iProfileId == item.iProfileId)
+		    {
+		    TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdSelect);
+		    }
+		}
+	else
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdSelect);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdView);
+		}
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspProfileSelectionDialog::ProcessCommandL
+//
+// Handle commands from menu.
+//------------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::ProcessCommandL(TInt aCommandId)
+	{
+	HideMenu();
+
+	switch (aCommandId)
+		{
+		case EAspMenuCmdHelp:
+			{
+            break;
+			}
+
+		case EAspMenuCmdSelect:
+			{
+			HandleOKL();
+			break;
+			}
+
+		case EAspMenuCmdView:
+			{
+			ShowContentListL();			
+			break;
+			}
+
+        case EAspMenuCmdExit:
+        case EAknCmdExit:
+        case EEikCmdExit:
+			{
+			// close dialog and exit calling application
+			iAvkonAppUi->ProcessCommandL(EAknCmdExit);
+			break;
+			}
+
+		default:			
+		    break;
+		}
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspProfileSelectionDialog::OkToExitL
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspProfileSelectionDialog::OkToExitL(TInt aButtonId)
+	{
+	(*iDialogParam).iReturnValue = EFalse;
+	(*iDialogParam).iProfileId = iProfileId;
+	
+	if (aButtonId == EEikBidCancel)
+		{
+		return ETrue;
+		}
+
+	if (aButtonId == EAknSoftkeyBack)
+        {
+       	(*iDialogParam).iReturnValue = ETrue;
+		return ETrue;
+		}
+
+	if (aButtonId == EAknSoftkeyOpen)  // MSK
+        {
+        HandleOKL();
+		return EFalse;  // leave dialog open
+		}
+
+	return CAknDialog::OkToExitL(aButtonId);
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::OfferKeyEventL
+// 
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CAspProfileSelectionDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,
+                                                      TEventCode aType)
+	{
+	
+	// catch listbox item "gain focus" here
+	if (aType == EEventKeyUp)
+		{
+		UpdateCbaL();
+		return CAknDialog::OfferKeyEventL( aKeyEvent, aType);
+		}
+		
+	if (aType == EEventKey)
+		{
+		switch (aKeyEvent.iCode)
+			{
+			case EKeyEnter:
+			case EKeyOK:
+				{
+     			HandleOKL();
+				return EKeyWasConsumed;
+				}
+
+			case EKeyEscape:  // framework calls this when dialog must shut down
+				{
+				return CAknDialog::OfferKeyEventL(aKeyEvent, aType);
+        		}
+
+            default:
+				{
+			    break;
+				}
+			}
+		}
+
+	return CAknDialog::OfferKeyEventL( aKeyEvent, aType);
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::HandleResourceChange
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::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);
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspProfileSelectionDialog::HandleOKL
+//
+//------------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::HandleOKL()
+	{
+	if (iCommandSetId == R_ASP_CBA_OPTIONS_VIEW_CONTENT_BACK)
+		{
+		ShowContentListL();
+		return;
+		}
+		
+	TInt index = iListBox->CurrentItemIndex();
+	if (index != KErrNotFound)
+		{
+	    TAspProfileItem& item = iProfileList->Item(index);
+	
+	    if (item.iProfileId != iProfileId)
+		    {
+		    iProfileId = item.iProfileId; // uselect
+		    UpdateListBoxL();
+		    }
+		}
+	
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::UpdateListBoxL
+// 
+// Add settings headers into listbox.
+// ----------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::UpdateListBoxL()
+	{
+	_LIT(KFormat, "%d\t%S");
+		
+	CDesCArray* arr = (CDesCArray*) iListBox->Model()->ItemTextArray();
+	arr->Reset();
+
+	TInt count = iProfileList->Count();
+	for (TInt i=0; i<count; i++ )
+		{
+		TAspProfileItem& item = iProfileList->Item(i);
+
+		TBuf<KBufSize> buf;
+		
+		if (item.iProfileId == iProfileId)
+			{
+			buf.Format(KFormat, 1, &item.iProfileName);
+			}
+		else
+			{
+			buf.Format(KFormat, 0, &item.iProfileName);
+			}
+
+		arr->AppendL(buf);
+		}
+
+	iListBox->HandleItemAdditionL();
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::UpdateCbaL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::UpdateCbaL()
+    {
+   	TInt index = iListBox->CurrentItemIndex();
+   	if (index == KErrNotFound)
+   		{
+   		return;	
+   		}
+   		
+	TAspProfileItem& item = iProfileList->Item(index);
+	CEikButtonGroupContainer& cba = ButtonGroupContainer();
+	
+	if (item.iProfileId == iProfileId)
+		{
+		if (iCommandSetId != R_ASP_CBA_OPTIONS_VIEW_CONTENT_BACK)
+			{
+	        cba.SetCommandSetL(R_ASP_CBA_OPTIONS_VIEW_CONTENT_BACK);
+	        cba.DrawDeferred();
+	        iCommandSetId = R_ASP_CBA_OPTIONS_VIEW_CONTENT_BACK;
+			}
+		}
+    else 
+    	{
+    	if (iCommandSetId != R_ASP_CBA_OPTIONS_SELECT_BACK)
+    		{
+    	    cba.SetCommandSetL(R_ASP_CBA_OPTIONS_SELECT_BACK);
+    	    cba.DrawDeferred();
+    	    iCommandSetId = R_ASP_CBA_OPTIONS_SELECT_BACK;		
+    		}
+    	}
+    }
+
+
+// ----------------------------------------------------------------------------
+// CAspProfileSelectionDialog::ShowContentListL
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspProfileSelectionDialog::ShowContentListL()
+	{
+	TInt index = iListBox->CurrentItemIndex();
+	if (index == KErrNotFound)
+		{
+		return;	
+		}
+		
+	TAspProfileItem& item = iProfileList->Item(index);
+	
+    TAspParam param(iApplicationId, iSyncSession);
+	CAspProfile* profile = CAspProfile::NewLC(param);
+    
+   	profile->OpenL(item.iProfileId, CAspProfile::EOpenRead,
+                                          CAspProfileList::EBasePropertiesOnly);
+    iContentList->SetProfile(profile);
+    TRAPD(err, iContentList->InitAllTasksL());
+    iContentList->SetProfile(NULL);
+    User::LeaveIfError(err);
+    CleanupStack::PopAndDestroy(profile);
+                                          
+
+	CDesCArray* arr = new (ELeave) CDesCArrayFlat(KDefaultArraySize);
+	CleanupStack::PushL(arr);
+	
+    TInt count = iContentList->ProviderCount();
+    for (TInt i=0; i<count; i++)
+    	{
+    	TAspProviderItem& item = iContentList->ProviderItem(i);
+    	
+    	TInt index = iContentList->FindTaskIndexForProvider(item.iDataProviderId);
+    	if (index != KErrNotFound)
+    		{
+    		HBufC* hBuf = CAspResHandler::GetContentNameLC(item.iDataProviderId,
+		                                               item.iDisplayName);
+		    arr->AppendL(hBuf->Des());
+		    CleanupStack::PopAndDestroy(hBuf);
+    		}
+    	}
+
+	HBufC* hBuf = CAspResHandler::ReadLC(R_ASP_TITLE_AUTOMATIC_SYNC_CONTENT_LIST);
+	
+	TDialogUtil::ShowPopupDialogL(hBuf->Des(), arr);
+	
+	CleanupStack::PopAndDestroy(hBuf);
+	CleanupStack::PopAndDestroy(arr);
+	}
+	
+	
+
+//  End of File