diff -r 000000000000 -r e83bab7cf002 mulwidgets/mulcoverflowwidget/inc/mulcoverflowcontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mulwidgets/mulcoverflowwidget/inc/mulcoverflowcontrol.h Thu Dec 17 08:56:02 2009 +0200 @@ -0,0 +1,539 @@ +/* +* 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: The Control header for CoverFlow Widgets. + * +*/ + +#ifndef MULCOVERFLOWCONTROL_H +#define MULCOVERFLOWCONTROL_H + +// Alf Headers +#include + +// Osn Headers +#include + +// Gesture Helper +#include + +// Mul Headers +#include +#include +#include "imulmodelobserver.h" + +//Gesture Helper namespace +namespace GestureHelper + { + class CGestureHelper; + struct TRealPoint; + } + +//Forward declarations +class CAlfFlowLayout ; +class CAlfImageVisual; + +namespace Alf + { +//Forward declarations +class IAlfWidget; +class IMulModelAccessor; +class IMulSliderModel; +class IMulSliderWidget; +class MulBaseElement; +class MulCoverFlowAo; +class MulCoverFlowTemplate; + +struct TMulCoverFlowControlImpl; + +namespace mulcoverflowcontrol + { + static const IfId Ident= + { + 0,"MulCoverFlowControl" + }; + } + +class MulCoverFlowControl : public CAlfWidgetControl, + public IMulModelObserver, + public GestureHelper::MGestureObserver + { + +public: //Constructor and destructor + + /** + * C++ constructor. + */ + MulCoverFlowControl( CAlfEnv& aEnv ); + + /** + * Destructor. + */ + virtual ~MulCoverFlowControl(); + +public: //From CAlfWidgetControl + + AlfEventStatus handleEvent( const TAlfEvent& aEvent ); + + static inline const IfId& Type() + { + return mulcoverflowcontrol::Ident; + } + + IAlfInterfaceBase* makeInterface( const IfId& aType ); + + void VisualLayoutUpdated (CAlfVisual& aVisual); + +public:// From IMulModelObserver + + void ModelStateChanged( TMulChangedState aState, IMulVariantType& aData ); + +public:// From MGestureObserver + + /** + * Handles gesture events and delegates the processing to the base element + * + * @param aEvent Gesture event e.g . EGestureSwipeLeft/Right + */ + void HandleGestureL( const GestureHelper::MGestureEvent& aEvent ); + + +public: //New Methods + + /** + * Returns the total count that application has set to the model . + * The number of items that application has set to the model i,e the total + * number of items that the application may insert into the model may not + * be equal to the total number of items given to the widget for presentation + * by the model . + * + * @returns The number of items that the application has set to the model . + */ + int TotalModelCount(); + + /** + * Sets the highlight index to the given aIndex + * + * @param aIndex, Index to which the current focus visulisation to be moved. + */ + void SetHighlightIndex( int aIndex ,bool aUpdateSlider = true); + + /** + * Return the Highlight Item Index maintained in control when update highlight to model is blocked + * + * @return, Current Highlight + */ + int HighlightIndex(); + + /** + * Returns the current 2D coverflow template. + * + * @return, CoverflowTemplate + */ + MulCoverFlowTemplate* Template2D(); + + /** + * Returns whether the coverflow is currently in fast scroll mode or not . + * + * @returns true if fast scroll mode is launched, else returns false + */ + bool IsFastScrollMode(); + + /** + * Resets the show widget flag depending on the parameter passed. + * + * @param aNewResetValue The new value with which the flag needs to be reset. + */ + void ResetShowWidgetFlag( bool aNewResetValue ); + + + /** + * Returns the accessor to the current model of the widget. + */ + IMulModelAccessor* ModelAccessor(); + + + /** + * Recycles all the visuals added to the Icon Layout. + * The function is called whenever there is an model change + */ + void RecycleVisuals(); + + /** + * Creates the slider widget . The creation of slider widget depends on the xml . + * That is if the xml has a slider tag then only slider widget is created . + */ + IAlfWidget* CreateSliderWidget(); + + /** + * Returns the created slider widget . If the widget is not created , then returns NULL. + */ + IAlfWidget* GetSliderWidget(); + + /** + * Returns the slider model pointer . + * + * @returns The slider model pointer if slider widget is created and exists, else returns NULL. + */ + IMulSliderModel* GetSliderModel(); + + /** + * Check whether we need hold events (Enhanced coverflow can be launched) and + * set the state to gesture helper accordingly + */ + void SetHoldingEnabled(); + + /** + * Enable/Disable double tap on Gesture helper based on the aValue specified. + * + * @param aValue The value whether double tap should be enabled or not. + */ + void SetDoubleTapEnabled( bool aValue); + + /** + * Handles the scrolling event and changes the focus accordingly. + * + * @param aEvent the scrolling event to be handled + */ + void HandleNavigationEvent( int aEvent ); + + /** + * Transition time for highlight change in fast scroll + * + * @return, transition time to be used + */ + int FastScrollTransitionTime(); + + /** + * Update the item at relative index Of aVisualIndex with the data at aItemIndex + * + * @param aItemIndex, Absolute index + * @param aVisualIndex, Relative index + * @param aAnimationTime, text will be updated after the aAnimationTime. + */ + void UpdateCoverflowItem( int aItemIndex, int aVisualIndex, int aAnimationTime = 0); + + /** + * Checks the current index is in visible window and returns its relative index in aRelativeIndex + * + * @param aIndex, + * @param aRelativeIndex, + */ + bool IsIndexInVisibleWindow(const int aIndex,int& aRelativeIndex); + + /** + * + * + */ + int RelativeToAbsolute(const int aRelativeIndex); + + /** + * update the item at the relative index. + * + * @param aVisualIndex, Relative index + * @param aAnimationTime, text will be updated after the aAnimationTime. + * + */ + void UpdateItemAtIndex(const int aRelativeIndex, int aAnimationTime = 0); + + /** + * + * + */ + void DoSetImage(IMulVariantType* aImageData,CAlfImageVisual* aImgVisual); + + /** + * Checks the given file path is of SVG image or not + * + * @param aImagePath Path of the image file,which need to be checked for SVG file format. + */ + bool IsSVGImage(const TDesC& aImagePath); + + /** + * Load Image visual with image provided from file path + * + * @param aSvgFilePath path of Image + * @param aImageVisual visual on with image to be loaded + */ + void LoadImageFromSvg(const TDesC& aImagePath,CAlfImageVisual& aImageVisual ); + + /** + * + * + */ + void StoreVisibleItemCount(int aVisibleItemCount); + + /** + * + * + */ + void SetDefaultImage(int aTextureId); + + /** + * + * + */ + int WindowTop(int aHighlightIndex); + + /** + * + * + */ + void UpdateBaseElement(MulBaseElement* aBaseElement); + + /** + * Slider handles the key events . + * Slider thumb positions itself to the gesture and key events of coverflow widget + * + */ + void SetSliderTickPosition(); + + /** + * + * + */ + void ModelChanged( IMulModelAccessor* aAccessor); + + /** + * Determins the current resolution + * + * + */ + bool IsLandscape(); + + /** + * Destroys slider widget. + */ + void DestroySlider(); + + /** + * Return gesture helper. + */ + GestureHelper::CGestureHelper* Gesturehelper(); + +private: + + // Event handling related api. + /** + * Handles key event related manipulation. + * + * @param TAlfEvent + * @returns The status of the handled event. + */ + AlfEventStatus HandleKeyEvent( const TAlfEvent& aEvent ); + + /** + * Handles repeated key event. + * + * @param TAlfEvent + * @returns The status of the handled event. + */ + AlfEventStatus HandleRepeatKeyEvent( const TAlfEvent& aEvent ); + + /** + * Handle fast scrolling and speed variations with repeated key events. + * + * @param aDirection, Direction in which to change the highlight + */ + void HandleFastScrollWithKeyEvents(int aDirection); + + /** + * Handles custom event that control has raised to itself like bounce,bounce over etc. + * + * @returns The status of the handled event. + */ + AlfEventStatus HandleCustomEvent( const TAlfEvent& aEvent ); + + /** + * Handles swipe events(only on pointer events from gesture helper) + * + * @param aEvent - SwipeRight/SwipeLeft. + */ + void HandleSwipe(int aEvent); + + /** + * Performs the focus visualisation for the new focusedindex, and clears the old + * index visulisation. Called for every navigation events and sethighlight api call. + * + * @param aIndex new Index to which the focus visualisation is to be set. + */ + void DoSetFocusIndex( int aIndex, int aAnimationTime =0); + + /** + * Sets the current highlighted item as the selected item . + * Sends the selection event to the application . + */ + void SetSelection(int aHighlight); + + /** + * Creates a new template element with aTemplateName . + * + * @param aTemplateName The name of thew new template element. + */ + void CreateTemplateElement( mulwidget::TLogicalTemplate aTemplateName); + + + /** + * Sends the specified event to the base element . + * + * @param aEvent Event to be sent to the base element. + */ + void SendEventToBaseElement( const TAlfEvent& aEvent ); + + /** + * Handles if there is any change in the total count of model . + * Updates the slider tick if the total count of model increases/decreases. + * + */ + + void HandleModelCountChange(); + + /** + * Gets the absolute index of the specified visual, which has been tapped. + * + * @param aHitVisual The visual which has been tapped or hit. + */ + int GetHitVisualIndex( CAlfVisual* aHitVisual ); + + /** + * Handle enhanced stop. + */ + void HandleEnhancedStop(); + + /** + * Performs all the enhanced mode related checkings ..e.g whether the fast scroll flag + * is set or not / whether the application is in landscape mode or not . + * + * @return Boolean value informing whether enhanced mode should be started or not . + */ + bool EnhancedModeCondition(); + + /** + * Performs animations when enhanced mode is started . + * The coverflow transits to enhanced mode from 2D normal mode . + * + * @param aEvent , gesture event + */ + void EnhancedStarted( const GestureHelper::MGestureEvent& aEvent ); + + /** + * Returns the current Gesture Speed. + * + * @param aEvent Event from the gesture helper. + * @returns The current gesture speed. + */ + GestureHelper::TRealPoint GestureSpeed( const GestureHelper::MGestureEvent& aEvent ); + + /** + * Performs animations in enhanced mode. + * Moves the layout along with the pointer event . The function calls the active object class + * to move the layout with smooth animation . + * + * @param aEvent Gesture event . + */ + void StartMoving( const GestureHelper::MGestureEvent& aEvent ); + + /** + * Handles all normal gesture events other than hold events + * + * @param aEvent Gesture event e.g . EGestureSwipeLeft/Right + */ + void HandleNormalGestureEvents(const GestureHelper::MGestureEvent& aEvent); + + /** + * Handles hold gesture events. + * + * @param aEvent Gesture event e.g . EGestureSwipeHoldLeft/Right + */ + void HandleHoldGestureEvents(const GestureHelper::MGestureEvent& aEvent); + + /** + * Handles updating utems when the number of items in model are less than total visible items + * + * @param aIndex, Index to update. + */ + void HandleLessItemsUpdate(int aIndex); + + /** + * Sets a blank texture the visual at relative index. + * + * @param aRelativeIndex, Index for which the blank texture should be set + */ + void SetBlankTexture(int aRelativeIndex); + + + /** + * Converts the gesture distance into the form of direction (For right + * its plus and left its minus) + * + * @param aDistance, Gesture distance + */ + int ConvertDistanceToDirection( int aDistance ); + /** + * Sends Tactile feedback in case of touch down event. + * + * @param aEvent Gesture event. + */ + void SendFeedbackOnTouchDown(const GestureHelper::MGestureEvent& aEvent); + + /** + * Decides in which direction the strip should move during fast scroll and also decides the position of + * reference point for some special cases . + * + * @param aEvent Gesture event. + */ + void ReverseDirectionInFastScroll(const GestureHelper::MGestureEvent& aEvent); + + /** + * Change the reference point of reversing the direction until the reference point becomes the + * middle of the screen . + * + * @param aCurrPosition The current pointer position . + * @param aDistanceTravelled The distance travelled by the gesture till now. + */ + void ChangeDirReferencePoint(int aCurrPosition, int aDistanceTravelled ); + + /** + * Handles the operations on the Single tap. + * + * @param aEvent Gesture event. + */ + void HandleSingleTap(const GestureHelper::MGestureEvent& aEvent); + + /** + * + * + * + */ + int TotalSwipeDistance( const GestureHelper::MGestureEvent& aEvent ); + + +private: + + auto_ptr mHelper; //owns it + + auto_ptr mData; // Owned + + auto_ptr mCoverFlowAo; // owned + + MTouchFeedback* mFeedback; // tactile feedback, doesnt own it. + + IMulSliderWidget* mSliderWidget; // + + }; + + } // namespace Alf + +#endif // MULCOVERFLOWCONTROL_H + +//End of file