--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mulwidgets/mulcoverflowwidget/inc/mulbaseelement.h Wed Sep 01 12:23:18 2010 +0100
@@ -0,0 +1,694 @@
+/*
+* 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: base element header for CoverFlow
+*
+*/
+
+// This file defines the API for MulCoverFlowWidget.dll
+
+#ifndef __MULBASEELEMENT_H__
+#define __MULBASEELEMENT_H__
+
+
+// Include Files
+#include <alf/alfdecklayout.h>
+#include "alf/alfelement.h"
+#include <alf/alfflowlayout.h>
+#include <alf/alfwidgeteventhandler.h>
+#include <mul/imulwidget.h>
+
+#include "mulcoverflowdefinitions.h"
+
+namespace Alf
+ {
+
+//Forward declarations
+class MulCoverFlowTemplate;
+struct TMulBaseElementImpl;
+
+// Structure to store the position and sizes of cover flow items
+struct TMulCoverFlowItem
+ {
+ int height;
+ int width;
+ int posx;
+ int posy;
+
+ TMulCoverFlowItem()
+ :height(0),width(0),posx(0),posy(0){}
+
+ TMulCoverFlowItem(int aPosx,int aPosy,int aWidth,int aHight)
+ :posx(aPosx),posy(aPosy),width(aWidth),height(aHight){}
+
+ };
+
+namespace mulbaseelement
+ {
+ static const IfId Ident=
+ {
+ 0,"mulbaseelement"
+ };
+ }
+
+
+/* Element class which handles all the visuals in the layout
+ * The class also handles event handling and applies animation as required
+ * by the widget.The class forms the basis of the entire layout heriarchy in the widget
+ * */
+/// @bug minor:avanhata:7/7/2008 This class is coverflow-specific, so name it as such
+class MulBaseElement : public AlfElement,
+ public IAlfWidgetEventHandler
+ {
+public://Constructor and destructor
+
+ /**
+ * C++ constructor.
+ */
+ MulBaseElement( CAlfWidgetControl& aControl, const char* aName );
+
+ /**
+ * Destructor.
+ */
+ virtual ~MulBaseElement();
+
+
+public: //From IAlfWidgetEventHandler
+
+ static inline const IfId& Type()
+ {
+ return mulbaseelement::Ident;
+ }
+
+ bool accept( CAlfWidgetControl& aControl, const TAlfEvent& aEvent ) const;
+
+ void setActiveStates( unsigned int aStates );
+
+ AlfEventStatus offerEvent( CAlfWidgetControl& aControl, const TAlfEvent& aEvent );
+
+ IAlfInterfaceBase* makeInterface( const IfId& aType );
+
+ void setEventHandlerData( const AlfWidgetEventHandlerInitData& aData );
+
+ AlfWidgetEventHandlerInitData* eventHandlerData();
+
+ AlfEventHandlerType eventHandlerType() ;
+
+ AlfEventHandlerExecutionPhase eventExecutionPhase() ;
+
+public: //New Methods
+
+ /**
+ * Sets the Item Brush Color.
+ * @param aColor color to be set.
+ */
+ void SetItemBrush(const TRgb& aColor);
+
+ /**
+ * changes the opacity of counter accordingly.
+ * @param aUiOn true if UIOn or else false.
+ * @param aTransitionTime transition time.
+ */
+ void UIOnOffMode(bool aUiOn, int aTransitionTime);
+
+ /**
+ * Sets the Scroll direction during the step scroll.
+ * @param TItemScroll sets the direction if it is right or left.
+ */
+ void SetTextColor(TTextVisualType aVisualType, const TRgb& aColor);
+
+ /**
+ * returns the color of the specified text
+ * @param aVisualType is the visual type.
+ */
+ TMulVisualColorProperty TextColor(TTextVisualType aVisualType);
+
+
+ /**
+ * Sets the Scroll direction during the step scroll.
+ * @param TItemScroll sets the direction if it is right or left.
+ */
+ void SetScrollDir( TItemScroll aScrollDir );
+
+ /**
+ * Update the text opacity and counter values whenever highlight is modified
+ *
+ * @param aAnimationTime, text will be updated after the aAnimationTime.
+ */
+ void UpdateTextAndCounter(int animationTime = 0);
+
+ /**
+ * Stores the dimensions of the highlighted and nonhighlighted item from the template.
+ *
+ * @param aHighlightItemDimensions The highlight item dimensions .
+ * @param aNonHighlightItemDimensions The non highlight item dimensions.
+ * @param aVisibleIconCount The count of visible items on screen.
+ */
+ void StoreVisualDimensions( TMulCoverFlowItem aHighlightItemDimensions, TMulCoverFlowItem aNonHighlightItemDimensions,int aVisibleIconCount );
+
+ /**
+ * Stores whether the text is visible or not in the current orientation and template.
+ *
+ * @parama aIsTextVisible Boolean value indicating whether text is there or not.
+ */
+ void StoreTextVisibility( bool aIsTextVisible );
+
+ /**
+ * Return is the textvisible or not
+ *
+ */
+ bool IsTextVisibile( ) const ;
+
+ /**
+ *
+ *
+ */
+ void ApplyBrushOnIcon( CAlfImageVisual& aImageVisual );
+
+ /**
+ *
+ *
+ */
+ void RemoveBrushOnIcon( CAlfImageVisual& aImageVisual );
+
+ /**
+ * To hide and unhide Widget.
+ *
+ * @param aShow value to hide/unhide the Widget
+ * @param aTransitionTime Transition Time in MilliSeconds
+ */
+ void ShowWidget( bool aShow, int aTransitionTime = 0) ;
+
+ /*
+ * Takes the new positions of the visuals and applies the same to the visuals
+ * On change of orientation
+ */
+ void OrientationChange();
+
+ /**
+ * Sets the empty text to be displayed when the number of items is 0.
+ *
+ * @param aDefaultText The text to be displayed.
+ */
+ void SetEmptyText( const UString& aDefaultText );
+
+ /**
+ * Shows/Hide the empty text when the number of items in the model or layout is 0 . Also when the model is NULL.
+ *
+ * @param aShow Boolean value to show/hide the empty text.
+ */
+ void ShowEmptyText( bool aShow );
+
+ /**
+ * Returns true if empty text is set by the application else returns false.
+ *
+ * @returns true if empty text is set else returns false.
+ */
+ bool IsEmptyText();
+
+ /**
+ * Updates the Slider Widget ticks when item is added or removed
+ *
+ * @param aUpdateTick takes the count of items in the coverflow widget
+ */
+ void UpdateSliderTick(int aUpdateTick);
+
+ /**
+ * Returns the icon/text flow layout in vertical flow layout
+ *
+ * @param aLayoutIndex the index will determine which layout to return from the main/vertical flow layout
+ */
+ CAlfLayout& FlowLayout( int aLayoutIndex );
+
+ /**
+ *
+ * Sets the text to be displayed for the counter element .
+ *
+ * @param aTransitionTime the transition time in milliseconds for animation
+ */
+ void SetCounterText( int aTransitionTime = 0 );
+
+ /**
+ * Creates a visual for counter if not created initailly else return the existing counter visual.
+ */
+ CAlfTextVisual& CounterVisual();
+
+ /**
+ * Move the Iconflow by a items width in case of bounce effect.
+ *
+ * @param aBounceDirection Tells the direction by which the iconflowlayout should move.
+ */
+ void StartBounce(int aBounceDirection);
+
+ /**
+ * Returns whether its in Ui on mode or not.
+ *
+ * @return true if its currently in Ui on mode.
+ */
+ bool IsUiOnMode();
+
+ /**
+ * Creates the text visuals if it is not created, else returns the existing
+ * visual for the title and detail text.
+ *
+ * @param aTextString, visual tag
+ * @param aLayout, Layout in which to create the text visual
+ */
+ CAlfTextVisual& CreateTextVisual(const TDesC8& aName, CAlfLayout& aLayout);
+
+ /**
+ * Updates the value of the text visuals when an image has scrolled .
+ *
+ * @param aAnimationTime, text will be updated after the aAnimationTime.
+ */
+ void UpdateTextValue( int aAnimationTime = 0);
+
+ /**
+ * returns the layout to text.
+ */
+ CAlfLayout& TextLayout();
+
+ /**
+ * Start marquee for the text.
+ *
+ * @param aName, text type is title or detail
+ */
+ void StartMarquee(mulvisualitem::TVisualAttribute aName );
+
+ /**
+ * Stop marquee for the text.
+ *
+ * * @param aName, text type is title or detail
+ */
+ void StopMarquee(mulvisualitem::TVisualAttribute aName);
+
+ /**
+ * Decide whether to show or hide the slider based on the parameter.
+ *
+ * @param aFlag, boolean to decide slider to be shown or not.
+ */
+ void ShowSlider(bool aFlag);
+
+ /**
+ * Return size of hightlight icon for the template specified .
+ *
+ * @param aTemplateId, id of the template whose icon size to be calculated.
+ * @param aAttribute, attribute whose size is to be calculated.
+ * @param aHeight, refrence in which the height parameter is returned.
+ * @param aWidth, refrence in which the width parameter is returned.
+ */
+ void GetIconSize( mulwidget::TLogicalTemplate aTemplateId,
+ mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth);
+
+ /**
+ * Sets the Scroll Animation Time defined by the application.
+ *
+ * @param aScrollAnimationTime, ScrollAnimation Time set by the application.
+ */
+
+ void SetScrollAnimationTime( int aScrollAnimationTime );
+
+ /**
+ * Set background for coverflow
+ *
+ * @param aColor, background color.
+ */
+ void SetBackground(const TRgb& aColor);
+
+ /**
+ * Set background for coverflow.
+ *
+ * @param aIID, Skin id that shoudl be used as background.
+ */
+ void SetBackground(const TAknsItemID& aIID);
+
+ /**
+ * Stores the fit mode flag (on or off).
+ *
+ * @param aFlag fitmode flag
+ */
+ void SetFitMode(bool aFlag);
+
+ /**
+ * Apply scale mode on image visual and also appy brush for remaining area.
+ *
+ * @param aImageVisual Image visual
+ */
+ void ApplyScaleMode( CAlfImageVisual& aImageVisual);
+
+ /**
+ *
+ *
+ */
+ void CreateAndInitializeVisuals(bool aIsOrientationChange = false);
+
+ /**
+ *
+ *
+ */
+ void SetHighlight(int aHighlightIndex, int aAnimationTime = 0);
+
+ /**
+ *
+ *
+ */
+ void MoveVisuals(int aDistance,int aAnimationTime = 0);
+
+ /**
+ *
+ *
+ */
+ CAlfVisual* CreateIconStructure(CAlfLayout* aParentLayout);
+
+ /**
+ *
+ *
+ */
+ void MoveVisualsWithSizeChange(int aDistance, int aAnimationTime=0);
+
+ /**
+ *
+ *
+ */
+ void StartDoodling(int aDistance, int aAnimationTime=0);
+
+ /**
+ *
+ *
+ */
+ void StopDoodling(int aAnimationTime=0);
+
+ /**
+ * Recycle the Icon visuals instead of destroying and creating them each time.
+ */
+ void RecycleIconVisuals();
+
+ /**
+ *
+ *
+ */
+ void UpdateVisuals();
+
+ /**
+ * Sets the specified size to the base layout and deck layout and also on the empty text visual
+ */
+ void SetDefaultSize( TSize aSize );
+
+ /**
+ * Displays the indicator icon for the specified item index.
+ *
+ * @param aVisualItem visual item which conatins the index.
+ * @param aIndex index of the item.
+ */
+ void DisplayIndicatorIcon(const MulVisualItem & aVisualItem, int aIndex);
+
+ /**
+ * Returns whether the user has doodled enough to change the highlight multiple times.
+ *
+ * @returns TNumberofSwipes, Doodling distance converted into multiple swipes.
+ */
+ TNumberofSwipes NumberOfSwipes();
+
+ /**
+ * Returns the final swipe direction based on which highlight is nerest to teh centre point
+ * in the last direction
+ *
+ * @param aDistance, doodled distance
+ * @param, aastSwipeDirection, last direction in which the user has swiped.
+ */
+ int FinalSwipeDirection(int aDistance, int aLastSwipeDirection);
+
+ /**
+ * Returns teh current direction in which itesm are scrolled
+ *
+ * @return, Scroll direction
+ */
+ TItemScroll ScrollDir();
+
+ /**
+ * Removes the slider layout form the coverflow main layout
+ *
+ */
+ void RemoveSliderFromLayout();
+
+ /**
+ * Rotate the image in teh given direction
+ *
+ * @param aDirection, Direction of the rotation (ERotateLeft/ERotateRight).
+ * @param aImageSize, The actual size of the current highlighted image.
+ * @param aTransition transition time to rotate the image.
+ * @param aAdjustSize, true for orientation change
+ *
+ */
+ void RotateImage(IMulWidget::TMulRotation aDirection,TSize aImageSize,int aAnimationTime,bool aAdjustSize = false);
+
+ /**
+ * If the image on which rotation is applied, is updated then remove the rotation
+ *
+ * @param aIndex, relative index which is updated
+ */
+ void CancelRotationOnUpdate(int aIndex);
+
+private:
+
+ /**
+ * Set the virtual Size of viewportlayout(parent) of text
+ *
+ * @param aName, text type is title or detail
+ */
+ void SetVirtualViewPortSize(mulvisualitem::TVisualAttribute aName);
+
+ /**
+ * Cancell all the custom commands related to marquee.
+ */
+ void CancelAllCommands();
+
+ /**
+ * Reset counter opacity( depending on the current ui on/off mode
+ * when an item is added to an empty model.
+ *
+ * @param aTransitioTime transition time defined by app.
+ */
+ void ResetUiOnOff( int aTransitionTime = 0 );
+
+ /**
+ * Calculate the new position for counter visual based on the value of the higlight index and total model count
+ *
+ * @param aCounterLctDimension Lct Dimensions of counter visual.
+ * @param aOrientationChanged Orientation Changed or not
+ */
+ void SetNewCounterPosition(const TMulCoverFlowItem& aCounterLctDimension,bool aOrientationChanged = false );
+
+ /**
+ * Returns number of digits in a number.
+ *
+ * @param aNumber The number whose number of digits have to be found.
+ * @returns Number of digits in a number.
+ */
+ int NumberOfDigits(int aNumber);
+
+ /**
+ * Returns the current 2D coverflow template.
+ */
+ MulCoverFlowTemplate* Template2D();
+
+ //slider related apis
+ /**
+ * Created the slider widget and calls the other function related to slider.
+ */
+ void CreateSlider();
+
+ /**
+ * Constructs the slider widget if its not already constructed .
+ */
+ void ConstructSliderWidget();
+
+ /**
+ * Checks whether slider needs to be shown or hidden and sets its opacity accordingly.
+ *
+ */
+ void SetSliderOpacity();
+
+ /**
+ * Creates the base layout structure required for the base element to contain
+ * images and slider and meta data information .
+ */
+ void CreateBaseLayoutStructure();
+
+ /**
+ * Sets the text data of the current highlight to the text visual .
+ *
+ * @param aName The name of the visual in the text visual e.g mul_tiltle or mul_detail.
+ * @param aData The variant type containing the new data to be set to the text visual .
+ */
+ void SetTextToVisual( mulvisualitem::TVisualAttribute aName,IMulVariantType* aData );
+
+ /**
+ * Create empty text visualisation to show empty text when there are no items to display .
+ */
+ void CreateEmptyTextVisualisation();
+
+ /**
+ * Decides the size to be applied on the main layout depending on whether the model is null or not.
+ */
+ void HandleSizeChangeOnMain();
+
+ /**
+ * Shows/Hides the text and counter visuals when empty text has to be hidden/shown.
+ *
+ * @param aShow true when text/counter have to be shown ,
+ * false when text/counter have to be hidden.
+ */
+ void ShowHideVisualsForEmptyText( bool aShow );
+
+ /**
+ * Calculates the padding between the images based on the position
+ * and sizes of the highlighted and non higlighted items.
+ */
+ void CalculatePadding();
+
+ /**
+ *
+ * Sets opacity to the counter text visual .
+ *
+ * @param aOpacity, opacity value that should be set
+ */
+ void SetCounterTextOpacity( int aOpacity);
+
+ /**
+ * Arranging the Visual with padding and using Transition time
+ *
+ */
+ void ArrangeItems();
+
+ /**
+ * Sets the opacity of all the text visuals in the specifed visual to the given opacity (aOpacity)
+ *
+ * @param aOpacity The opacity to be set for the text visuals .
+ * @param aTransitionTime The transition time
+ */
+ void SetTextVisualOpacity( int aOpacity , int aTransitionTime = 0 );
+
+ /**
+ * Returns the percentage factor with which new Position and Sizes are calculated .
+ *
+ * @returns The change in percentage to be applied on the current size and position.
+ */
+ int CalculateDistanceChangeFactor();
+
+ /**
+ *
+ *
+ */
+ void CreateVisuals();
+
+ /**
+ * Creates a Indicator Image visual if not created initially.
+ *
+ * @param aLayout decklayout to which icon is to be added .
+ */
+ CAlfImageVisual* CreateIndicatorIconVisual(CAlfDeckLayout& aLayout);
+
+ /**
+ *
+ *
+ */
+ void SetIndicatorDimensions(CAlfImageVisual& aIndicatorVisual);
+
+ /**
+ *
+ *
+ */
+ const TDesC8& IdToTag( int aId );
+
+ /**
+ * Creates an array of midpoints of all the visuals form left to right
+ *
+ * @return, array of midpoints
+ */
+ std::vector<int> ReferenceMidPoints();
+
+ /**
+ * Calculates the new midpoints after the doodling
+ *
+ * @param aReferenceMidPoints,midpoints before doodling
+ * @param aDistance, final doodled distance
+ * @return array of new midpoints
+ */
+ std::vector<int> FinalMidPoints(std::vector<int> aReferenceMidPoints,int aDistance);
+
+ /**
+ * Returns the position of the visual in the array which is nearest to midpoint
+ * in swipe direction
+ *
+ * @param aFinalMidPoints, new midpoints after the doodling
+ * @param aLastSwipeDirection, Last swipe direction
+ */
+ int NearestPoint(std::vector<int> aFinalMidPoints,int aLastSwipeDirection);
+
+ /**
+ * The image visual size and position is modified to stretch/compress the image
+ * after rotation. This is done because the before rotation teh texture will be
+ * generated according to the current orientation. To show the rotated texture
+ * image visual is modified such that the texture looks rotated preserving
+ * the aspect ration
+ *
+ * @param aVisual,Visual for which the rotation is applied
+ * @param aAnimationTime, time for rotation
+ */
+ void AdjustVisualSizeInRotation(CAlfImageVisual* aVisual,int aAnimationTime);
+
+ /**
+ * Handle rotation of 90degree or 270 degree. here the image visuals size
+ * needs to be altered if required as the current width will become teh height of
+ * the texture after rotation.
+ *
+ * @param aVisual,Visual for which the rotation is applied
+ * @param aAnimationTime, time for rotation
+ */
+ void HandleRotationOnVerticalAxis(CAlfImageVisual* aVisual,int aAnimationTime);
+
+ /**
+ * Handle rotation of 180degree or 0 degree. Here no need to modify the image visuals
+ * size.
+ *
+ * @param aVisual,Visual for which the rotation is applied
+ * @param aAnimationTime, time for rotation
+ */
+ void HandleRotationOnHorizontalAxis(CAlfImageVisual* aVisual,int aAnimationTime);
+
+ /**
+ * Cancel the rotation applied for teh visual at the given relative index.
+ * Relative index -1 indicates cancel the rotation on highlighted visual
+ *
+ * @param aIndex, relative index of teh visual for which the rotation needs to be canceled
+ */
+ void CancelRotation(int aIndex = -1);
+
+ /**
+ * Preserve the rotation after orientation change.
+ *
+ */
+ void UpdateRotation();
+
+private: //Class Data
+
+ auto_ptr<TMulBaseElementImpl> mData; //owned
+
+ };
+
+ } // namespace Alf
+
+#endif // __MULBASEELEMENT_H__
+
+//End of file