taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapgrid.h
branchRCL_3
changeset 83 5456b4e8b3a8
child 88 3321d3e205b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/taskswitcherui/taskswitcherapp/inc/tsfastswapgrid.h	Wed Sep 01 12:32:46 2010 +0100
@@ -0,0 +1,399 @@
+/*
+* 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 <AknGrid.h>
+#include <aknconsts.h>
+#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 MTsFastSwapTimerObserver
+    {
+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 );
+    void HandleResourceChange( TInt aType );
+    void SizeChanged();
+    void Draw( const TRect& aRect ) const;
+    
+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<TInt>& 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 color for the screenshot stroke.
+     * 
+     * @param  aColor  color for the thumbnail
+     * @param  aHighlightedColor  color for thumbnail when item is highlighted
+     */
+    void SetStrokeColors( TRgb aColor, 
+                          TRgb aHighlightedColor );
+    
+    /**
+     * Sets items for which stroke will be drawn
+     * 
+     * @param  aItemIndex  array of item indexes for which stroke
+     *                     is drawn
+     */
+    void SetStrokeItemsL( RArray<TInt>& aItemIndex );
+    
+    /**
+     * 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();
+    
+    /**
+     * Updates layout data for item drawer. Should be called when
+     * layout maybe out of date
+     */
+    void UpdateItemDrawerLayoutDataL();
+    
+    /**
+     * Enables/disables avkon event handling.
+     * 
+     * @param  aEnable  if set to ETrue, pointer events will be forwarded
+     *                  to CAknGrid base class if necessary. If set to EFalse,
+     *                  no pointer events will be forwarded.
+     */
+    void EnableAknEventHandling( TBool aEnable );
+
+private: // From CAknGrid
+    virtual void CreateItemDrawerL();
+
+private: // From MTsFastSwapTimerObserver
+    void TimerCompletedL( CTsFastSwapTimer* aSource );
+    
+private: // New functions
+    
+    /**
+     * Loads close icon bitmap and mask
+     */
+    void LoadCloseIconAndStrokeParams();
+    
+    /**
+     * Redraws grid and parent controls
+     */
+    void Redraw();
+    
+private: // Data
+    
+    // Grid's parent
+    const CCoeControl* iParent;
+    
+    // Close icon handling
+    RArray<TInt> iCloseItems;
+    TInt iCloseIconHitIdx;
+    MTsFastSwapGridObserver* iFastSwapGridObserver;
+    CTsFastSwapTimer* iCloseIconRedrawTimer;
+
+    // Highlight handling
+    TFastSwapGridBehaviour iBehaviour;
+    TBool iHighlightVisible;
+    
+    // Visible view rectangle (horizontal scrolling support)
+    TRect iVisibleViewRect;
+    
+    // Flag controlling input handling by grid
+    TBool iAknEventHandlingEnabled;
+    };
+
+
+
+/**
+ * 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* aBmpMask,
+                       CFbsBitmap* aBmpPressed, CFbsBitmap* aBmpPressedMask );
+
+    /**
+     * 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 );
+    
+    /**
+     * Sets color for the screenshot stroke.
+     * 
+     * @param  aColor  color for the thumbnail
+     * @param  aHighlightedColor  color for thumbnail when item is highlighted
+     */
+    void SetStrokeColors( TRgb aNormalColor,
+                          TRgb aHighlightedColor );
+    
+    /**
+     * Sets items for which stroke will be drawn
+     * 
+     * @param  aItemIndex  array of item indexes for which stroke
+     *                     is drawn.
+     */
+    void SetStrokeItemsL( RArray<TInt>& aItemIndex );
+    
+    /**
+     * Sets stroke offset and size: values must be relative
+     * to item rectangle.
+     * 
+     * @param  aStrokeOffset  offset of the stroke rectangle relative
+     *                        to item rectangle
+     * @param aStrokeSize     size of the stroke rectangle
+     */
+    void SetStrokeOffset( TPoint aStrokeOffset, TSize aStrokeSize );
+    
+    /**
+     * Set screen rectangle, used by the item drawer to determine
+     * drawn area.
+     * 
+     * @param  aRect  screen rectangle
+     */
+    void SetScreenRect( TRect aRect );
+
+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;
+    CFbsBitmap* iCloseIconPressed;
+    CFbsBitmap* iCloseIconPressedMask;
+    
+    TRect iScreenRect;
+    TInt iLeftOffset;
+    TInt iRightOffset;
+    
+    // Close button data
+    TRect iCloseIconRect;
+    TRect iCloseButtonRect;
+	
+    TBool iRedrawBackground;
+    
+    // Stroke data
+    TRgb iStrokeColor;
+    TRgb iHighlightStrokeColor;
+    RArray<TInt> iStrokeItems;
+    TRect iStrokeRect;
+    };
+
+
+
+/**
+ * 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_ */