diff -r fb3763350a08 -r 4d54b72983ae taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapgrid.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapgrid.h Tue Jan 26 11:48:23 2010 +0200 @@ -0,0 +1,362 @@ +/* +* Copyright (c) 2009 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: Taskswitcher Fast Swap area UI + * +*/ + + +#ifndef TSFASTSWAPGRID_H_ +#define TSFASTSWAPGRID_H_ + +#include +#include +#include "tsdevicestate.h" + +class CAknsFrameBackgroundControlContext; +class CTsFastSwapTimer; + +/** + * Observer for handling fast swap grid events + */ +class MTsFastSwapGridObserver + { +public: + /** + * Called when close icon is tapped on the grid item. + * + * @param aItemIdx index of the the item for which close icon + * has been tapped + */ + virtual void HandleCloseEventL( TInt aItemIdx ) = 0; + }; + + +class MTsFastSwapTimerObserver + { +public: + /** + * Called when timer is completed + */ + virtual void TimerCompletedL( CTsFastSwapTimer* aSource ) = 0; + }; + + +/** + * Avkon grid implementing custom item drawer + */ +class CTsFastSwapGrid: + public CAknGrid, + public MTsDeviceStateObserver + { +public: // enums + enum TFastSwapGridBehaviour + { + // Highlight always visible + EHybrid, + + // Touch only highlight handling + ETouchOnly + }; + +public: // Constructor and destructor + CTsFastSwapGrid(); + ~CTsFastSwapGrid(); + void ConstructL( const CCoeControl* aParent ); + +public: // From CCoeControl + void HandlePointerEventL( const TPointerEvent &aPointerEvent ); + TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); + void HandleResourceChange( TInt aType ); + void SizeChanged(); + +public: //From MTsDeviceStateObserver + /** + * Called when a change, to which the observer is registered, + * has happened. + */ + virtual void HandleDeviceStateChanged( TChangeType aChangeType ); + +public: // New functions + + /** + * Sets fast swap grid observer + */ + void SetFastSwapGridObserver( MTsFastSwapGridObserver* aObserver ); + + /** + * Set indexes of items which can be closed. + * Copies item index array. + */ + void SetCloseItemsL( RArray& aItemIndex ); + + /** + * Checks if the item of given index is closable + */ + TBool CanCloseItem( TInt aItemIndex ); + + /** + * Checks if the given item's close icon has been tapped. + */ + TBool IsItemCloseHit( TInt aItemIndex ); + + /** + * Resets index of the item that has been close icon hit + */ + void ResetCloseHit(); + + /** + * Sets grid behaviour + * + * @param aBehaviour behaviour to be set + */ + void SetGridBehaviour( TFastSwapGridBehaviour aBehaviour ); + + /** + * Getter for grid behaviour + * + * @return girds behaviour + */ + TFastSwapGridBehaviour GridBehaviour(); + + /** + * Shows highlight. In touch only behaviour highlight + * will be shown only for ammount of time. + */ + void ShowHighlight(); + + /** + * Hides highlight. + */ + void HideHighlight(); + + /** + * Checks if the highlight is currently visible. + * + * @return ETrue if highlight is visible + * EFalse if highlight is not visible + */ + TBool IsHighlightVisible(); + + /** + * Sets visible view, items outside of view will not be drawn + */ + void SetVisibleViewRect( const TRect aRect ); + + /** + * Returns visible view. Items outside of visible rectangle are not drawn. + */ + TRect VisibleViewRect(); + + /** + * Launch tactile ETouchFeedbackSensitive feedback. + */ + void LaunchTactileFeedback(); + + /** + * Set tactile feedback support. + * + * @param aSupport new support value + */ + void SetTactileFeedbackSupport(TBool aSupport); + + /** + * Remove item from iFullyVisibleItems and iPartialVisibleItems arrays + * + * @param aItem idem index + * @return ETrue if item was removed + * EFalse if item was not found + */ + TBool RemoveFromVisibleItems(TInt aItem) const; + + /** + * Add item to iFullyVisibleItems array + * + * @param aItem idem index + * @return ETrue if item was added + * EFalse if item was not added because it was there before + */ + TBool AddToFullyVisibleItems(TInt aItem) const; + + /** + * Remove item from iPartialVisibleItems array + * + * @param aItem idem index + * @return ETrue if item was removed + * EFalse if item was not removed because it was not found + */ + TBool MoveToPartialVisibleItems(TInt aItem) const; + +private: // From CAknGrid + virtual void CreateItemDrawerL(); + +private: // New functions + + /** + * Loads close icon bitmap and mask + */ + void LoadCloseIcon(); + + /** + * Redraws grid and parent controls + */ + void Redraw(); + +private: // Data + + // Grid's parent + const CCoeControl* iParent; + + // Background context for grid + CAknsFrameBackgroundControlContext* iBgContext; + + // Close icon handling + RArray iCloseItems; + TInt iCloseIconHitIdx; + MTsFastSwapGridObserver* iFastSwapGridObserver; + + // Highlight handling + TFastSwapGridBehaviour iBehaviour; + TBool iHighlightVisible; + + // Visible view rectangle (horizontal scrolling support) + TRect iVisibleViewRect; + + TBool iTactileFeedbackSupport; + + mutable RArray iFullyVisibleItems; + mutable RArray iPartialVisibleItems; + }; + + + +/** + * Custom item drawer for drawing grid items + */ +class CTsGridItemDrawer: public CFormattedCellListBoxItemDrawer + { + +public: // Constructor and destructor + CTsGridItemDrawer( CTsFastSwapGrid* aGrid, + CFormattedCellListBoxData* aData ); + ~CTsGridItemDrawer(); + +public: // New functions + + /** + * Sets close icon drawn for items that can be closed. + * Ownership transferred. + */ + void SetCloseIcon( CFbsBitmap* aBmp, CFbsBitmap* aMask ); + + /** + * Initializes close icon rectangles. + * + * @param aButtonRect rectangle for the button, coordinates must be relative to the grid item + * @param aIconRect rectangle for the icon, coordinates must be relative to the grid item + */ + void SetCloseIconRect( const TRect& aButtonRect, const TRect& aIconRect ); + + /** + * Returns current close icon coordinates for the given item rectangle + * + * @param aItemRect rectangle of the item for which close button coordinates + * are to be returned + */ + TRect GetCloseButtonRect( const TRect& aItemRect ) const; + + /** + * Sets screen offset for the item drawer to not draw items on the + * grid edges + */ + void SetEdgeOffset( TInt aLeftOffset, TInt aRightOffset ); + + /** + * Enables/Disables item drawer background redrawing + * + * @param aEnable if set to ETrue, background will be redrawn by item drawer + * if set to EFalse, background will not be redrawn + */ + void SetRedrawBackground( TBool aEnable ); + +private: // From CFormattedCellListBoxItemDrawer + void DrawActualItem( TInt aItemIndex, const TRect& aActualItemRect, + TBool aItemIsCurrent, TBool aViewIsEmphasized, + TBool aViewIsDimmed, TBool aItemIsSelected ) const; +private: // New functions + /** + * Checks if the item rectangle is visible in the view. + * + * @param aItemRect rectangle of the item to be checked + * @return ETrue if rectangle is fully or partially visible + * EFalse if rectangle is not visible + */ + TBool IsItemRectVisible( const TRect& aItemRect ) const; + + /** + * Checks if the aRectContained rectancle is contained by aRectContainig + * + * @param aRectContained rectangle that is suppose to be contained + * @param aRectContainig rectangle that is suppose to be containing + * @return ETrue if rectangle is fully contained + * EFalse if rectangle is not fully contained + */ + TBool IsRectContained(const TRect& aRectContained, + const TRect& aRectContainig) const; + + /** + * Calculates current inner button rectangle for close icon + */ + TRect CalculateInnerButtonRect( const TRect& aOuterRect ) const; + +private: // Data + // Not owned + CTsFastSwapGrid* iGrid; + // Owned + CFbsBitmap* iCloseIcon; + CFbsBitmap* iCloseIconMask; + + TRect iScreenRect; + TInt iLeftOffset; + TInt iRightOffset; + + // Layout data + TRect iCloseIconRect; + TRect iCloseButtonRect; + + TBool iRedrawBackground; + }; + + + +/** + * Timer class for handling highlight bevaiour + */ +class CTsFastSwapTimer : public CTimer + { +public: + // Constructor + CTsFastSwapTimer( MTsFastSwapTimerObserver& aObserver ); + // Destructor + ~CTsFastSwapTimer(); + // 2nd phase constructor + void ConstructL(); + +private: // From CTimer + void RunL(); + +private: // Data + MTsFastSwapTimerObserver* iObserver; // not own + }; + +#endif /* TSFASTSWAPGRID_H_ */