diff -r 4ea6f81c838a -r 0e9bb658ef58 mulwidgets/mulcoverflowwidget/inc/mulbaseelement.h --- /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 +#include "alf/alfelement.h" +#include +#include +#include + +#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 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 FinalMidPoints(std::vector 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 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 mData; //owned + + }; + + } // namespace Alf + +#endif // __MULBASEELEMENT_H__ + +//End of file