menufw/menufwui/mmwidgets/inc/mmtemplatelibrary.h
changeset 0 f72a12da539e
child 1 5315654608de
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menufw/menufwui/mmwidgets/inc/mmtemplatelibrary.h	Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,595 @@
+/*
+* Copyright (c) 2007 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:  
+*  Version     : %version: MM_24.1.8 % << Don't touch! Updated by Synergy at check-out.
+*
+*/
+
+
+#ifndef MMTEMPLATELIBRARY_H
+#define MMTEMPLATELIBRARY_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <e32hashtab.h> //RHashMap
+#include <avkon.hrh>
+#include <xmlengdom.h>
+#include <gdi.h>
+#include <eiksbfrm.h>
+#include <AknLayout2Def.h>
+#include "mmwidgetsconstants.h"
+#include <AknDef.hrh>
+
+// default templates
+// grid
+_LIT8( KDefaultGridLogicalTemplate, "logical_template_3" );
+// list
+_LIT8( KDefaultListLogicalTemplate, "list_single_hc_apps_pane" );
+
+
+// STRUCT DECLARATION
+
+/**
+ *  Struct used to store template child data
+ * 
+ * @since S60 v5.0
+ * @ingroup group_mmwidgets
+ */
+class TTemplateChild
+    {
+    
+public:
+	
+    /**
+     * Rectangle of subcell according to position in item.
+     */
+    TRect iRectAccordingToParent;
+    
+    /**
+     * Data type represented by the subcell.
+     */
+    TBufC8<64> iData;
+    
+    /**
+     * The LCT template used to calculate the subcell position.
+     */
+    TBufC8<64> iLct;
+    
+    /**
+     * The variety for the lct template.
+     */
+    TInt iVariety;
+    
+    /**
+     * Depicts if the subcell is an image or text.
+     */
+    TBool iIsImage;
+    
+    /**
+     * The font id used for displaying text.
+     */
+    TAknLogicalFontId iFontId;
+    
+    /**
+     * The type of align for the text.
+     */
+    CGraphicsContext::TTextAlign  iTextAlign;
+    
+    /**
+     * The additional Id for a subcell element used to differentiate it
+     * from others. e.g the backdrop image has a different visual id 
+     * since it is displayed only in edit mode.
+     */
+    TImageVisualId iImageVisualId;
+    
+    /**
+     * The type of horizontal align for the icon.
+     */
+    TManualAlign iHAlign;
+
+    };
+
+// CLASS DECLARATION
+
+/**
+ *  Used by Multimedia Menu to load template data.
+ *  
+ *  @code
+ *  @endcode
+ *  @lib mmwidgets
+ *  @since S60 v3.0
+ *  @ingroup group_mmwidgets
+ */
+NONSHARABLE_CLASS( CMmTemplateLibrary ) : public CBase
+	{
+public:
+	// Constructors and destructor
+    
+    /**
+     * Destructor.
+     */
+    ~CMmTemplateLibrary();
+
+	/**
+	 * Two-phased constructor.
+	 */
+	IMPORT_C static CMmTemplateLibrary* NewL();
+	
+	/**
+     * Two-phased constructor.
+     */
+	IMPORT_C static CMmTemplateLibrary* NewLC();
+
+private:
+
+	/**
+	 * Constructor for performing 1st stage construction.
+	 */
+	CMmTemplateLibrary();
+
+	/**
+	 * Default symbian 2nd stage constructor.
+	 */
+	void ConstructL();
+
+public:
+
+	/**
+	 * Gets the size of template item according to highlight and orientation.
+	 * 
+	 * @since S60 v3.0
+	 * @param aWidgetType The widget type.
+	 * @param aTemplate The current template for the item. 
+	 * @param aLandscapeOrientation Is view in landscape orientation.
+	 * @param aHighlighted Is item highlighted.
+	 * @param aParentRect The bounding rect in which the item is drawn.
+	 * 
+	 * @return size of item
+	 */
+	TSize GetSize( TMmWidgetType aWidgetType, const TDesC8& aTemplate, 
+			TBool aLandscapeOrientation = 0, TBool aHighlighted = 0, 
+			TRect aParentRect = TRect() );
+    
+    /**
+     * Gets the size of template.
+     * 
+     * @since S60 v3.0
+     * @param aItemSize Item size to be set.
+     * @param aWidgetType The widget type.
+	 * @param aTemplate The current template for the item. 
+	 * @param aLandscapeOrientation Is view in landscape orientation. 
+	 * @param aHighlighted Is item highlighted.
+	 * @param aParentRect The bounding rect in which the item is drawn.
+	 * 
+     * @return error code
+     */
+	TInt GetSize(  TSize& aItemSize, TMmWidgetType aWidgetType, 
+	        const TDesC8& aTemplate, TBool aLandscapeOrientation, 
+	        TBool aHighlighted , TRect aParentRect = TRect() );
+    
+    /**
+     * Get array of templates for subcells ( item children ). 
+     * 
+     * @since S60 v3.0
+     * @param aWidgetType The widget type.
+     * @param aArray The array of subcell children to be set.
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation.
+     * @param aHighlighted Is item highlighted.
+     * @param aIsEditMode Is in edit mode. 
+     * 
+     */
+	void GetChildrenL( TMmWidgetType aWidgetType,
+			RArray< TTemplateChild >& aArray, const TDesC8& aTemplate, 
+			TBool aLandscapeOrientation = 0, TBool aHighlighted = 0, TBool aIsEditMode = 0 );
+    
+    /**
+     * Get the layout size ( Grid ) e.g. 3x4
+     * 
+     * @since S60 v3.0
+     * @param aWidgetType The widget type.
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation.
+     * 
+     * @return the size of the layout.
+     */
+	TSize GetLayoutSizeL( TMmWidgetType aWidgetType, const TDesC8& aTemplate, 
+			TBool aLandscapeOrientation );
+    
+    /**
+     * Get rect of move indicator according to item (as reference position).
+     * The rect is relevant to the item in point (0,0). 
+     * e.g for item size 20x360 the rect can be (-5,-5):(365,25).
+     * 
+     * @since S60 v3.0
+     * @param aWidgetType The widget type.
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation. 
+     * @param aHighlighted Is item highlighted.
+     * 
+     * @return rect of move indicator area.
+     */
+	TRect GetMoveIndicatorRect( TMmWidgetType aWidgetType, const TDesC8& aTemplate, 
+			TBool aLandscapeOrientation, TBool aHighlighted );
+    
+    /**
+     * Get children templates for move indicator. 
+     * 
+     * @since S60 v3.0
+     * @param aWidgetType The widget type.
+     * @param aArray Array of children templates.
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation.
+     * @param aHighlighted Is item highlighted.
+     * 
+     */
+	void GetMoveIndicatorChildrenL( TMmWidgetType aWidgetType,
+			RArray< TTemplateChild >& aArray, const TDesC8& aTemplate, TBool aLandscapeOrientation, TBool aHighlighted );
+    
+    /**
+     * Get size of item for LCT template.
+     * 
+     * @since S60 v3.0
+     * @param aLCTTemplate The LCT template name.
+     * @param aVariety The variety for aLCTTemplate.
+     * @param aWindowLayout The window layout to be used to calculet the size.
+     * @param aLandscapeOrientation ETrue if view in landscape orientation otherwise EFalse.
+     * 
+     * @return item size
+     */
+	TSize GetLCTSize( const TDesC8& aLCTTemplate, TInt aVariety, TAknWindowLineLayout& aWindowLayout, TBool aLandscapeOrientation );
+    
+    /**
+     * Clean the cache
+     * 
+     * @since S60 v3.0
+     */
+	void CleanAndClearCache( );
+
+    /**
+     * The template content is loaded. LCT templates have highest priority. 
+     * If there is no LCT template, a custom template is loaded.
+     * 
+     * @since S60 v3.0
+     * @param aTemplate The current template for the item.
+     * @param aWidgetType The widget type.
+     * @param aMmTemplateType Type of template (LCT/custom).
+     * 
+     * @return Template content.
+     */
+	HBufC8* GetTemplateContentL( const TDesC8& aTemplate, TMmWidgetType aWidgetType, TMmTemplateType& aMmTemplateType );
+    
+    /**
+     * Sets scrollbar visibility so template library is aware.
+     * 
+     * @since S60 v3.0
+     * @param aIsScrollbarVisible Is scrollbar visible.
+     */
+    void SetScrollbarVisibilityL( TBool aIsScrollbarVisible );
+    
+    /**
+     * Gets scrollbar visibility.
+     * 
+     * @since S60 v3.0
+     * @return Is scrollbar visible.
+     */
+    TBool GetScrollbarVisibility();
+    
+    /**
+     * Sets the current zoom so template library can retrieve the appropriate templates.
+     * 
+     * @since S60 v3.0
+     * @param aZoom Is The current zoom to be set.
+     */
+	void SetZoom( TAknUiZoom aZoom =  EAknUiZoomAutomatic );
+	
+	/**
+     * Sets the scrollbar width so template library can calculate the width of the item correctly.
+     * 
+     * @since S60 v3.0
+     * @param aScrollbarWidth The current width of the scrollbar.
+     */
+	void SetScrollbarWidthL( TInt aScrollbarWidth );
+	
+	/**
+	 * Gets scrollbar width.
+	 * 
+	 * @since S60 v3.0
+	 * @return scrollbar width
+	 */
+	TInt ScrollbarWidth();
+	
+	/**
+     * Gets the parent rect for given orientation from which templates were calculated.
+     * 
+     * @since S60 v3.0
+     * @param aLandscapeOrientation The current landscape orientation.
+     * @return Parent rect for given orientation.
+     */
+	TRect GetParentRect( TBool aLandscapeOrientation );
+	
+private:
+	/**
+	 * Get the lookup text.
+	 * 
+	 * @since S60 v3.0
+	 * @param aTemplate The current template for the item.
+	 * @param aWidgetType The widget type.
+	 * @param aLandscapeOrientation Is view in landscape orientation. 
+	 * @param aHighlighted Is item highlighted.
+	 * 
+	 * @return Lookup text. 
+	 */
+	HBufC8* LookupText( const TDesC8& aTemplate, TMmWidgetType aWidgetType,
+        TAknUiZoom aZoom, TBool aLandscapeOrientation = EFalse, 
+        TBool aHighlighted = EFalse );	
+    
+    /**
+     * Get the lookup text for layout size.
+     * 
+     * @since S60 v3.0
+     * @param aWidgetType The widget type.
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation. 
+     * 
+     * @return lookup layout text.
+     */
+	HBufC8* LookupLayoutText( TMmWidgetType aWidgetType, TAknUiZoom aZoom, 
+        const TDesC8& aTemplate, TBool aLandscapeOrientation );
+    
+	/**
+     * Get the lookup text for move indicator.
+     * 
+     * @since S60 v3.0
+     * @param aLookupText The lookup text to be used to create the lookup indicator text.
+     * @return lookup Indicator text.
+     */
+	HBufC8* LookupIndicatorText( const TDesC8& aLookupText );
+
+    /**
+     * Load the template to cache.
+     * 
+     * @since S60 v3.0
+     * @param aWidgetType The widget type.
+     * @param aTemplate The current template for the item.
+	 * @param aLandscapeOrientation The current orientation.
+     */
+	void LoadTemplateL( TMmWidgetType aWidgetType, const TDesC8& aTemplate, 
+			TBool aLandscapeOrientation );
+	
+    /**
+     * Get template file content.
+     * 
+     * @since S60 v3.0
+     * @param aContent Descriptor to which the file content should be set.
+     * @param aTemplate The current template for the item.
+     * @param aWidgetType The widget type.
+     * @param aMmTemplateType Type of template (LCT/custom).
+     * @param aLoadCustomTemplate Value to be set depending on template type loaded (LCT/custom).
+     */
+	void GetTemplateFileContentL (HBufC8*& aContent, const TDesC8& aTemplate,
+		TMmWidgetType aWidgetType, TMmTemplateType& aMmTemplateType,
+		TBool aLoadCustomTemplate = EFalse);
+		
+    /**
+     * Process xml element.
+     * 
+     * @since S60 v3.0
+     * @param aMmTemplateType Type of template (LCT/custom).
+     * @param aElement Element ( xml ).
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation. 
+     * @param aHighlighted Is item highlighted.
+     * 
+     */
+	void ProcessElementL (TMmTemplateType aMmTemplateType,
+		TXmlEngElement aElement, const TDesC8& aTemplate,
+		TBool aLandscapeOrientation, TBool aHighlighted);	
+    
+	/**
+     * Process the LCT template.
+     * 
+     * @since S60 v3.0
+     * @param aElement Element (xml).
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation. 
+     * @param aHighlighted Is item highlighted.
+     */
+	void ProcessLCTTemplateElementL( TXmlEngElement aElement, 
+	                                         const TDesC8& aTemplate, 
+	                                         TBool aLandscapeOrientation,
+	                                         TBool aHighlighted );
+
+    /**
+     * Process the custom template.
+     * 
+     * @since S60 v3.0
+     * @param aElement Element (xml)
+     * @param aTemplate The current template for the item.
+     * @param aLandscapeOrientation Is view in landscape orientation. 
+     * @param aHighlighted Is item highlighted.
+     */
+	void ProcessCustomTemplateElementL( TXmlEngElement aElement, 
+	                                         const TDesC8& aTemplate, 
+	                                         TBool aLandscapeOrientation,
+	                                         TBool aHighlighted );
+
+    /**
+     * Setup LCT template data.
+     * 
+     * @since S60 v3.0
+     * @param aChildTemplate Template where the data should be set up. 
+     * @param aChildElement Element (xml).
+     * @param aItemSize Item size.
+     */
+	void SetupLCTTemplateL(TTemplateChild& aChildTemplate, TXmlEngElement& aChildElement, TSize aItemSize );
+    
+	/**
+     * Setup custom template. 
+     * 
+     * @since S60 v3.0
+     * @param aChildTemplate Template where the data should be set up. 
+     * @param aChildElement Element (xml).
+     */
+	void SetupCustomTemplateL(TTemplateChild& aChildTemplate, TXmlEngElement& aChildElement );
+    
+	/**
+     * Set the template visual id.
+     * 
+     * @since S60 v3.0
+     * @param aChildTemplate Template data.
+     */
+	void SetupTemplateVisualId(TTemplateChild& aChildTemplate );
+    
+	/**
+     * Setup the item children template data for move indicator and cache the data.
+     * 
+     * @since S60 v3.0
+     * @param aLookupString Lookup string.
+     * @param aItemSize Item size.
+     */
+	void SetupMoveIndicatorTemplateChildrenL( const TDesC8& aLookupString, TSize aItemSize );
+    
+	/**
+     * Adjusts the item size loaded to template cache according to layout size and orientation.
+     * This method adjusts the item width so that items occupy the view correctly.
+     * 
+     * @since S60 v3.0
+     * @param aSize The size of the item to be adjusted. 
+     * @param aLayoutSize The layout of the widget e.g 3x4 
+     * @param aLandscapeOrientation The orientation of the template being processed.
+     */
+	void AdjustItemWidth( TSize& aSize, TSize aLayoutSize, TBool aLandscapeOrientation );
+
+	/**
+     * Updates the parent rect according to orientation.
+     * 
+     * @since S60 v3.0
+     * @param aParentRect The current parent rectangle.
+     * @param aLandscapeOrientation The current orientation.
+     */
+	void UpdateParentRect( TRect aParentRect, TBool aLandscapeOrientation );
+    
+	/**
+     * Sets the parent rect for given orientation.
+     * 
+     * @since S60 v3.0
+     * @param aLandscapeOrientation Orientation for which parent rect shoul be set.
+     * @param aParentRect The parent rect of current orientation.
+     */
+	void SetParentRect( TBool aLandscapeOrientation, TRect aParentRect);
+    
+	/**
+     * Appends the edit mode template (backdrop icon) to the array of template children passed to the item drawer for drawing.
+     * 
+     * @since S60 v3.0
+     * @param aTemplateArray The template array to which the edit mode template is appended.
+     * @param aSize The size of the item for which the edit mode template should be calculated.
+     */
+	void AppendEditModeTemplateL( RArray< TTemplateChild >& aTemplateArray, TSize aSize );
+    
+	/**
+     * Adjusts the item size according to layout, LCT item size and orientation.
+     * 
+     * @since S60 v3.0
+     * @param aItemSize The LCT item size.
+     * @param aLayoutSize The layout size to be used to calculate item size.
+     * @param aLandscapeOrientation The orientation for which the template is loaded.
+     */
+	void AdjustItemSize(TSize& aItemSize,  TSize aLayoutSize, TBool aLandscapeOrientation );
+    
+	/**
+     * Get the current zoom for displaying templates.
+     * 
+     * @since S60 v3.0
+     * @return The current zoom.
+     */
+	TAknUiZoom Zoom( );
+    
+	/**
+     * Caches the layout size
+     * 
+     * @since S60 v3.0
+     * @param aLayoutSize The layout size to ba cached.
+     * @param aTemplate The template for the cached layout size.
+     * @param aLandscapeOrientation The orientation for which the template is loaded.
+     * @return The current zoom.
+     */
+	void CacheLayoutSizeL( TSize aLayoutSize, const TDesC8& aTemplate, TBool aLandscapeOrientation );
+	
+	/**
+     * Adjusts icon's align to layout (left, center, right).
+     * 
+     * @since S60 v5.0
+     * @param aParentSize The LCT parent item size.
+     * @param aTemplateChild Template data.
+     */
+    void AdjustIconPosition(TSize aParentSize,
+                    TTemplateChild& aTemplateChild);
+
+private: //Members
+
+	/**
+	 * Widget type of template being loaded.
+	 */
+    TMmWidgetType iWidgetType;
+    
+    /**
+     * Template type which is being loaded (LCT/custom).
+     */
+    TMmTemplateType iMmTemplateType;
+    
+    /**
+     * Template sizes map.
+     */
+    RHashMap< HBufC8*, TSize> iTemplateSizesMap;
+    
+    /**
+     * Item children template map.
+     */
+    RHashMap< HBufC8*, RArray<TTemplateChild> > iTemplateChildrenMap;
+    
+    /**
+     * Move indicator rects map.
+     */
+    RHashMap< HBufC8*, TRect> iMoveIndicatorRectsMap;
+    
+    /**
+     * Parent bounding rect.
+     */
+    TRect iParentRectPortrait;
+	
+    /**
+     * Parent bounding rect.
+     */
+    TRect iParentRectLandscape;
+    
+    /**
+     * Scrollbar is visible.
+     */
+    TBool iIsScrollbarVisible;
+	
+    /**
+     * Scrollbar width.
+     */
+    TInt iScrollbarWidth;
+	
+    /**
+     * Zoom type.
+     */
+    TAknUiZoom iZoom;
+
+	};
+#endif // MMTEMPLATELIBRARY_H