email/pop3andsmtpmtm/clientmtms/src/IAPPrefs.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/src/IAPPrefs.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,211 @@
+// Copyright (c) 1999-2009 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 <iapprefs.h>
+#include <e32panic.h>
+
+
+EXPORT_C CImIAPPreferences* CImIAPPreferences::NewLC()
+/** Allocates and creates a new CImIAPPreferences object, leaving the object on 
+the cleanup stack.
+
+@return New CImIAPPreferences object */
+	{
+	CImIAPPreferences* self = new (ELeave) CImIAPPreferences();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C TInt CImIAPPreferences::Version() const
+/** Gets the version number of the preferences structure.
+
+@return The version number of the preferences structure */
+	{
+	return iVersion;
+	}
+
+void CImIAPPreferences::Reset()
+	{
+	iChoices->Reset();	
+	}
+
+
+EXPORT_C TInt CImIAPPreferences::NumberOfIAPs() const
+/** Gets the number of IAPs that are assigned to the current service entry.
+
+@return Number of IAPs */
+	{
+	return iChoices->Count();
+	}
+
+EXPORT_C TImIAPChoice CImIAPPreferences::IAPPreference(TInt aPreference) const
+/** Gets the IAP choice of the given preference value.
+
+Note that preference values run from 0 to n, with 0 being the first choice. 
+Currently the number of IAPs per service is limited to two. 
+
+@param aPreference Preference value
+@return IAP choice for the given preference value */
+	{
+	return (*iChoices)[aPreference];
+	}
+
+EXPORT_C void CImIAPPreferences::AddIAPL(TImIAPChoice aIap, TInt aIndex)
+/** Adds the given IAP with the given preference value. 
+
+Any existing IAPs of equal or lower preference will have their preference 
+lowered further to make way for the new IAP. For example, if an IAP of preference 
+value 0 is already associated with the current service and another IAP of 
+preference 0 is added, then the existing IAP will be relegated to preference 
+value 1. Currently the number of IAPs per service is limited to two.
+
+@param aIap IAP
+@param aIndex Preference value for this IAP 
+@leave Leaves with KErrNotSupported if a SNAP is defined*/
+	{
+	if (iSnapId)
+		{
+		User::Leave(KErrNotSupported);
+		}
+	iChoices->InsertL(aIndex, aIap);
+	}
+
+EXPORT_C void CImIAPPreferences::RemoveIAPL(TInt aPreferenceNumber)
+/** Removes the IAP of the given preference.
+
+Any existing IAPs of lower preference will have their preference increased 
+to fill the gap created by the IAP that has been removed. For example, if 
+two IAPs are associated with the current service with the preference values 
+0 and 1. If the IAP of preference value 0 is later removed, then the other 
+IAP is promoted to preference value 0. It should be noted that adding or removing 
+an IAP from a CImIAPPreferences object does not change any global IAP settings, 
+it only changes the behaviour associated with a particular with a particular 
+email service. 
+
+@param aPreferenceNumber Preference value */
+	{
+	iChoices->Delete(aPreferenceNumber);
+	}
+
+EXPORT_C TInt CImIAPPreferences::FindIAPL(TUint32 aIAP, TInt &aLocation) const
+/** Finds the preference value for a specified IAP.
+ 
+@param aIAP The identifier of the IAP to find, as specified in the CommDb record for the IAP
+@param aLocation On return, if the specified IAP was found, its preference value
+@return KErrNone if the specified IAP was found; KErrNotFound if not.
+*/
+	{
+	TInt count=iChoices->Count();
+	for(TInt i=0;i<count;i++)
+		{
+		if(aIAP==(*iChoices)[i].iIAP)
+			{
+			aLocation=i;
+			return(KErrNone);
+			}
+		}
+	return(KErrNotFound);
+	}
+
+EXPORT_C void CImIAPPreferences::ReplaceIAPL(TInt aPreferenceNumber,TImIAPChoice aIap)
+/** Replaces the current IAP at a specified preference value.
+ 
+A panic occurs if an IAP is not already set for the preference value. 
+@param aPreferenceNumber The preference value for which to set the IAP
+@param aIap The new IAP value for the preference value
+*/	
+	{
+	(*iChoices)[aPreferenceNumber]=aIap;
+	}
+
+/**
+Used to check if SNAP settings are defined for this Email account.
+
+@param None
+
+@return A boolean is returned set as ETrue if a SNAP has been provisioned for the email account.
+*/
+EXPORT_C TBool CImIAPPreferences::SNAPDefined() const
+	{
+	if (iSnapId)
+		{
+		return ETrue;
+		}
+	return EFalse;
+	}
+
+/**
+Returns the current SNAP Id for the email account.
+
+@param None
+
+@return The current SNAP id for the email account.
+*/	
+EXPORT_C TUint32 CImIAPPreferences::SNAPPreference() const
+	{
+	return iSnapId;
+	}
+
+/**
+Sets the SNAP id for the email account, to the value specified in aSnap.
+
+@param aSnap
+Specifies the new SNAP id to be used by this email account.
+@leave Leaves with KErrNotSupported if IAP list already defined
+@return A boolean is returned set as ETrue if a SNAP has been provisioned for the email account.
+*/
+EXPORT_C void CImIAPPreferences::SetSNAPL(TUint32 aSnap)
+	{
+	// Check that an IAP does not already exist
+	if (iChoices->Count())
+		{
+		User::Leave(KErrNotSupported);
+		}
+	iSnapId = aSnap;
+	}
+
+/**
+Removes the SNAP id for this Email account.
+
+@param None
+
+@return A boolean is returned set as ETrue if a SNAP has been provisioned for the email account.
+*/	
+EXPORT_C void CImIAPPreferences::RemoveSNAP()
+	{
+	iSnapId = 0;
+	}
+
+EXPORT_C CImIAPPreferences::~CImIAPPreferences()
+/** Destructor. */
+	{
+	delete iChoices;
+	}
+
+CImIAPPreferences::CImIAPPreferences()
+	{
+	iVersion = KImIAPPreferencesVersion;
+	}
+
+void CImIAPPreferences::ConstructL()
+	{
+	iChoices = new(ELeave) CArrayFixFlat<TImIAPChoice>(5);
+	}
+
+void CImIAPPreferences::Panic(int err) const
+	{
+	User::Panic(_L("IAPPrefs"), err);
+	}