mulwidgets/common/inc/mulvisualutility.h
changeset 0 e83bab7cf002
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/common/inc/mulvisualutility.h	Thu Dec 17 08:56:02 2009 +0200
@@ -0,0 +1,728 @@
+/*
+* Copyright (c) 2007-2008 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:  Utility class for widgets visualization in terms of LCT data
+*
+*/
+
+
+#ifndef MULVISUALUTILITY_H_
+#define MULVISUALUTILITY_H_
+
+#include <alf/alflayout.h>
+#include <osn/ustring.h>
+
+// Avkon Includes
+#include <aknlayout2hierarchy.h>
+#include <AknUtils.h>
+#include <AknsConstants.h>
+
+// OpenC Includes
+#include <libc/string.h>
+#include <libc/stdlib.h>
+
+#include <vector>
+using namespace osncore;
+
+namespace Alf
+	{
+	    
+enum TMulCurrentOrientation
+    {
+    EMulPortrait,
+    EMulLandScape
+    };	
+/**
+ * Different visual types
+ */
+enum TMulLCTVisualType
+    {
+    EVisualImage = 0,
+    EVisualText
+    };
+
+/**
+ * Different attribute types
+ */    
+enum TMulCustomAttributeType
+    {
+    EAttributeNone,
+    EAttributeCategory,
+    EAttributeOpacity,
+    EAttributeStyle,
+    EAttributeFontthemecolor,
+    EAttributeHAlign,
+    EAttributeVAlign
+    };
+
+/**
+ * Different Category types
+ */    
+enum TMulAttributeCategoryType
+    {
+    ECategoryInvalid,
+    ECategoryData,
+    ECategoryStaticData
+    };
+    
+/**
+ * Co-ordinate data
+ */    
+struct LCTData
+	{
+	    int mPosX;
+	    int mPosY;
+	    int mWidth;
+	    int mHeight;
+	    int mFontId;
+	};
+
+/**
+ * LCT Id and variety
+ */	
+struct LCTPair
+    {
+    UString mLctId;
+    int mVariety;
+    };
+
+// ---------------------------------------------------------------------------
+// Class to hold  attributes name and value
+// ---------------------------------------------------------------------------
+//
+class CustomAttributeStructure 
+    {
+public:
+
+   /**
+	* Constructor
+	*
+	* @param aName				Name of the Attribute
+	* @param aTargetVal			Value the Attribute
+	* @param aAttributeType		Name of the Attribute
+	* @param aCategoryType		Name of the Attribute
+	*
+	*
+	*/
+    CustomAttributeStructure(const UString& aName, const UString& aTargetVal,
+        TMulCustomAttributeType aAttributeType = EAttributeNone, 
+        TMulAttributeCategoryType aCategoryType = ECategoryInvalid): 
+            mName(aName),
+            mTargetVal(aTargetVal),
+            mAttributeType(aAttributeType), 
+            mCategoryType(aCategoryType)
+            
+             {
+             mLctPair.mLctId = UString("");
+             mLctPair.mVariety = -1;
+             } 
+    
+   /**
+	* Constructor
+	*
+	* @param aName				Name of the Attribute
+	* @param aLctInfo			LCT information of the custom attribute
+	* @param aAttributeType		Name of the Attribute
+	* @param aCategoryType		Name of the Attribute
+	*
+	*
+	*/
+    CustomAttributeStructure(const UString& aName, const LCTPair& aLctInfo,
+        TMulCustomAttributeType aAttributeType = EAttributeNone, 
+        TMulAttributeCategoryType aCategoryType = ECategoryInvalid): 
+            mName(aName),
+            mTargetVal(""),
+            mAttributeType(aAttributeType), 
+            mCategoryType(aCategoryType)
+            
+             {
+             mLctPair.mLctId = aLctInfo.mLctId;
+             mLctPair.mVariety = aLctInfo.mVariety;
+             }   
+    
+   /**
+	* Sets the name of the custom attribute
+	*
+	* @param aName	Name of the custom attribute
+	* @return nothing
+	*
+	*/         
+    void SetName(const UString& aName) {mName = aName;}
+    
+   /**
+	* Sets the value the custom attribute
+	*
+	* @param aTarget	Value of the custom attribute
+	* @return nothing
+	*
+	*/ 
+    void SetTargetValue(const UString& aTarget) {mTargetVal = aTarget; }
+    
+   /**
+	* Get the name of attribute
+	*
+	* 
+	* @return Name of the attribute
+	*
+	*/
+    const UString GetName() const {return mName; } 
+    
+   /**
+	* Get the value of the attribute
+	*
+	* 
+	* @return Value of the attribute
+	*
+	*/
+    const UString GetTargetvalue() const {return mTargetVal;} 
+     
+   /**
+	* Sets the attribute type the custom attribute
+	*
+	* @param aAttributeType		Attribute type of the custom attribute
+	* @return nothing
+	*
+	*/ 
+    void SetAttributeType(TMulCustomAttributeType aAttributeType) {mAttributeType = aAttributeType;}
+    
+   /**
+	* Sets the Category type the custom attribute
+	*
+	* @param aCategoryType		Category type of the custom attribute
+	* @return nothing
+	*
+	*/
+    void SetCategoryType(TMulAttributeCategoryType aCategoryType) {mCategoryType = aCategoryType;} 
+       
+   /**
+	* Get the attribute type of the attribute
+	*
+	* 
+	* @return TMulCustomAttributeType
+	*
+	*/  
+    TMulCustomAttributeType AttributeType() const {return mAttributeType;}
+    
+   /**
+	* Get the category type of the attribute
+	*
+	* 
+	* @return TMulAttributeCategoryType
+	*
+	*/ 
+    TMulAttributeCategoryType CategoryType()const {return mCategoryType;}
+    
+   /**
+	* Get the LCT information of attribute
+	*
+	* 
+	* @return LCTPair
+	*
+	*/ 
+    const LCTPair& GetLctPair() 
+    {
+    return mLctPair;
+    }
+
+private: 
+ 
+   /**
+	* Attribute name
+	*/
+    UString mName;
+    
+   /**
+	* Attribute value
+	*/
+    UString mTargetVal;
+    
+   /**
+	* Attribute type
+	*/
+    TMulCustomAttributeType mAttributeType;
+    
+   /**
+	* Attribute  Category type
+	*/
+    TMulAttributeCategoryType mCategoryType;    
+    
+   /**
+	* LCT Id and variety
+	*/
+    LCTPair mLctPair;
+    };
+    
+
+// ---------------------------------------------------------------------------
+// Class to hold a visual's attributes
+// ---------------------------------------------------------------------------
+//
+class LCTVisualStructure
+    {
+public:
+	
+   /**
+	* Default Constructor
+	*
+	*/
+    LCTVisualStructure()
+    {
+    	
+    }    
+        
+   /**
+	* Destructor
+	*
+	*/
+    ~LCTVisualStructure()
+    {
+    for(int i =0; i < mAttributeStructure.size(); i++)
+        {
+        delete mAttributeStructure[i];
+        }
+    mAttributeStructure.clear();
+    } 
+        
+   /**
+	* Sets the LCT Id of the visual Structure (part of LCT information of Visual Structure)
+	*
+	* @param aId	LCT Id of Visual Structure
+	* @return nothing
+	*
+	*/
+    void SetLCTId(const UString& aId) {mLctPair.mLctId = aId;}
+    
+   /**
+	* Sets the Variety Id of the visual Structure (part of LCT information of Visual Structure)
+	*
+	* @param aId	Variety Id of Visual Structure
+	* @return nothing
+	*
+	*/
+    void SetVarietyId(int aId) {mLctPair.mVariety = aId;}
+    
+   /**
+	* Gets the LCT Id of the visual Structure (part of LCT information of Visual Structure)
+	*
+	* @return nothing
+	*
+	*/
+    const UString GetLCTId() const {return mLctPair.mLctId; } 
+    
+   /**
+	* Gets the Variety Id of the visual Structure (part of LCT information of Visual Structure)
+	*
+	* @return nothing
+	*
+	*/
+    const int GetVarietyId() const {return mLctPair.mVariety;}
+     
+   /**
+	* Sets the type of visual this structure contains (can be either image/text)
+	*
+	* @param aVisualType	EVisualImage/EVisualText
+	* @return nothing
+	*
+	*/
+    void SetVisualType(const TMulLCTVisualType aVisualType) {mVisualType = aVisualType; }
+    
+   /**
+	* Gets the visual type of the visual Structure 
+	*
+	* @return TMulLCTVisualType
+	*
+	*/
+    TMulLCTVisualType VisualType()const { return mVisualType;} 
+    
+   /**
+	* Adds a Custom attribute structure to this visual structure
+	*
+	* @param	aAttr	Custom Attribute structure to be added
+	*					
+	*
+	*/    
+    void AddAttribute(CustomAttributeStructure* aAttr)
+    {
+    if(aAttr)
+        mAttributeStructure.push_back(aAttr);
+    }
+    
+   /**
+	* Gets a Custom attribute structure at a specified index in this visual structure
+	*
+	* @param	aIndex	Index at which the attribute struct desired
+	* @return   CustomAttributeStructure, NULL if no attribute is found
+	*
+	*/ 
+    const CustomAttributeStructure* GetAttribute(int aIndex) const
+    {
+    if(aIndex >=0 && aIndex < mAttributeStructure.size())
+        return mAttributeStructure[aIndex];
+    else
+        return NULL;
+    }
+        
+   /**
+	* Gets a Custom attribute structure by name in this visual structure
+	*
+	* @param	aAttrName	Name of the attribute struct desired
+	* @return   CustomAttributeStructure, NULL if no attribute is found
+	*					
+	*
+	*/  
+    const CustomAttributeStructure* GetAttributeByName(const UString& aAttrName) const
+    {
+    for (vector<CustomAttributeStructure*>::const_iterator it = mAttributeStructure.begin(); 
+            it!=mAttributeStructure.end(); ++it) 
+    	{
+    	if(!strcmp(((*it)->GetName()).getUtf8(),aAttrName.getUtf8()))
+    		return *it;
+    	} 
+    return NULL;        
+    } 
+    
+   /**
+	* Gets the current attribute count
+	*
+	* @return total number of attributes
+	*
+	*/
+    int AttributeCount() const
+    {
+    return mAttributeStructure.size();
+    }
+
+   /**
+	* Sets the Id of the visual Structure 
+	*
+	* @param aId	Identifier of Visual Structure
+	* @return nothing
+	*
+	*/
+    void SetId(const UString& aId) {mId = aId;}
+    
+   /**
+	* Gets the Id of the visual Structure 
+	*
+	* @return Identifier of the visual structure
+	*
+	*/   
+    UString GetId() const { return mId; }
+    
+    void SetPositions(int x,int y)
+	    {
+	    mX = x;
+	    mY = y;
+	    }
+    void SetDimensions(int width,int height)
+	    {
+	    mW = width;
+	    mH = height;
+	    }  
+    int PositionX() const {return mX;}
+    int PositionY() const {return mY;}
+    int Width() const {return mW;}
+    int Height() const {return mH;}
+   /**
+	* Gets the LCT Information of the visual Structure 
+	*
+	* @return LCTPair 
+	*
+	*/   
+    const LCTPair& GetLctPair() 
+    {
+    return mLctPair;
+    }
+
+        
+private:
+
+   /**
+	* Class to hold  attributes name and value
+	*
+	*/
+    UString mId;
+     
+	/**
+	 * LCT Id and variety
+	 */ 
+    LCTPair mLctPair;   
+    
+	/**
+ 	 * Type of Visual
+     */
+    TMulLCTVisualType mVisualType;
+    
+    /**
+	* Array of attribute structures (owned)
+	*
+	*/
+    std::vector<CustomAttributeStructure*> mAttributeStructure;
+    int mX,mY,mW,mH;
+    };
+
+// ---------------------------------------------------------------------------
+// Custom data type to hold information about different visuals
+// ---------------------------------------------------------------------------
+//
+class LCTElementStructure
+    {
+public:
+    
+   /**
+	* Destructor
+	*
+	*/
+    ~LCTElementStructure()
+    {
+    for(int i =0; i < mVS.size(); ++i)
+        {
+        delete mVS[i];            
+        }
+    mVS.clear(); 
+    }
+       
+   /**
+	* Adds a Visual structure to this Element structure
+	*
+	* @param	aVStructure		VisualStructure to be added
+	* @return 	nothing				
+	*
+	*/  
+    void AddVisualStructure(LCTVisualStructure* aVStructure)
+    {
+    if(aVStructure)
+    mVS.push_back(aVStructure);
+    }   
+    
+   /**
+	* Gets a Visual structure at a specified index in this visual structure
+	*
+	* @param	aIndex	Index at which the attribute struct desired
+	* @return   LCTVisualStructure, NULL if no structure is found
+	*
+	*/    
+    const LCTVisualStructure* GetVisualStruture(int aIndex)
+    {
+    if(aIndex >=0 && aIndex < mVS.size())
+        return mVS[aIndex];
+    else
+        return NULL;
+    }
+    
+    /**
+	* Gets a Visual structure with specified name
+	*
+	* @param	aVisualName	name of the  visual structure
+	* @return   LCTVisualStructure, NULL if no structure is found
+	*
+	*/    
+    const LCTVisualStructure* GetVisualStrutureByName(const UString& aVisualName) const
+    {
+    for (vector<LCTVisualStructure*>::const_iterator it = mVS.begin(); 
+            it!=mVS.end(); ++it) 
+    	{
+    	if(!strcmp(((*it)->GetId()).getUtf8(),aVisualName.getUtf8()))
+    		return *it;
+    	} 
+    //if attribute by this name is not found
+    return NULL;        
+    }
+        
+    /**
+	* Gets a Visual structure count
+	*
+	* @param	nothing
+	* @return   int visual structure count
+	*
+	*/ 
+    int VisualCount()
+    {
+    return mVS.size();
+    }
+        
+    /**
+	* Sets the visual structure Id
+	*
+	* @param	aId
+	* @return   nothing
+	*
+	*/ 
+    void SetId(const UString& aId) {mId = aId;}
+    
+    /**
+	* Gets the visual structure Id
+	*
+	* @param	nothing
+	* @return   UString 
+	*
+	*/ 
+    UString GetId() const { return mId; }
+    
+    void SetPositions(int x,int y)
+	    {
+	    mX = x;
+	    mY = y;
+	    }
+    void SetDimensions(int width,int height)
+	    {
+	    mW = width;
+	    mH = height;
+	    }  
+    int PositionX() const {return mX;}
+    int PositionY() const {return mY;}
+    int Width() const {return mW;}
+    int Height() const {return mH;}
+   /**
+	* Sets the LCT Id
+	*
+	* @param	aId
+	* @return   nothing
+	*
+	*/ 
+    void SetLCTId(const UString& aId) {mLctPair.mLctId = aId;}
+    
+    /**
+	* Sets the Variety Id
+	*
+	* @param	aId
+	* @return   nothing
+	*
+	*/ 
+    void SetVarietyId(int aId) {mLctPair.mVariety = aId;}
+    
+   /**
+	* Returns the LCT Id
+	*
+	* @param	nothing
+	* @return   UString 
+	*
+	*/ 
+    const UString GetLCTId() const {return mLctPair.mLctId; }
+    
+    /**
+	* Returns the Variety Id
+	*
+	* @param	nothing
+	* @return   int
+	*
+	*/  
+    const int GetVarietyId() const {return mLctPair.mVariety;} 
+    
+    /**
+	* Returns the LCT Pair structure
+	*
+	* @param	nothing
+	* @return   LCTPair
+	*
+	*/  
+    const LCTPair& GetLctPair() 
+    {
+    return mLctPair;
+    }
+
+private:
+	/**
+	 * Identifier for the element structure
+	 */
+    UString mId;
+    
+    /**
+	 * LCT information of element
+	 */
+    LCTPair mLctPair;
+    
+    /**
+     * Array of children visual structure (owned)
+     */
+    vector<LCTVisualStructure*> mVS;    
+    
+    int mX,mY,mW,mH;
+    };
+
+
+
+class MulVisualUtility
+	{
+	public:
+	    /**
+	     *  Default Constructor
+	     */
+	    OSN_IMPORT MulVisualUtility();
+	    
+	    /**
+	     * Destructor
+	     */
+	    OSN_IMPORT ~MulVisualUtility();
+	   
+	   /**
+	    * Accessor function for the LCT data
+	    * 
+	    * @return	LCTData		internal data that contains the coordinate information
+	    */
+	    OSN_IMPORT const LCTData& data() const ;
+	    
+	    /**
+	     *  Uses the passed LCTPair and populates the LCT related information
+	     *  as its internal Data.
+	     *
+	     *  @param	aPair			LCTPair to be parsed
+	     *  @param  aParentLayout	ParentLayout wit respect to which the 
+	     *							coordinate calculation has to be made
+	     *  @return nothing
+	     */
+	    OSN_IMPORT void parseLCTInfo(const LCTPair& aPair, CAlfLayout* aParentLayout= NULL);
+	     
+	    /**
+	     *  Uses the passed LCTPair and populates the LCT related information
+	     *  as its internal Data.
+	     *
+	     *  @ :: yet to implement
+	     *  @return nothing
+	     */
+	    OSN_IMPORT void parseLCTTextInfo();
+	     
+	private:
+	    /**
+	     * Internal function to concert LCT IDs into absolute data 
+	     */	
+	     void readLCTData();
+	     
+	    /**
+	     * Internal function to concert LCT IDs into absolute data for text 
+	     */	
+	     void readLCTTextData();
+	     
+	     bool isParentRelative(int aVal) const;
+	
+	private:
+	    /**
+	     * LCT data, Owned
+	     */
+	    auto_ptr <LCTData> mData;
+	    
+	    /**
+	     * LCT id
+	     */
+	     UString mLCTId;
+	     
+	    /**
+	     * Variety id
+	     */
+	     int mVarietyId;
+	};
+
+	}
+ //namespace Alf
+
+#endif /*MULVISUALUTILITY_H_*/