messagingappbase/smartmessaging/wmlbc/inc/WmlSubItemBase.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/smartmessaging/wmlbc/inc/WmlSubItemBase.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2002 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:  
+*     Base class for WML subitems.
+*
+*/
+
+
+
+#ifndef CWMLSUBITEMBASE_H
+#define CWMLSUBITEMBASE_H
+
+// INCLUDES
+
+#include <badesca.h>                // CDesCArray
+#include "WMLBC.hrh"
+
+// FORWARD DECLARATIONS
+
+class CMsgNameValue;
+
+
+// CLASS DECLARATION
+
+/**
+* Base class for WML subitems for WML Bio Control's internal use.
+* Instances of this class may not be initialized. Class is intented 
+* to be inherited.
+*/
+NONSHARABLE_CLASS( CWmlSubItemBase ) : public CBase
+    {
+
+    public: // Construction / Destruction
+        
+        /**
+        * Destructor.
+        * Deletes the member iName.
+        */
+        ~CWmlSubItemBase();
+
+    public:
+
+        /**
+        * Contains the logic to store the item to the database. This
+        * is template method, which calls the actual implemtation methods
+        * in the subclass.
+        * @param aShowNote indicates whether to show note after item has 
+        * been stored. By default note is shown. 
+        * Leaves if the database operation fails.  
+        */  
+        TBool SaveItemL( TBool aShowNote = ETrue, 
+            TBool aShowPreferredQuery = ETrue,
+            TBool aPreferredInformation = EFalse,
+            TBool aCreateBookmarkIfNotSetAsDefault = EFalse );
+
+        /**
+        * Get the item's data.
+        * @return reference to an array containing items data.
+        */
+        CArrayPtrFlat<CMsgNameValue>* LabelsAndValuesLC();  
+
+    public: // virtual methods, which must be implemented in subclasses.  
+        
+        /**
+        * Interface for adding value for certain field. Note: The values 
+        * might be converted to the internal data structure and can be 
+        * retrieved in viewable format later.
+        * @param aFieldValue Value of the field to be added.  
+        * @param aFieldEnum OTA parser specific enum of the field to add.
+        * @exception Leaves if invalid value or field is being added.
+        */ 
+        virtual void AddFieldL( 
+            const TDesC& aFieldValue, 
+            const TInt aFieldEnum ) = 0;
+
+        /**
+        * Interface for getting the count of rows needed to display 
+        * data in detail view.
+        * @return Number of fields in item, aka rows needed in detail
+        *         view. 
+        */
+        virtual TInt FieldCount() const = 0;
+
+        /**
+        * Interface for getting the label and value of a field in at 
+        * certain index. The texts returned are localized. The texts
+        * are stored in HBufCPair object which is created and pushed to
+        * cleanup stack.
+        * @param aIndex Pointer to field which data is to be retrieved.
+        *               0 <= aIndex < GetFieldCount()
+        * @return pointer to a class holding both label and value of a field.
+        * @exception Leaves if index is out of range. 
+        */
+        virtual CMsgNameValue* GetFieldDataAtLC( const TInt aIndex ) = 0;
+            
+        /**
+        * Check the item validity.
+        * @return ETrue if the item is valid, EFalse if it's not.
+        */
+        virtual TBool IsValidL() = 0;
+
+    private: // private virtual methods called from SaveItemL-method.
+
+        /**
+        * Initialize all the member variable to their initial state.
+        * So if leave occurs nothing about the aborted operation is
+        * not saved.
+        */
+        virtual void DoInitialize() = 0;
+
+		/**
+		* Get the maximum lenght of the name.
+		* @return Max length of the name for this sub item type.
+		*/
+		virtual TInt NameMaxLength() = 0;
+
+        /**
+        * Get the item's name.
+        * @return Pointer to the HBufC, which is pushed to the cleanupstack.
+        * Name may also be empty.
+        */
+        virtual HBufC* NameLC() = 0;
+
+        /**
+        * Set the item's name.
+        * @param aName New name of the item.
+        */
+        virtual void SetNameL( const TDesC& aName ) = 0;
+
+        /**
+        * Get the item's default name.
+        * @return Pointer to the HBufC, which is in cleanupstack.
+        */
+        virtual HBufC* DefaultNameLC() = 0;
+    
+		/**
+		* Display new name query for this type of item.
+		* @param aName original name to be displayed in query.
+		* @return descriptor got as the query result.
+		*/
+		virtual HBufC* DoQueryNewNameLC( const TDesC& aName ) = 0;
+
+		/**
+		* Display rename query for this type of item.
+		* @param aName original name to be displayed in query.
+		* @return ETrue if user renamed, EFalse if cancel was pressed. 
+		*/
+		virtual TBool DoRenameQueryL( const TDesC& aName ) = 0;
+
+        /*
+        * Performs the name uniqueness test.
+        * @param aName name to check.
+		* @param aUpdateList optimizes the checking.
+        * @return ETrue if name is unique in the used database.
+        * EFalse if the name already exists in the database.
+        */
+        virtual TBool IsNameValidL( const TDesC& aName, 
+			TBool aUpdateList ) = 0;
+
+        /**
+        * Does the operations needed before the item is actually 
+        * store to the database.
+        */
+        virtual void PreStoreL( const TBool aShowPreferredQuery ) = 0;
+
+        /**
+        * Actually store the item to the database.
+        * All the unique checks MUST be done before calling
+        * this method. Leaves if the database operation fails.
+        */
+        virtual void StoreL() = 0;
+
+        /**
+        * Does the operation needed after the item has been
+        * SUCCESSFULLY stored to the database. This method must
+        * not be called if database operation has failed.
+        * @param aShowNote indicates if note is shown after store.
+        */
+        virtual void PostStoreL( const TBool aShowNote, const TInt aPreferredInformation, const TBool aCreateBookmarkIfNotSetAsDefault ) = 0;    
+
+    private: // Methods, which are implemented in this class.
+
+        /**
+        * Set all the member variables as initial values.
+        */ 
+        void Initialize();
+
+        /**
+        * Check if the item has name.
+        */
+        TBool HasNameL();
+
+        /**
+        * Set the item's default name in iName.
+        */
+        void SetDefaultNameL();
+
+        /*
+        * Calls the item's IsNameValidL method by givin iName as a parameter.
+        * @return ETrue if name is unique in the used database.
+        * EFalse if the name already exists in the database.
+        */
+        TBool IsNameValidL( TBool aUpdateList = ETrue );
+
+        /**
+        * Calls the static implementation DoIncrementNameL giving the
+        * object name member pointer as a parameter.
+        * @see DoIncrementNameL
+        */
+        void IncrementNameL();
+
+        /**
+        * Static Implementation of the name increment.
+        * Name increment rules are defined and implemented in CMsgBioControl.
+        * @param aName pointer to the HBufC, which is modified.
+		* @param aMaxLength maximum length of the descriptor to be grown.
+        */
+        static HBufC* DoIncrementNameL( const TDesC& aName, TInt aMaxLength );
+
+        /**
+        * Calls the static implementation DoQueryNewNameL giving the
+        * object name member pointer as a parameter.
+        * @see DoQueryNewNameL
+        */
+        void QueryNewNameL();
+
+        /**
+        * Calls the static implementation DoRenameQueryL.
+        * @return ETrue if user chose to overwrite, EFalse otherwise.
+        * @see DoRenameQueryL
+        */
+        TBool RenameQueryL();
+
+    private:
+
+        /**
+        * Item's original name is stored and restored after storing 
+        * Procedure.
+        */
+        HBufC* iOriginalName;
+
+        /// Pointer to the item name, which is used to create unique name.
+        HBufC* iName;
+    };
+
+#endif // CWMLSUBITEMBASE_H
+
+// End of file