diff -r 2669f8761a99 -r fbd2e7cec7ef presencesettingsui/inc/psuigspluginmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presencesettingsui/inc/psuigspluginmodel.h Wed Sep 01 12:23:14 2010 +0100 @@ -0,0 +1,390 @@ +/* +* Copyright (c) 2006-2010 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: Presence settings UI model header. +* +*/ + + + + +#ifndef PSUIGSPLUGINMODEL_H +#define PSUIGSPLUGINMODEL_H + +// INCLUDES +#include +#include +#include +#include +#include "psuigsplugin.hrh" + +// FORWARD DECLARATIONS + +// CLASS DECLARATION +class RPresenceSettingsArray; +class CSIPManagedProfileRegistry; +class CSIPManagedProfile; + +// Constants +_LIT( KPSUIGSPluginPanicCategory, "PSUIGSPlugin" ); + +/** +* Presence settings UI model +* +* @lib PSUIGSPlugin.lib +* @since Series60_3.2 +*/ +class CPSUIGSPluginModel : + public CBase, + public MDesCArray, + public MSIPProfileRegistryObserver + { + + public: // Constructors and destructor + + /** + * Symbian OS two-phased constructor + */ + static CPSUIGSPluginModel* NewL(); + + /** + * Destructor. + */ + ~CPSUIGSPluginModel(); + + public: // New + + // + // + // Presence settings related + + /** + * Retrieves current presence settings from system + */ + void RetrieveSettingsL(); + + /** + * Stores current presence settings to system + */ + void SaveSettingsL(); + + /** + * Checks are the compulsory fields filled. + * + * @return boolean about filled fields + */ + TBool AllCompulsoryFieldsFilled(); + + /** + * Prepares iSettingSet for editing + * + * @param aIndex of presence settings to be edited + */ + void EditSettingsL( TInt aIndex ); + + /** + * Refreshes the presence settings related arrays + */ + void RefreshPSArraysL(); + + /** + * Prepares the iSettingSet and iSettingId + * with default values + */ + void CreateDefaultSettingsL(); + + /** + * Prepares the iSettingSet and iSettingId + * with values from indexed presence setting + * + * @param aIndex is the presence settings to be duplicated + */ + void DuplicateExistingSettingsL( TInt aIndex ); + + /** + * Creates new name for to be created settings. If aOriginal + * provided, then will use that as a base. If not, then will + * create the name based on default naming. Adds numbering to + * end of name if needed. + * Note : aOriginal will be stored to cleanupstack if provided + * + * @param aOriginal is optional base name + * + */ + HBufC* CreateSettingNameLC( HBufC* aOriginal = NULL ); + + /** + * Deletes indexed settings through presence settings API. + * + * @param aToBeDeleted to be deleted settings + * @param aIsIndex tells is aToBeDeleted index or id + */ + void DeleteSettingsL( TInt aToBeDeleted, TBool aIsIndex ); + + /** + * Returns name of the indexed settings. + * + * @param aIndex of the wanted name + * @return HBufC* containing the name + */ + HBufC* SettingNameLC( TInt aIndex ); + + /** + * Checks if there already is settings with the same name. + */ + TBool IsItDuplicatePSName(); + + /** + * Returns iPSNameArray, which contains names of the + * different setting sets. Ownership of array stays in + * CPSUIGSPluginModel. + * + * @return CDesCArray* containing the names of the settings + */ + CDesCArray* SettingNames(); + + /** + * Returns a reference to iSettingSet. + * + * @return TPresSettingsSet& containing one set of the settings + */ + TPresSettingsSet& SettingsSet(); + + /** + * Checks the validity of SIP- and XDM-fields, + * if not valid empties the fields. + */ + void ClearInvalidSIPAndXDMSettingsL(); + + /** + * Returns a reference to iSettingSetId. + * + * @return TInt& containing setting id + */ + TInt& SettingsId(); + + /** + * Returns a reference to iPSIdArray. + * + * @return RArray& containing iPSIdArray + */ + RArray& SettingsIDArray(); + + // + // + // SIP related + + /** + * Fetches names of defined SIP-profiles + * Refreshes also SIP related arrays. + * + * @return descriptor array of names + */ + CDesCArray* SipProfilesLC(); + + /** + * Fetches the ID of indexed SIP profile + * + * @param aIndex is the index in the array + * @return ID of the SIP profile + */ + TInt SipProfileId( TInt aIndex ); + + /** + * Fetches the index of ID'ed SIP profile + * + * @param aId is ID of the SIP profile + * @return index in the array + */ + TInt SipProfileIndex( TInt aId ); + + /** + * Fetches the name of ID'ed SIP profile + * Refreshes also SIP related arrays. + * + * @param aId is ID of the SIP profile + * @return descriptor containing the name + */ + HBufC* SipProfileNameL( TInt aId ); + + /** + * Checks if SIP profile used by presence settings is in use + * + * @param aIndex is the index in the array + * @return ETrue if profile is registered + */ + TBool IsSipProfileRegisteredL( TInt aIndex ); + + // + // + // XDM related + + /** + * Fetches names of defined XDM settings. + * Refreshes also XDM related arrays. + * + * @return descriptor array of names + */ + CDesCArray* XdmCollectionNamesL(); + + /** + * Fetches the name of ID'ed XDM setting + * + * @param aId is ID of the SIP profile + * @return descriptor containing the name + */ + HBufC* XdmCollectionNameL( TInt aId ); + + /** + * Fetches the index of ID'ed XDM setting + * + * @param aId is ID of the SIP profile + * @return index in the array + */ + TInt XdmSettingIndex( TInt aId ); + + /** + * Fetches the ID of indexed XDM setting + * + * @param aIndex is the index in the array + * @return ID of the SIP profile + */ + TInt XdmSettingId( TInt aIndex ); + + private: // New + + /** + * Destroys given array. Used with TCleanupItem. + * + * @param pointerarray to be deleted + */ + static void ResetAndDestroy( TAny* aPointerArray ); + + /** + * Refreshes the SIP profile array. Needs to be + * called before calling most of the SIP-related methods. + */ + void ReadSipArrayFromEngineL(); + + /** + * Checks if there is ordinal numbering at the end of + * descriptor and rips it off if there is. + * + * @return HBufC* containing the name ready for the numbering + */ + HBufC* GetPrefixL( HBufC* aName ); + + /** + * Re-arranges presence settings (name and id arrays) + * to alphabetical order. + */ + void ReArrangePresenceSettingsL(); + + /** + * Cleans links to specific presence settings for + * service provider settings. + * + * @param aPresenceId presence settings id. + */ + void CleanServiceProviderSettingsDataL( TInt aPresenceId ); + + private: // Functions from base classes + + /** + * from MSIPProfileRegistryObserver + * Refreshes in most cases SIP related arrays. + * + * See base class. + */ + void ProfileRegistryEventOccurred( + TUint32 aSIPProfileId, + TEvent aEvent ); + + /** + * from MSIPProfileRegistryObserver + * Refreshes SIP related arrays. + * + * See base class. + */ + void ProfileRegistryErrorOccurred( + TUint32 aSIPProfileId, + TInt aError); + + /** + * from MDesCArray + * See base class. + */ + TInt MdcaCount() const; + + /** + * from MDesCArray + * See base class. + */ + TPtrC16 MdcaPoint( TInt aIndex ) const; + + private: // Constructors + + /** + * C++ default constructor. + */ + CPSUIGSPluginModel(); + + /** + * Symbian OS default constructor. + */ + void ConstructL(); + + private: // Data + + // Currently edited presence settings + TPresSettingsSet iSettingSet; + // Setting identifier + TInt iSettingId; + // SIP profile registry + CSIPManagedProfileRegistry* iSIPEngine; + // SIP profile array + CArrayPtrFlat* iSIPProfiles; + // XDM ID array + RArray iXdmIdArray; + // XDM name array + CDesCArray* iXdmNameArray; + // Presence settings id array + RArray iPSIdArray; + // Presence settings name array + CDesCArray* iPSNameArray; + // Texts for the MDesCArray + HBufC* iVisibleSettingName; + + }; + +/** +* Small utility class to store presence settings +* name and id. +* Used in CPSUIGSPluginModel::ReArrangePresenceSettingsL(). +* +* @lib PSUIGSPlugin.lib +* @since Series60_3.2 +*/ +class CPSUINameIDPair : + public CBase + { + public : + inline ~CPSUINameIDPair() { delete iName; }; + + public : + TInt iID; + HBufC* iName; + }; + +#endif // PSUIGSPLUGINMODEL_H +// End of File