--- /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 <alf/alfwidgetcontrol.h>
+
+// Osn Headers
+#include <touchfeedback.h>
+
+// Gesture Helper
+#include <gestureobserver.h>
+
+// Mul Headers
+#include <mul/imulvarianttype.h>
+#include <mul/imulwidget.h>
+#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<GestureHelper::CGestureHelper> mHelper; //owns it
+
+ auto_ptr<TMulCoverFlowControlImpl> mData; // Owned
+
+ auto_ptr<MulCoverFlowAo> mCoverFlowAo; // owned
+
+ MTouchFeedback* mFeedback; // tactile feedback, doesnt own it.
+
+ IMulSliderWidget* mSliderWidget; //
+
+ };
+
+ } // namespace Alf
+
+#endif // MULCOVERFLOWCONTROL_H
+
+//End of file